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.