HyDE: hypoteettiset dokumenttiupotukset
Luokaa LLM:llä näennäinen ”ihanteellinen” vastaus, upottakaa se ja tehkää haku sen avulla – näin saatte lyhyitä kyselyupotuksia parempia tuloksia.
HyDE: hypoteettiset dokumenttiupotukset on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Kyselyembeddingien ongelma
Käyttäjien kyselyt ovat yleensä lyhyitä eivätkä muistuta juuri lainkaan dokumentteja, joita haluatte hakea.
- Kysely: "korjatkaa näppäimistöni"
- Dokumentti: "Jos mekaanisen näppäimistön näppäimet takertelevat, voitte puhdistaa kytkimet isopropyylialkoholilla..."
Vektorit ovat semanttisesti kaukana toisistaan, joten haku ei löydä dokumenttia.
HyDE-ajatus
HyDE = Hypothetical Document Embeddings (Gao et al. 2022).
- Pyytäkää LLM:ää kirjoittamaan kyselyyn tekaistu "ihannevastaus"
- Muodostakaa embedding tekaistusta vastauksesta, ei kyselystä
- Käyttäkää tätä vektoria todellisen korpuksen hakemiseen
Miksi se toimii
Hypoteettinen vastaus näyttää aidolta dokumentilta: sen sanasto ja rakenne ovat samankaltaiset. Sen embedding sijaitsee lähellä todellisten dokumenttien embeddingejä, joten haku löytää ne luotettavammin.
Implementation
def hyde_search(query, k=5):
# Step 1: hallucinate an answer
hypo_answer = llm.invoke(f'Please write a passage to answer the question: {query}').content
# Step 2: embed it
vec = embed(hypo_answer)
# Step 3: retrieve
return vector_db.query(vec, k=k)Vastaus saa olla väärä
HyDEn hypoteettinen vastaus voi olla faktuaalisesti väärä — se ei haittaa. Käytämme sen embeddingiä vain hakuun. Haettuja OIKEITA dokumentteja käytetään lopullisen vastauksen muodostamiseen.
Code Example with LangChain
from langchain.chains import HypotheticalDocumentEmbedder
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
embeddings = HypotheticalDocumentEmbedder.from_llm(
ChatOpenAI(),
OpenAIEmbeddings(),
'web_search' # built-in prompt template
)
vector = embeddings.embed_query('How do I fix a sticky keyboard?')Kustannusten ja hyödyn kompromissi
HyDE vaatii yhden ylimääräisen LLM-kutsun kyselyä kohden. Se on hyödyllinen, kun:
- Kyselyn muotoilu poikkeaa suuresti dokumenttien muotoilusta
- Haun kattavuus on järjestelmän pullonkaula
- Korpus sisältää teknistä tekstiä, jonka käyttäjä muotoilee omin sanoin
Moninäytteinen HyDE
Tuottakaa N hypoteettista vastausta, muodostakaa kustakin embedding, hakekaa kullekin top-K-tulokset ja yhdistäkää tulokset. Menetelmä on kalliimpi, mutta sen kattavuus on parempi haastavissa kyselyissä.
hypos = [llm.invoke(...).content for _ in range(3)]
vecs = [embed(h) for h in hypos]
results = set()
for v in vecs:
results.update(vector_db.query(v, k=5))HyDEn ja uudelleenjärjestämisen yhdistäminen
HyDE parantaa kattavuutta ja cross-encoder tarkkuutta:
- HyDE hakee 50 parasta
- Cross-encoder järjestää ne uudelleen ja valitsee 5 parasta
- LLM muodostaa vastauksen viiden parhaan perusteella
Milloin HyDEa EI pidä käyttää
- Kyselyt vastaavat jo dokumenttien kieltä, kuten usein kysytyissä kysymyksissä
- Viivekriittiset polut
- Erittäin pienet korpukset, joissa yksinkertainen haku toimii
HyDE koodille
Koodihaussa voitte kuvitella käyttäjän etsimän funktion, muodostaa siitä embeddingin ja hakea todelliset funktiot.
code_hypo = llm.invoke(f'Write the Python function that does: {user_request}').content
results = code_index.search(embed(code_hypo))Muunnelma: Step-Back Prompting
Aiheeseen liittyvä tekniikka: pyytäkää mallia johtamaan ensin yleisempi kysymys ("Miten näppäimistöjä puhdistetaan?" -> "Mikä yleinen puhdistusmenetelmä sopii mekaanisille näppäimistöille?"), muodostakaa siitä embedding ja hakekaa sen perusteella.
HyDE: miksi se toimii
Mikä saa HyDEn löytämään parempia tuloksia kuin raakadatan kyselystä muodostettu embedding?
Kertaus
HyDE: kuvitelkaa vastaus, muodostakaa SIITÄ embedding ja hakekaa. Menetelmä maksaa yhden ylimääräisen LLM-kutsun, mutta parantaa hakua vaikeissa, uudelleenmuotoilluissa tai teknisissä kyselyissä.
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 ”HyDE: hypoteettiset dokumenttiupotukset” ilmainen?
Kyllä – oppitunnin ”HyDE: hypoteettiset dokumenttiupotukset” 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 ”HyDE: hypoteettiset dokumenttiupotukset”?
Luokaa LLM:llä näennäinen ”ihanteellinen” vastaus, upottakaa se ja tehkää haku sen avulla – näin saatte lyhyitä kyselyupotuksia parempia tuloksia. 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 2/4.
Kuinka kauan ”HyDE: hypoteettiset dokumenttiupotukset”-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)