Susiduriate su sunkumais dirbtinio intelekto arba viso paketo kūrimo srityje? Mūsų ekspertai padės jums: teiksime pritaikytus patarimus, techninę integraciją ir dar daugiau. Kreipkitės į [email protected].

Semantinės paieškos modelio su sakinių transformatoriais kūrimas RAG programai

Galingas būdas padidinti atsakymų į klausimus sistemų tikslumą ir tinkamumą - patobulinto paieškos modelio (RAG) diegimas, tikslinant savo semantinės paieškos modelį.

Šis metodas sujungia semantinės paieškos ir generatyvinio dirbtinio intelekto privalumus, todėl sistema geriau supranta naudotojų klausimus ir generuoja tikslesnius ir kontekstui tinkamus atsakymus. Tiksliai pritaikydami semantinės paieškos modelį naudojant sakinių transformatorius, kūrėjai gali pritaikyti modelį konkrečiai sričiai ir taip pagerinti bendrą RAG vamzdyno našumą.

Semantinė paieška

Kas yra semantinė paieška?

Semantinė paieška - tai duomenų paieškos metodas, kuris neapsiriboja tradiciniais raktiniais žodžiais pagrįstais paieškos metodais. Ji naudoja natūralios kalbos apdorojimo ir mašininio mokymosi algoritmus, kad pagerintų paieškos rezultatų tikslumą, atsižvelgdama į paieškos vartotojo ketinimus ir užklausoje vartojamų terminų kontekstinę reikšmę. Šiuo metodu siekiama suprasti pagrindinę paieškos užklausos ir tinklalapių turinio prasmę, o ne tik suderinti raktinius žodžius. Tokiu būdu semantinė paieška gali pateikti tinkamesnius rezultatus, net jei juose nėra tikslių pirminėje užklausoje pavartotų žodžių.

Šiam tikslui pasiekti semantinėje paieškoje naudojami įvairūs metodai, pavyzdžiui, žodžių reikšmių išskyrimas, sąvokų išskyrimas ir užklausos išplėtimas. Taip pat naudojama vektorinė paieška ir mašininis mokymasis, siekiant grąžinti rezultatus, kurie atitinka naudotojo ketinimus ir kontekstą. Semantinė paieška plačiai naudojama žiniatinklio paieškos sistemose, pavyzdžiui, "Google", ir yra paremta tokiomis technologijomis kaip "Knowledge Graph", kurioje saugomi struktūrizuoti duomenys apie subjektus ir jų ryšius. Tai leidžia paieškos sistemoms suprasti paieškos užklausų prasmę ir pateikti tikslesnius ir prasmingesnius rezultatus.

Semantinė paieška labai naudinga įmonėms, kurios nori atsakyti į klausimus, susijusius su savo srities žiniomis, pvz., techniniais dokumentais, sutartimis, produktų aprašymais...

Kas yra "Retrieval Augmented Generation" (RAG)?

Semantinė paieška

Grąžinimo papildytas generavimas (angl. Retrieval Augmented Generation, RAG) - tai metodas, kuris padidina generatyvinių dirbtinio intelekto modelių, pavyzdžiui, didžiųjų kalbos modelių (angl. Large Language Models, LLM), tikslumą ir patikimumą, įtraukdamas išorinius duomenų šaltinius, kad būtų pateikta kontekstualiai tikslesnė ir aktualesnė informacija. Ji sujungia paieškos komponentą su generatyviuoju modeliu, leidžiančiu sistemai ieškoti ir gauti svarbios informacijos iš duomenų bazės ar žinių bazės, kad būtų papildytos jos vidinės žinios generuojant atsakymus.

Taikant šį metodą užtikrinama, kad dirbtinio intelekto modelis galėtų pateikti atsakymus, pagrįstus naujausiais ir patikimiausiais faktais, ir naudotojams suteikiama galimybė patikrinti modelio atsakymuose naudojamus informacijos šaltinius. RAG padeda pagrįsti dirbtinio intelekto modelį išoriniais žinių šaltiniais, pagerina jo rezultatų kokybę ir suteikia galimybę atnaujinti modelį be didelio perkvalifikavimo.

RAG yra puiki strategija, leidžianti sumažinti galimas generatyvinių dirbtinio intelekto modelių haliucinacijas. RAG padeda sukurti atsakymo į klausimus sistemą, kuri turi geriausias abiejų pasaulių savybes: faktų tikslumą ir žmogaus atsakymus, generuojamus natūralia kalba.

Kas yra sakinių transformatorių biblioteka?

Sakinių transformatoriai

"Sentence Transformers" biblioteka yra galinga "Python" sistema, skirta moderniausiems teksto įterpiniams. Ji sukurta remiantis transformatorių neuroniniais tinklais, tokiais kaip BERT, RoBERTa, XLM-R ir kt., ir užtikrina aukščiausią našumą atliekant įvairias užduotis, įskaitant semantinę paiešką, parafrazių gavybą, semantinio panašumo palyginimą, klasterizavimą ir kt. Ši biblioteka leidžia lengvai koreguoti sakinių įterpimo metodus, todėl galima kurti konkrečioms užduotims pritaikytus sakinių įterpimus, atitinkančius konkrečius poreikius. Sužinokite daugiau "Sentence Transformers" svetainėje

Bibliotekoje siūlomas platus iš anksto apmokytų sakinių transformavimo modelių, skirtų daugiau kaip 50 kalbų, pasirinkimas, kurį galima rasti "Hugging Face" platformoje. Naudotojai, naudodamiesi biblioteka, taip pat gali patys mokyti ar tikslinti savo modelius, todėl galima lanksčiai kurti individualius modelius unikaliems naudojimo atvejams. Neseniai Sentence Transformers komanda išleido naują pagrindinę versiją (v3), kuri gerokai patobulino šios bibliotekos galimybes, ypač jos tikslaus derinimo galimybes.

"Sentence Transformers" biblioteka yra greita, išsami ir gerai prižiūrima, todėl ją naudojame šioje pamokoje.

Sukurkite savo semantinės paieškos modelį

Sukurti savo semantinės paieškos modelį - puikus būdas gauti tikslius rezultatus ir užtikrinti labai mažą vėlavimą. Tai dar svarbiau, jei savo semantinės paieškos modelį diegiate naudodami GPU.

Pirmiausia sukurkime nedidelį duomenų rinkinį su mūsų duomenimis. Sukurkite 1 stulpelio CSV failą (pavadintą "dataset.csv"), kuriame būtų šie techniniai dokumentai apie HP spausdintuvus (realiame scenarijuje, žinoma, norėsite įtraukti daug daugiau pavyzdžių):

"HP® LaserJets have unmatched printing speed, performance and reliability that you can trust. Enjoy Low Prices and Free Shipping when you buy now online."
"Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty)."
"HP LaserJet ; Lowest cost per page on mono laser printing. · $319.99 ; Wireless options available. · $109.00 ; Essential management features. · $209.00."

Kiekvienoje eilutėje gali būti iki 512 ženklų (maždaug 400 žodžių), o siekiant kuo didesnio tikslumo rekomenduojama neviršyti 128 ženklų (maždaug 100 žodžių). Dabar, kai duomenų rinkinyje turime 3 dokumentacijas, galime koduoti duomenis naudodami savo modelį su sakinių transformatoriais. Sukurkite "Python" skriptą, kuriame būtų toliau nurodyti veiksmai (įsitikinkite, kad įdiegtos programos "PyTorch" ir "Sentence Transformers").

from sentence_transformers import SentenceTransformer
import csv
import torch

model_name = 'paraphrase-multilingual-mpnet-base-v2'
encoded_model_path = 'semantic_search_model.pt'
dataset_path = 'dataset.csv'

bi_encoder = SentenceTransformer(model_name)

passages = []
with open(dataset_path) as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:
        passages.append(row[0])
        
corpus_embeddings = bi_encoder.encode(
    passages, batch_size=32, convert_to_tensor=True, show_progress_bar=True)

torch.save(corpus_embeddings, encoded_model_path)

Šis scenarijus parsisiunčia ir naudoja paraphrase-multilingual-mpnet-base-v2 kaip bazinį modelį ir naudoja jį mūsų duomenims koduoti. Galite rinktis iš daugybės galimų iš anksto apmokytų modelių, priklausomai nuo savo reikalavimų (modelio dydžio, naudojimo atvejo, palaikomų kalbų, ...). Atsižvelgdami į savo aparatinę įrangą, norėsite pritaikyti parametrą "batch_size", kad paspartintumėte kodavimo procesą.

Sukūrę modelį galite naudoti išvadoms daryti naudodami šį "Python" scenarijų:

import csv
from sentence_transformers import SentenceTransformer, util
import torch

bi_encoder = SentenceTransformer('paraphrase-multilingual-mpnet-base-v2')
semantic_search_model = torch.load('semantic_search_model.pt')

passages = []
with open('app/custom_model/dataset.csv') as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:
        passages.append(row[0])

question_embedding = bi_encoder.encode(
    "How long is the warranty on the HP Color LaserJet Pro?", convert_to_tensor=True)
hits = util.semantic_search(
    question_embedding, semantic_search_model, top_k=3)
hits = hits[0]

result = {"search_results": [
    {"score": hit['score'], "text": passages[hit['corpus_id']]} for hit in hits]}

Pagal pirmiau pateiktą išvados scenarijų gaunami tokie rezultatai:

{
"search_results": [
    {
        "score": 0.99,
        "text": "Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty)."
    },
    {
        "score": 0.74,
        "text": "All consumer PCs and printers come with a standard one-year warranty. Care packs provide an enhanced level of support and/or an extended period of coverage for your HP hardware. All commercial PCs and printers come with either a one-year or three-year warranty."
    },
    {
        "score": 0.68,
        "text": "In-warranty plan · Available in 2-, 3-, or 4-year extension plans · Includes remote problem diagnosis support and Next Business Day Exchange Service."
    },
    ]
}

Mūsų išvados scenarijuje parametras "top_k" nustato, kiek rezultatų norime grąžinti. Rezultate pateikiame sutampantį duomenų rinkinio tekstą su patikimumo balu. Šis balas yra svarbus, nes padeda mums nuspręsti, ar norime priimti atsakymą, ar ne.

Atsakymo generavimas natūralia kalba naudojant generatyvinį dirbtinį intelektą

Kaip matote, pagrindinis semantinės paieškos apribojimas yra tas, kad modelis grąžina neapdorotą duomenų rinkinio tekstą, tiesiogiai neatsakydamas į klausimą. Taigi dabar norime tai perduoti generatyviajam dirbtinio intelekto modeliui kaip kontekstą, kad jis atsakytų į pradinį klausimą natūralia kalba.

Tai galime lengvai pasiekti naudodami pažangias LLM, pavyzdžiui, GPT-4 "OpenAI" arba LLaMA 3 ir "ChatDolphin" "NLP Cloud". Galite nuspręsti išsaugoti geriausią semantinės paieškos modelio rezultatą ir perduoti jį kaip kontekstą LLM arba išsaugoti kelis rezultatus. Pateikiame greitojo pavyzdį, kuriame naudojamas tik geriausias rezultatas:

Context: Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty).
Based on the above context, answer the following question: How long is the warranty on the HP Color LaserJet Pro?

Ši užklausa grąžina kažką panašaus:

The warranty on the HP Color LasertJet Pro lasts at least 1 year.

Semantinės paieškos modelis su koduotais duomenimis ir įterptinių duomenų saugojimas vektorinėje duomenų bazėje

Paieškos papildomo generavimo (RAG) sistemoje semantinės paieškos modelio sukūrimas naudojant vietinius užkoduotus duomenis arba vektorinės duomenų bazės naudojimas yra dvi įdomios galimybės.

Kai koduojame savo duomenis, konvertuojame juos į tenzorius ir tada turime galimybę įkelti duomenis į GPU. Kita vertus, vektorių duomenų bazė yra specializuota duomenų bazė, skirta šiems didelio matmens vektoriams saugoti, indeksuoti ir efektyviai atlikti užklausas.

Įmonėms, norinčioms pasiekti labai mažą vėlinimą, rekomenduojama koduoti savo duomenis ir įkelti juos į GPU, kad pagerėtų skaičiavimo laikas. Tačiau tai daroma lankstumo sąskaita, nes duomenis reikia koduoti iš naujo kiekvieną kartą, kai duomenų rinkinys pasikeičia. Jei jūsų pagrindiniai duomenys keičiasi labai dažnai, jums gali būti paprasčiau išgauti įterptinius duomenis ir palaipsniui juos saugoti vektorių duomenų bazėje (pvz., PG Vector).

Išvada

Išplėstinis paieškos generavimas yra labai svarbus įmonėms, norinčioms atsakyti į klausimus apie konkrečius duomenis, pavyzdžiui, techninę dokumentaciją, sutartis ir t. t., nes tai gerokai padidina rezultatų tikslumą. Pavyzdžiui, RAG yra pagrindinė pagalbos pokalbių roboto sudedamoji dalis.

"Sentence Transformers" yra puiki biblioteka, kurią galima naudoti kuriant savo semantinės paieškos modelį pagal savo duomenis. Įdiegus į GPU ir sujungus su pažangiu generatyviniu dirbtinio intelekto modeliu, toks modelis tampa itin galingas.

Jei nenorite patys kurti ir diegti savo semantinės paieškos modelio, pagrįsto sakinių transformatoriais, galite tai padaryti vienu spustelėjimu NLP debesyje. Išbandykite semantinę paiešką "NLP Cloud" jau dabar!

Jei turite klausimų apie RAG, semantinę paiešką ir sakinių transformatorius, nedvejodami kreipkitės į mus, visada malonu patarti!

Julien
"NLP Cloud" techninis direktorius