Implementarea unui sistem de generație sporită de regăsire (RAG) prin reglarea fină a propriului model de căutare semantică este o abordare puternică pentru a îmbunătăți acuratețea și relevanța sistemelor de răspuns la întrebări.
Această tehnică combină punctele forte atât ale căutării semantice, cât și ale inteligenței artificiale generative, permițând sistemului să înțeleagă mai bine întrebările utilizatorilor și să genereze răspunsuri mai precise și mai relevante din punct de vedere contextual. Prin reglarea fină a unui model de căutare semantică cu ajutorul transformatoarelor de sentințe, dezvoltatorii pot adapta modelul la domeniul lor specific, îmbunătățind performanța generală a conductei RAG.
Căutarea semantică este o tehnică de căutare a datelor care depășește metodele tradiționale de căutare bazate pe cuvinte cheie. Aceasta utilizează algoritmi de procesare a limbajului natural și de învățare automată pentru a îmbunătăți acuratețea rezultatelor căutării prin luarea în considerare a intenției celui care caută și a semnificației contextuale a termenilor utilizați în interogare. Această abordare urmărește să înțeleagă semnificația subiacentă a interogării de căutare și a conținutului paginilor web, mai degrabă decât simpla potrivire a cuvintelor cheie. Astfel, căutarea semantică poate oferi rezultate mai relevante, chiar dacă acestea nu conțin exact cuvintele folosite în interogarea inițială.
Pentru a realiza acest lucru, căutarea semantică utilizează diverse tehnici, cum ar fi dezambiguizarea sensului cuvintelor, extragerea conceptelor și extinderea interogării. De asemenea, utilizează căutarea vectorială și învățarea automată pentru a returna rezultate care urmăresc să corespundă intenției și contextului utilizatorului. Căutarea semantică este utilizată pe scară largă în motoarele de căutare web, cum ar fi Google, și este alimentată de tehnologii precum Knowledge Graph, care stochează date structurate despre entități și relațiile dintre acestea. Acest lucru permite motoarelor de căutare să înțeleagă semnificația din spatele interogărilor de căutare și să ofere rezultate mai precise și mai semnificative.
Căutarea semantică este foarte utilă pentru întreprinderile care doresc să răspundă la întrebări legate de cunoștințele din domeniul lor, cum ar fi documentația tehnică, contractele, descrierile de produse...
Retrieval Augmented Generation (RAG) este o tehnică care îmbunătățește acuratețea și fiabilitatea modelelor generative de inteligență artificială, cum ar fi modelele de limbaj de mari dimensiuni (LLM), prin încorporarea unor surse de date externe pentru a furniza informații mai precise și mai actuale din punct de vedere contextual. Aceasta integrează o componentă de regăsire cu un model generativ, permițând sistemului să caute și să extragă informații relevante dintr-o bază de date sau dintr-o bază de cunoștințe pentru a completa cunoștințele sale interne atunci când generează răspunsuri.
Această abordare garantează că modelul de inteligență artificială poate oferi răspunsuri bazate pe cele mai actuale și fiabile date și permite utilizatorilor să verifice sursele de informații utilizate în răspunsurile modelului. RAG ajută la fundamentarea modelului de inteligență artificială pe surse externe de cunoștințe, îmbunătățind calitatea rezultatelor sale și oferind o modalitate de actualizare a modelului fără a fi nevoie de o recalificare extinsă.
RAG este o strategie excelentă pentru a atenua potențialele halucinații ale modelelor generative de inteligență artificială. RAG ajută la construirea unui sistem de răspuns la întrebări care să aibă ce e mai bun din ambele lumi: acuratețe factuală și răspunsuri umane generate în limbaj natural.
Biblioteca Sentence Transformers este un cadru Python puternic conceput pentru încorporări de text de ultimă generație. Aceasta este construită pe rețele neuronale de transformare precum BERT, RoBERTa, XLM-R și altele, obținând performanțe de top în diverse sarcini, inclusiv căutarea semantică, extragerea de parafraze, compararea similarității semantice, gruparea și altele. Această bibliotecă permite ajustarea cu ușurință a metodelor de încorporare a frazelor, permițând crearea de încorporări de fraze specifice sarcinilor, adaptate pentru a răspunde unor nevoi specifice. Aflați mai multe pe site-ul Sentence Transformers
Biblioteca oferă o selecție largă de modele de transformatoare de propoziții preinstruite pentru peste 50 de limbi, disponibile pe platforma Hugging Face. Utilizatorii pot, de asemenea, să își antreneze sau să își ajusteze propriile modele folosind biblioteca, oferind flexibilitatea de a crea modele personalizate pentru cazuri de utilizare unice. Echipa Sentence Transformers a lansat recent o nouă versiune majoră (v3) care îmbunătățește considerabil capacitățile acestei biblioteci, în special capacitățile de ajustare fină.
Biblioteca Sentence Transformers este rapidă, cuprinzătoare și bine întreținută, motiv pentru care o vom folosi în acest tutorial.
Crearea propriului model de căutare semantică este o modalitate excelentă de a obține rezultate precise, asigurând în același timp o latență foarte scăzută. Acest lucru este cu atât mai adevărat dacă vă implementați propriul model de căutare semantică pe un GPU.
Mai întâi, să creăm un mic set de date care să conțină datele noastre. Creați un fișier CSV cu o coloană (numit "dataset.csv") care conține următoarea documentație tehnică despre imprimantele HP (într-un scenariu real, veți dori să includeți mult mai multe exemple, desigur):
"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."
Fiecare rând poate conține până la 512 simboluri (aproximativ echivalentul a 400 de cuvinte), iar pentru a maximiza acuratețea, se recomandă să se mențină sub 128 de simboluri (aproximativ echivalentul a 100 de cuvinte). Acum că avem cele 3 documente în setul nostru de date, putem codifica datele folosind modelul nostru cu ajutorul Sentence Transformers. Creați un script Python cu următoarele (asigurați-vă că PyTorch și Sentence Transformers sunt instalate).
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)
Acest script descarcă și utilizează paraphrase-multilingual-mpnet-base-v2 ca model de bază și îl folosește pentru a codifica datele noastre. Puteți alege dintre numeroasele modele preinstruite disponibile, în funcție de cerințele dumneavoastră (dimensiunea modelului, cazul de utilizare, limbile acceptate, ...). În funcție de hardware-ul dumneavoastră, veți dori să adaptați parametrul "batch_size" pentru a accelera procesul de codificare.
Odată creat, puteți utiliza modelul dvs. pentru inferență cu următorul script Python:
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]}
Scriptul de inferență de mai sus returnează următoarele rezultate:
{
"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."
},
]
}
În scriptul nostru de inferență, parametrul "top_k" determină câte rezultate dorim să returnăm. În rezultat, afișăm textul corespunzător din setul de date cu un scor de încredere. Acest scor este important, deoarece ne ajută să decidem dacă dorim să acceptăm sau nu răspunsul.
După cum ați putut observa, principala limitare a căutării semantice este că modelul returnează textul brut din setul de date fără a răspunde direct la întrebare. Așadar, acum dorim să oferim acest lucru unui model generativ de inteligență artificială ca un context pentru a răspunde la întrebarea inițială în limbaj natural.
Putem realiza cu ușurință acest lucru prin utilizarea unui LLM avansat, cum ar fi GPT-4 pe OpenAI sau LLaMA 3 și ChatDolphin pe NLP Cloud. Puteți decide fie să păstrați cel mai bun rezultat din modelul de căutare semantică și să îl transmiteți ca context către LLM, fie să păstrați mai multe rezultate. Iată un exemplu de prompter care utilizează doar cel mai bun rezultat:
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?
Această cerere returnează ceva de genul acesta:
The warranty on the HP Color LasertJet Pro lasts at least 1 year.
Într-un sistem RAG (Retrieval-Augmented Generation), crearea unui model de căutare semantică cu date locale codificate sau utilizarea unei baze de date vectoriale sunt două opțiuni interesante.
Atunci când ne codificăm propriile date, le convertim în tensori și apoi avem posibilitatea de a le încărca pe un GPU. Pe de altă parte, o bază de date vectoriale este o bază de date specializată, concepută pentru a stoca, indexa și interoga eficient acești vectori cu dimensiuni mari.
Pentru întreprinderile care doresc să obțină latențe foarte mici, se recomandă să codifice propriile date și să le încarce într-un GPU pentru a îmbunătăți timpul de calcul. Cu toate acestea, acest lucru se face în detrimentul flexibilității, deoarece datele dvs. trebuie să fie codificate din nou de fiecare dată când setul de date se modifică. Dacă datele de bază se modifică foarte frecvent, ar putea fi mai simplu pentru dvs. să extrageți incluziunile și să le stocați în mod incremental într-o bază de date vectoriale (cum ar fi PG Vector, de exemplu).
Generația augmentată de recuperare este crucială pentru întreprinderile care doresc să răspundă la întrebări legate de date specifice, cum ar fi documentația tehnică, contractele etc., deoarece crește considerabil acuratețea rezultatelor. RAG este o componentă cheie a unui chatbot de asistență, de exemplu.
Sentence Transformers este o bibliotecă grozavă care poate fi utilizată pentru a crea propriul model de căutare semantică bazat pe propriile date. Atunci când este implementat pe un GPU și cuplat cu un model avansat de inteligență artificială generativă, un astfel de model se dovedește extrem de puternic.
Dacă nu sunteți interesat să vă creați și să vă implementați singur propriul model de căutare semantică bazat pe transformatoare de propoziții, o puteți face cu ușurință cu un singur clic pe NLP Cloud. Încearcă acum căutarea semantică pe NLP Cloud!
Dacă aveți întrebări despre RAG, căutare semantică și Transformatoare de propoziții, nu ezitați să ne întrebați, este întotdeauna o plăcere să vă sfătuim!
Julien
CTO la NLP Cloud