Yksikkö 4 / 11

Hakustrategiat: Top-k, hybridi, uudelleensijoitus

Voitot:

  • Hybridihaun toteuttaminen, joka yhdistää top-k-valinnan sekä semanttisen ja avainsanahaun
  • Ensimmäisen haun tarkkuuden lisääminen uudelleensijoituksella
  • Tee vaikeista kysymyksistä paremmin haettavia tekniikoilla, kuten kyselymuunnos ja HyDE

Silppusit asiakirjat hienosti ja laitoit ne vektoritietokantaan. Nyt todellinen työ: oikeiden kappaleiden hakeminen, kun käyttäjä kysyy. Tätä kutsutaan noutamiseksi ja se on RAG-laadun selkäranka. Muista lause "Retrieval quality = RAG quality"; Tämä laite on juuri sen laadun parantamisen taidetta. Käsittelemme käytännön tekniikoita huippuk-valinnasta hybridihakuun, uudelleensijoittamisesta kyselyn muuntamiseen.

Top-k: Kuinka monta kappaletta tuomme?

Perusasetus: kuinka monta kappaletta (k) palautetaan hausta. Jos tuot vähemmän (k=1), on suuri riski, että oikea pala puuttuu; Jos lisäät liikaa (k=20), se lisää kohinaa malliin ja tokenin hinta nousee.

Erota kaksi käsitettä. Muista: nopeus, jolla oikea kappale on haettujen joukossa. Tarkkuus: nopeus, jolla haettava on merkityksellistä. K:n lisääminen lisää muistia, mutta heikentää tarkkuutta. Tavoitteena on tasapainottaa nämä kaksi.

top-k

Vaikutus

sopiva tilanne

1-3

Suuri tarkkuus, väliin jäämisen vaara

Yksinkertaisia, yhden vastauksen kysymyksiä

4-8

tasapaino; useimmat skenaariot

Yleinen yritys RAG

10-20

Korkeampi muisti, melu lisääntyy

Uudelleensijoituksella (alla)

Vinkki: Yleinen ja voimakas kuvio: hae leveä (k=20), sitten kavenna luokittelemalla uudelleen (4 parasta). Näin et menetä mitään ja annat mallille puhtaan kontekstin.

Hybridihaku: Kahden haun voima

Semanttinen (vektori)haku tallentaa merkityksen, mutta jättää huomiotta asioita: täydellinen tuotekoodi ("XR-4471"), harvinainen lyhenne, oikea nimi, versionumero. Näissä tarkan haun tehtävissä vanhan koulun avainsanahaku – erityisesti klassinen BM25-algoritmi – on erittäin hyvä.

Hybridihaku yhdistää nämä kaksi: sekä semanttiset että avainsanahaut toimivat yhdistäen tulokset. Siten kysymyksessä, kuten "Takuuaika

Yhdistäminen tehdään yleensä RRF:llä (Reciprocal Rank Fusion): molemmissa listoissa korkeammalla oleva kappale tulee eteen.

# Hybridihaku (käsitteellinen)sem = vector_search(kysymys, k=20) # merkitysavain = bm25_search(kysymys, k=20) # fullwordresult = rrf_merge(sem, key)[:8] # yhdistä nämä kaksi, top 8

Uudelleensijoitus: Toinen ja Smarter Pass

Ensimmäinen puhelu voi olla nopea, mutta töykeä. Uudelleensijoitus pisteyttää ensimmäisellä haulla palautetut ehdokkaat yksitellen tehokkaammalla mallilla (yleensä ristienkooderilla – mallilla, joka lukee kysymyksen ja kohdan yhdessä ja pisteyttää osuvuuden) ja siirtää osuvimmat ehdokkaat kärkeen.

Logiikka on seuraava: ensimmäisessä haussa määrätään suuri määrä ehdokkaita takaisinvedettäväksi (20 ehdokasta), uudelleensijoittaja valitsee tarkkuuden vuoksi 4 parasta. Tämä kaksivaiheinen lähestymistapa on paljon tarkempi kuin yksivaiheinen haku. Se maksaa jonkin verran viivettä ja lisäkäsittelyä; Hyöty on merkittävä laadun nousu.

# Kaksivaiheinen haku (käsitteellinen) ehdokkaat = hybridi_haku(kysymys, k=20) # laaja, pikapiste = reranker.score(kysymys, ehdokkaat) # kunkin ehdokaskontekstin relevanssipisteet = arvioitu.sijoitus()[:4] # top 4

Kyselyn muuntaminen

Joskus ongelma ei ole haussa, vaan itse kysymyksessä. Jos käyttäjä kysyy "entä etätyöntekijät?" Tätä ei voida etsiä yksin (ei ole selvää, mikä on etätyöntekijöitä). Tässä ovat kyselyn muunnostekniikat:

  • Kirjoita uudelleen: Käytä keskusteluhistoriaa kysymyksestä itsenäiseksi: "Millä etätyöntekijöillä on oikeus vuosilomaan?"
  • Monikysely: Luo 3 eri ilmaisua samalle kysymykselle, hae niillä kaikilla, yhdistä tulokset. Eri sanat löytävät eri palasia.
  • HyDE (hypoteettiset asiakirjan upotukset): Tulosta ensin "mahdollinen vastaus" malliin, upota sitten ja etsi kuvitteellinen vastaus. Kuvitteellinen vastaus löytyy joskus paremmin, koska se on sanoin lähempänä todellista asiakirjaa.

# Multi-query (käsitteelliset)variantit = model.uret("Ilmoita tämä kysymys kolmella eri tavalla: " + kysymys)tum_sonuc = []for v muunnelmissa: all_sonuc += vector_intermediate(v, k=6)context = singular_and_order(tum_result)[:6]

Heikko nouto / vahva nouto

Heikko (yksivaiheinen, vain semantiikka, vakio k=3):

tulos = vector_search(question, k=3)# Ongelma: tuotekoodi puuttuu, ei voi syöttää oikeaa osaa 3 vaikeissa kysymyksissä.

Tehokas (hybridi + widek + uudelleensijoitus + tarvittaessa monikysely):

ehdokkaat = hybridi_haku(uudelleenkirjoita(kysymys, menneisyys), k=20)context = uudelleensijoittaja.pisteet(kysymys, ehdokkaat).first(4)# Sekä tarkka vastaavuus että merkitys tallennetaan; Se menee neljälle parhaalle mallille.

Kolme minikoteloa

Tapaus 1 — Tuotekoodi on koodinvaihtomerkki. Pelkkä semanttinen haku tukitiimillä ei löytänyt sanaa "RTX-9080" sanatarkasti kysymyksestä "RTX-9080 driver error"; Hän toi muita samannimisiä tuotteita. Kun hybridihaku lisättiin, koodi täsmättiin täsmällisesti ja oikeiden artikkelien palautusprosentti nousi 58 prosentista 92 prosenttiin.

Tapaus 2 – Luokittelun ero. Apalakimies työskenteli k=5:llä, mutta oikea kohta on 7-10 suurimman osan ajasta. Hän pysyi riveissä. Kun k=20 + uudelleensijoitus otettiin käyttöön, oikean artikkelin 3 parhaan joukkoon sijoittuminen nousi 61 %:sta 94 %:iin; Latenssi lisääntyi vain 300 ms – hyväksyttävä kompromissi.

Tapaus 3 – Jatkokysymys ilman kontekstia. HR-assistentissa käyttäjä kysyy "entä osa-aikaiset?" Kun kysyin, järjestelmä toi epäolennaisia ​​osia. Kirjoittamalla kysely uudelleen (vetämällä "vuosiloman" konteksti menneisyydestä ja lisäämällä "Osa-aikatyöntekijät ovat oikeutettuja vuosilomaan") oikea vastausprosentti nousi 40 %:sta 86 %:iin.

Yleisiä virheitä

  • Pelkästään semanttiseen hakuun tukeutuminen: Tuotekoodi, lyhenne, oikea nimi puuttuu; Lisää hybridi.
  • K:n pitäminen liian pienenä: Oikea pala ei pääse listaan; Tee siitä leveä ja kavenna sitä uudelleensijoituksella.
  • Älä koskaan ajattele uudelleen luokittelua: Ensimmäinen haku on epäkohteliasta; Toinen älykäs passi parantaa huomattavasti laatua.
  • Jatkokysymysten etsiminen sellaisenaan: Kysymys ilman kontekstia etsii merkityksettömiä; kirjoittaa uudelleen.
  • Sokeasti kohoava k (ilman uudelleensijoitusta): Malli on täynnä kohinaa, vaste vääristyy ja kustannukset kasvavat.
Varo: Jokainen tekniikka lisää kustannuksia ja viivettä. Monikysely tarkoittaa kolminkertaista hakua, uudelleensijoitus tarkoittaa lisämallikutsua. Aloita yksinkertaisella hybridillä + järkevä k ensin; Mittaa ja lisää raskaita tekniikoita siellä, missä niitä todella tarvitaan. Lisäys ilman mittaamista.

Yhteenvetona

  • Top-k on tasapaino muistamisen ja tarkkuuden välillä; Yleensä 4-8 on hyvä alku.
  • Hybridihaku yhdistää semanttisen haun avainsanahakuun (BM25); Palauttaa tarkat vastaavuudet.
  • Uudelleensijoitus pisteyttää ehdokkaat uudelleen laajasta alkuhausta vankalla mallilla ja valitsee parhaat.
  • Kyselymuunnos (uudelleenkirjoitus, monikysely, HyDE) tekee vaikeista ja kontekstittomista kysymyksistä haettavissa.
  • Vahva kuvio: leveä nouto → yhdistä hybridiin → kapea ja uudelleensijoitus; mutta lisää jokainen tekniikka mittaamalla se.

Sovellustehtävä

Valmista 6 vaikeaa kysymystä aiempien yksiköiden tiedoilla: vähintään 2 vaativat tarkan vastaavuuden (tuotekoodi, lyhenne, päivämäärä), 2 semanttista (sama aihe eri sanoilla), 2 jatkokysymystä ilman kontekstia. (1) Ajattele ensin jokaista kysymystä pelkkänä semanttisena hakuna ja merkitse manuaalisesti, mitkä osat tulevat esiin. (2) Arvioi samat kysymykset uudelleen lisäämällä hybridi- ja uudelleensijoitus. (3) Kirjoita jatkokysymykset uudelleen ilman kontekstia. Merkitse taulukkomuotoon, millä tekniikalla on ero missä kysymystyypissä.

tarkistuslista

  • [ ] Tiedän, että top-k on palautus-tarkkuustasapaino ja kohtuullinen aloitusalue.
  • [ ] Voin selittää, miksi hybridihaku palauttaa tarkat haut.
  • [ ] Osaan soveltaa uudelleensijoittamisen kaksivaiheista logiikkaa (leveä → älykäs kapea).
  • [ ] Ymmärrän tarpeen kirjoittaa uudelleen jatkokysymykset ilman kontekstia.
  • [ ] Vahvistan, että lisäsin raskaat tekniikat mittaamalla, en mittaamalla.