Monivektorihaku (ColBERT)
Indeksoikaa dokumenttia kohden useita vektoreita (yksi tokenia tai osaa kohden) hienojakoista vastaavuutta varten.
Monivektorihaku (ColBERT) on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Osaa tämän oppitunnin sisällöstä ei ole vielä käännetty, joten se näytetään englanniksi.
Yksi vektori ei riitä
Standardi RAG muodostaa kustakin katkelmasta yhden vektorin. Tämä vektori keskiarvoistaa kaiken katkelman sisällön ja hävittää hienojakoisen tiedon.
Monivektorihaku tallentaa dokumenttia kohden USEITA vektoreita ja kohdistaa ne tarkemmin.
ColBERT-ajatus
ColBERT (Khattab & Zaharia, 2020) muodostaa embeddingin dokumentin jokaisesta TOKENISTA ja kyselyn jokaisesta tokenista ja laskee sitten suurimman samankaltaisuuden:
score(q, d) = sum over q_token in q: max over d_token in d: cos(q_token, d_token)Miksi ColBERT päihittää yhden vektorin
- Se tallentaa dokumentin useat näkökulmat, joita yksi vektori ei pysty kuvaamaan
- Se käsittelee pitkät dokumentit paremmin
- Se tarjoaa paremman kattavuuden harvinaisille termeille
ColBERTin kustannukset
Kun yksi vektori tallennetaan katkelman sijaan jokaista tokenia kohden:
- Jos katkelmassa on 500 tokenia, tallennustilaa tarvitaan 500 kertaa enemmän
- Jokaisessa haussa vertaillaan huomattavasti useampia pareja
Kvantisointi ja karsinta pienentävät tätä määrää 10–50-kertaisesti, mutta menetelmä on silti kallis.
ColBERTv2
ColBERTv2 lisää jäännöspakkauksen: tokenit ryhmitellään keskipisteisiin, ja kukin token tallennetaan muodossa (centroid_id, small_residual). Tallennustilan tarve pienenee 50-kertaisesti.
ColBERTin suorittaminen
RAGatouille-kirjasto tekee siitä helppoa:
# pip install ragatouille
from ragatouille import RAGPretrainedModel
rag = RAGPretrainedModel.from_pretrained('colbert-ir/colbertv2.0')
rag.index(collection=documents, index_name='my_corpus')
results = rag.search(query='What is the refund policy?', k=5)Monivektorihaku käytännössä
ColBERTin lisäksi on olemassa muita monivektorimenetelmiä:
- Parent-child — muodostakaa embedding pienistä katkelmista ja hakekaa suuret ylädokumentit
- Summary + chunks — muodostakaa embedding sekä dokumentin yhteenvedosta että yksittäisistä katkelmista
- Hypothetical questions — muodostakaa embedding kustakin dokumentista syntetisoiduista kysymys-vastauspareista
Hypothetical Questions Pattern
def index_with_hypos(doc):
# Generate 5 plausible questions this doc could answer
questions = llm.invoke(f'Write 5 questions answered by this doc:\n{doc}').content.split('\n')
for q in questions:
vector_db.add(embed(q), payload={'doc': doc, 'question': q})
# Now queries that match a stored hypothetical question retrieve the doc.Parent-Child with LangChain
from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore
store = InMemoryStore()
retriever = ParentDocumentRetriever(
vectorstore=child_vectorstore,
docstore=store,
child_splitter=child_splitter, # small
parent_splitter=parent_splitter # large
)
retriever.add_documents(documents)
# Indexes small chunks, returns large parents.Milloin ColBERTia kannattaa käyttää
- Haut, joissa virheillä on suuret seuraukset, kuten laki- ja lääketieteelliset haut
- Pitkät dokumentit
- Kun voitte maksaa tallennustilan kustannukset
Milloin se kannattaa ohittaa
- Pienet korpukset
- Viiveherkät polut
- Kustannusrajoitteiset projektit
Yhdistäminen BM25:n kanssa
Maksimaalisen kattavuuden saavuttamiseksi yhdistäkää monivektorihaku perinteiseen BM25-avainsanahakuun. Yhdistäkää tulokset Reciprocal Rank Fusion -menetelmällä.
ColBERTin kompromissi
Mikä on ColBERT-tyylisen monivektorihakun tärkein kompromissi?
Kertaus
Yksi vektori katkelmaa kohden hukkaa tietoa. ColBERT tallentaa vektorin jokaista tokenia kohden ja tarjoaa paremman tarkkuuden. RAGatouille tekee käyttöönotosta helppoa. Käyttäkää sitä, kun kattavuus on tärkeää ja kustannukset sallivat sen.
Opi Tekoälyagentit 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
- 60
- Oppitunnit
- 239
Usein kysytyt kysymykset
Onko oppitunti ”Monivektorihaku (ColBERT)” ilmainen?
Kyllä – oppitunnin ”Monivektorihaku (ColBERT)” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Monivektorihaku (ColBERT)”?
Indeksoikaa dokumenttia kohden useita vektoreita (yksi tokenia tai osaa kohden) hienojakoista vastaavuutta varten. Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Monivektorihaku (ColBERT)”-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ä Tekoälyagentit-oppitunnilla?
Kyllä. Jokainen Tekoälyagentit-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
- Uudelleenjärjestäminen ristiinkoodereilla
- HyDE: hypoteettiset dokumenttiupotukset
- Monivektorihaku (ColBERT)
- RAG:n arviointi (RAGAS, Recall@K)