Üksus 2 / 11

Manustamine ja vektorandmebaasi loogika

Kasu:

  • Aru, et põimimine muudab teksti semantilises ruumis vektoriks ja sarnased tähendused on lähedased vektorid
  • Selgitatakse, kuidas ANN-otsing koosinus- ja punktisarnasusmõõdikutega töötab
  • Levinud vektorandmebaaside valimine maksumuse, ulatuse ja metaandmete filtreerimise vajaduse alusel

RAGi keskmes on üksainus küsimus: "Milline tekstiosa on kasutaja küsimusega kõige sarnasem?" Arvuti töötleb teksti numbritega, mitte sõna-sõnalt. Sellepärast peame esmalt teisendama teksti numbriteks, mis kannavad selle tähendust. See on põimimine: teksti teisendamine numbrijadaks (vektoriks), mis esindab selle teksti tähendust. Kui olete selle üksuse lõpetanud, saate teada, kuidas manustamine toimib, kuidas sarnasust mõõdetakse ja kuidas valida õige vektorandmebaas.

Manustamine: tähenduse tõlkimine koordinaatidesse

Manustusmudel (spetsiaalselt koolitatud tehisintellekt) teisendab teie esitatud teksti näiteks 1024 numbrist koosnevaks vektoriks. Mõelge sellele vektorile kui koordinaadile mitmemõõtmelises ruumis. Maagia seisneb selles: tähenduselt sarnased tekstid langevad selles ruumis lähedastesse koordinaatidesse.

Lihtne näide: "põhipuhkus", "õigus puhkusele" ja "iga-aastane tasustatud puhkus" kasutavad erinevaid sõnu, kuid tähendavad sama asja – nende vektorid on üksteise lähedal. “Palgaarvestus” on hoopis teine ​​asi – selle vektor on kauge. Nii et kasutaja küsib "mitu päeva puhkust mul on?" Kui küsite, leiame isegi dokumendi, kus pole sõna "puhkus", vaid on kirjas "põhipuhkus on 14 päeva". See on see, mida klassikaline märksõnaotsing (otsing, mis vastab sõnale täpselt) teha ei saa.

Näpunäide. Mõelge manustamisele kui "tähenduse sõrmejäljele". Kahe sama tähendusega lause sõrmejäljed tunduvad sarnased; Isegi kui sõnad on erinevad.

Oluline reegel: küsimuse manustamisel kasutatav mudel peaks olema sama mudel, mida kasutate dokumentide manustamisel. Erinevad mudelid toodavad erinevaid ruume; koordinaadid muutuvad võrreldamatuks.

Kuidas sarnasust mõõta?

Kahe vektori sarnasuse mõõtmiseks on mitu meetodit. Kõige tavalisem on koosinussarnasus: see mõõdab kahe vektori vahelist nurka. Kui nurk on väike (vektorid näitavad samas suunas), on sarnasus suur. Väärtus on vahemikus −1 kuni 1; Ligi 1 = väga sarnane.

kriteerium

Mida see mõõdab?

Millal eelistatakse?

Koosinus

Nurk (suund) vektorite vahel

Kõige tavalisem; vaikimisi teksti semantiline sarnasus

Dot toode

Suund + suurusjärk koos

Kui vektorid on normaliseeritud, annab see sama tulemuse kui koosinus; on kiire

Eukleidiline (eukleidiline kaugus)

Sirge kaugus koordinaatide vahel

Mõnes rühmitamise stsenaariumis; tekstis vähem kasutatud

Praktikas toodavad enamik manustamismudeleid normaliseeritud vektoreid (suurus on seatud 1); Sel juhul annavad koosinus ja punktkorrutis sama järjekorra. Ärge olge otsustusvõimetuses: alustage koosinusest.

Miljonite vektorite seas on nende ükshaaval võrdlemine aeglane. Seetõttu kasutavad vektorandmebaasid ANN (ligikaudne lähinaaber) algoritme. ANN leiab väga kiiresti pigem "peaaegu täpselt lähima" kui "täpselt lähima". Näiteks meetod nimega HNSW võib isegi 10 miljoni vektori puhul tulemusi mõne millisekundiga tagastada. Väikese täpsuse ohverduse eest saavutate suure kiiruse.

Mida vektorandmebaas teeb?

Vektorite andmebaas teeb korraga kolme asja: (1) salvestab vektorid, (2) leiab kiiresti päringuvektorile kõige sarnasemad vektorid, (3) filtreerib iga vektori kõrval olevate metaandmete järgi. Metaandmed on sildid, mille te sellele tükile lisate: lähtefail, kuupäev, osakond, privaatsustase jne. Metaandmete filtreerimine on ettevõtte RAG-i jaoks kriitilise tähtsusega; sest pead saama seada piiranguid nagu "otsi ainult rahandusosakonna 2025. aasta dokumentidest".

# Registreeru vektorandmebaasi (conceptual)vektor_db.add( id="izin-politikasi-parca-3", vektor=embed("Iga-aastane tasustatud puhkus on 14 päeva..."), text="Iga-aastane tasustatud puhkus on 14 päeva...", metadata={"allikas": "ik_el_kitabi.pdf", "osakond": "ik_6",0date2: "IK",0da2te "ic"})

# Metaandmetega filtreeritud otsingu (kontseptuaalne) tulemus = vektor_db.search( vektor=embed("mitu päeva puhkust mul on?"), top_k=4, filter={"osakond": "HR", "privaatsus": ["sisemine", "sees"]})

Õige andmebaasi valimine

sõidukit

Esiletõstetud aspekt

Sobiv olukord

Sisseehitatud / failipõhine (manustatud teek)

Paigaldamata, üks masin

Prototüüp, väike komplekt (< paarsada tuhat osa)

Hallatud pilveteenus

Skaleerimine ja hooldus ei ole teie kohustus

Tootmine, kiiresti kasvavad andmed, väike meeskond

Avatud lähtekoodiga teie enda serveris

Täielik kontroll, teie andmed jäävad teile

Privaatsuskohustus, olemasolev infrastruktuur

Täiendus olemasolevale andmebaasile

Te ei halda eraldi süsteeme

Vektortoe lisamine juba kasutatavale andmebaasile

Valides küsige: Mitu tükki tuleb? Kui kriitiline on metaandmete filtreerimine? Kas andmed võivad väljuda ettevõttest (konfidentsiaalsus)? Kas meeskond suudab kasutada infrastruktuuri? Sageli on mõistlik alustada väikesest ja vajadusel laiendada.

Nõrk lähenemine / tugev lähenemine

Nõrk (salvestab tavalist manustamist, metaandmeid pole):

Lihtsalt salvestage tekst ja vektor. Otsing: tagastab 4 kõige sarnasemat vektorit.# Probleem: ei saa filtreerida nagu "ainult praegused HR-dokumendid"; # vastusesse võib lisada ka vanu/volitamata osi.

Võimas (rikas metaandmed + filtreeritud otsing):

Lisage igale tükile allikas, kuupäev, osakond ja privaatsusmärgend. Filtreerige vastavalt kasutaja volitustele ja ajakohasusele otsingu ajal: filter = {"privacy": user_authority, "date_date": "2024-01"}# Seega on tulemus nii turvaline kui ka ajakohane.

Kolm miniümbrist

Juhtum 1 – vale mudelisegu. Meeskond manustas dokumendid mudeliga A ja küsimused mudeliga B. Otsingud andsid mõttetuid tulemusi ja õigete vastuste määr jäi 31% juurde. Kui läksin üle ühele mudelile (mõlemad sama manustamismudel), hüppas määr 88% -ni. Õppetund: küsimus ja dokument peaksid olema samas ruumis.

Juhtum 2 – privaatsusrisk ilma metaandmeteta. Tervishoiuettevõttes visati kõik osakonna dokumendid ilma metaandmeteta ühte kogusse. Kui müügitöötaja esitas küsimuse, kontekstualiseeris süsteem patsiendiandmete osa. Metaandmete + filtri lisamisel (vastavalt autoriseerimistasemele) see risk kõrvaldati; Väljatoomisel jäetakse 12 loata tükki üldse toomata.

Juhtum 3 – mastaabi kitsaskoht. E-kaubandusega tegelev ettevõte otsis lihtsa "skanni kõik" meetodiga 8 miljonit tootekirjeldust; Iga päring võttis aega 6 sekundit. Kui läksime üle HNSW-põhisele ANN-ile, vähenes aeg 45 millisekundini, kusjuures täpsus vähenes vaid 1%. Õppetund: ANN on suures komplektis kohustuslik.

Levinud vead

  • Küsimuse ja dokumendi põimimine erinevate mudelitega: Tulemused on mõttetud; alati üks mudel.
  • Metaandmete vahelejätmine: te ei saa filtreerida; Kaotate kontrolli privaatsuse ja ajakohasuse üle.
  • Krüptimiseks manustamisel ekslik: manustamine kannab pöörduvat teavet; On vale eeldada, et tundlikud andmed on "peidetud".
  • Tarbetult suure infrastruktuuri ehitamine väikesele komplektile: 5000 osa jaoks hallatav hiiglaslik klaster on tarbetu keerukus.
  • Ärge muretsege liiga palju sarnasuse kriteeriumi pärast: alustage tekstis koosinusega; Peenhäälestus tuleb hiljem.
Ettevaatust: põimimine poetab teksti tähenduse numbritesse, kuid ei "hävita" sisu. Kui vektorandmebaas lekib, satuvad ohtu ka algsed salvestatud tekstid (enamus installatsioonides salvestatakse ka tekst). Hoidke vektorite hoidla sama konfidentsiaalsena kui selles olevad dokumendid.

Kokkuvõttes

  • Põimimine muudab teksti arvude vektoriks, mis kannab selle tähendust; Sarnased tähendused on lähedased vektorid.
  • Sarnasust mõõdetakse sageli koosinusega; Normaliseeritud vektorite puhul annab punktkorrutis sama tulemuse.
  • Suurandmete puhul asendab ANN (nt HNSW) täpse otsingu: suur kiirus vähese täpsuse ohverdusega.
  • Vektori andmebaas teostab vektorsalvestust + sarnasuse otsingut + metaandmete filtreerimist; metaandmed on ettevõtte RAG jaoks hädavajalikud.
  • Küsimus ja dokument peavad olema tõlgitud sama manustamismudeliga; vastasel juhul ei saa koordinaate võrrelda.

Rakenduse ülesanne

Tõmmake eelmises üksuses valitud dokumendist välja 10 lühikest lõiku (igaüks 3-6 lauset). (1) Kujundage iga osa jaoks vähemalt kolm metaandmete märgendit (allikas, kuupäev ja kolmas, mis sobib teie ärikontekstiga: osakond, toode, privaatsus jne). (2) Kirjutage, millist metaandmete filtrit tuleks 3 erineva kasutaja küsimuse puhul rakendada. (3) Otsige üles 3 küsimuseosa paari, mis väljendavad sama tähendust erinevate sõnadega (nt "puhkuseõigus" ↔ "põhipuhkus") ja selgitage ühe lausega, miks need ei sobi märksõnaotsinguga, kuid sobivad manustamiseks.

kontrollnimekiri

  • [ ] Võin öelda, et põimimine muudab teksti semantilises ruumis vektoriks ja sarnased tähendused on lähedased.
  • Ma tean, et [ ] koosinussarnasus mõõdab nurka ja on teksti vaikeeelistus.
  • [ ] Saan selgitada, miks ANN suurandmete puhul vajalik on.
  • [ ] Ma tean, miks metaandmed on konfidentsiaalsuse ja värskuse kontrollimiseks üliolulised.
  • [ ] Järgin küsimuse ja dokumendi tõlkimise reeglit sama manustamismudeliga.