Oppikaa tekoälyä Pythonilla · Oppitunti

Johdatus vektoritietokantoihin

Miksi vektoritietokantoja tarvitaan, FAISS paikalliseen samankaltaisuushakuun ja upotusten tallentaminen tekoälyhakua varten.

Oppitunti 4/413 vaihetta

Johdatus vektoritietokantoihin on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Täsmällisiä osumia pidemmälle

Perinteiset tietokannat löytävät rivit täsmällisten arvojen perusteella (WHERE name = "x"). Tekoäly kuitenkin käsittelee embeddingejä eli merkitystä kuvaavia vektoreita, ja usein haluatte kyselyä samankaltaisimmat kohteet täsmällisten osumien sijaan.

Vektoritietokannat on suunniteltu tekemään tästä samankaltaisuushaun laskennasta nopeaa.

Mikä embedding on?

Embedding on lukuvektori, joka edustaa tekstiä, kuvaa tai ääntä siten, että samankaltaiset kohteet sijaitsevat lähellä toisiaan vektoriavaruudessa.

Semanttinen haku, suositukset ja hakuavusteinen generointi (RAG) perustuvat kaikki embeddingeihin.

import numpy as np

# A toy 4-dim embedding for a sentence
vec = np.array([0.12, -0.43, 0.88, 0.05], dtype="float32")
print(vec.shape)   # (4,)

Miksei tavallinen tietokanta riitä?

Kyselyn vertaaminen miljooniin vektoreihin brute force -silmukalla on hidasta. Vektoritietokannat käyttävät erikoistuneita indeksejä ja etäisyyslaskentaa palauttaakseen lähimmät naapurit millisekunneissa.

Ne myös skaalautuvat, säilyttävät tiedot pysyvästi ja käsittelevät metatietoja vektorien rinnalla.

Samankaltaisuuden mittaaminen

Läheisyyttä mitataan etäisyysmitalla:

  • L2 (Euklidinen) — suora etäisyys; pienempi arvo tarkoittaa suurempaa läheisyyttä
  • Cosine — vektorien välinen kulma; sopii hyvin tekstille

FAISS tukee useita etäisyysmittoja; tässä käytämme L2:ta.

FAISS-esittely

FAISS (Facebook AI Similarity Search) on nopea ja maksuton vektorihakuun tarkoitettu kirjasto. Se toimii paikallisesti ilman palvelinta, joten se sopii erinomaisesti opiskeluun ja prototyyppien rakentamiseen.

import faiss
import numpy as np
# pip install faiss-cpu

IndexFlatL2-indeksin luominen

IndexFlatL2(dim) luo L2-etäisyyttä käyttävän tasaisen indeksin, joka käy kaikki vektorit läpi ja palauttaa täsmälliset tulokset. Sille on ilmoitettava vektorien dimensio.

”Flat” tarkoittaa täsmällisiä tuloksia, joten se sopii erinomaisesti pienille ja keskisuurille kokoelmille.

import faiss

dim = 4
index = faiss.IndexFlatL2(dim)
print(index.is_trained)   # True (flat index needs no training)

Vektorien lisääminen index.add-funktiolla

Syöttäkää embeddingit 2D-muotoisena float32 NumPy-taulukkona, jonka muoto on (n, dim). index.add tallentaa ne ja index.ntotal ilmoittaa niiden lukumäärän.

import numpy as np

embeddings = np.random.random((100, dim)).astype("float32")
index.add(embeddings)
print(index.ntotal)   # 100

Haku index.search-funktiolla

index.search(query, k) palauttaa k lähintä vektoria. Se palauttaa kaksi taulukkoa: etäisyydet D ja indeksit I eli niiden sijainnit lisäysjärjestyksessä.

query = np.random.random((1, dim)).astype("float32")
D, I = index.search(query, k=5)
print("nearest ids:", I[0])
print("distances:", D[0])

Indekseistä takaisin kohteisiin

FAISS palauttaa sijainnit, ei alkuperäisiä tietojasi. Säilyttäkää rinnakkainen luettelo tai tietokanta, joka yhdistää indeksin sijainnin varsinaiseen kohteeseen, jotta voitte hakea tulokset.

docs = ["doc about cats", "doc about dogs", "doc about cars"]
# after search:
for pos in I[0]:
    print(docs[pos])   # map id -> original document

Pieni semanttisen haun putki

Koko toimintamalli on seuraava: muodostakaa dokumenteista embeddingit, lisätkää ne indeksiin, muodostakaa kyselystä embedding, suorittakaa haku ja palauttakaa vastaavat dokumentit. (sentence-transformersin kaltaiset embedding-mallit tuottavat vektorit.)

import faiss, numpy as np

# doc_vectors: (n, dim) from an embedding model
index = faiss.IndexFlatL2(doc_vectors.shape[1])
index.add(doc_vectors)

# query_vec: (1, dim) embedding of the user query
D, I = index.search(query_vec, k=3)
results = [docs[i] for i in I[0]]
print(results)

Milloin vektoritietokantaa kannattaa käyttää

Käyttäkää vektoritietokantaa, kun tarvitsette:

  • semanttista hakua tekstistä tai kuvista
  • samankaltaisuuteen perustuvia suosituksia
  • RAG:ia eli relevantin kontekstin hakemista LLM:lle

FAISS sopii erinomaisesti paikalliseen käyttöön; hallinnoidut vaihtoehdot (Pinecone, Weaviate, pgvector) lisäävät pysyvän tallennuksen ja skaalautuvuuden.

Pikatarkistus: FAISS-haku

Kutsutte index.search(query, k=5)-metodia FAISS-indeksille.

Kertaus: vektoritietokannat

Opitte samankaltaisuushaun perusteet:

  • Embeddingit sijoittavat samankaltaiset kohteet lähelle toisiaan vektoriavaruudessa
  • Vektoritietokannat tekevät lähimmän naapurin hausta nopeaa suurillakin tietomäärillä
  • FAISS:n IndexFlatL2(dim) luo täsmällisen L2-indeksin
  • index.add(embeddings) tallentaa vektorit ja index.search(query, k) palauttaa etäisyydet ja indeksit
  • Yhdistäkää palautetut indeksit alkuperäisiin kohteisiinne

Tämä päättää tietokantoja käsittelevän osuuden. Seuraavaksi: tekoälyprojektien jäsentäminen Gitillä.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
53
Oppitunnit
225

Usein kysytyt kysymykset

Onko oppitunti ”Johdatus vektoritietokantoihin” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “Johdatus vektoritietokantoihin”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Johdatus vektoritietokantoihin”?

Miksi vektoritietokantoja tarvitaan, FAISS paikalliseen samankaltaisuushakuun ja upotusten tallentaminen tekoälyhakua varten. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Johdatus vektoritietokantoihin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?

Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. SQLite Pythonin sqlite3-moduulilla
  2. Pandasin ja SQL:n integrointi
  3. ML-tulosten tallentaminen ja kysely
  4. Johdatus vektoritietokantoihin
← Takaisin: Oppikaa tekoälyä Pythonilla