Implementácia Retrieval Augmented Generation (RAG) pipeline prostredníctvom vyladenia vlastného modelu sémantického vyhľadávania je účinným prístupom na zvýšenie presnosti a relevantnosti systémov odpovedajúcich na otázky.
Táto technika spája silné stránky sémantického vyhľadávania a generatívnej umelej inteligencie, čo umožňuje systému lepšie porozumieť otázkam používateľov a generovať presnejšie a kontextovo relevantné odpovede. Jemným doladením modelu sémantického vyhľadávania pomocou transformátorov viet môžu vývojári prispôsobiť model svojej špecifickej doméne, čím sa zlepší celkový výkon RAG pipeline.
Sémantické vyhľadávanie je technika vyhľadávania údajov, ktorá presahuje tradičné metódy vyhľadávania založené na kľúčových slovách. Využíva spracovanie prirodzeného jazyka a algoritmy strojového učenia na zlepšenie presnosti výsledkov vyhľadávania tým, že zohľadňuje zámer vyhľadávateľa a kontextový význam výrazov použitých v jeho požiadavke. Tento prístup sa zameriava na pochopenie základného významu vyhľadávacieho dotazu a obsahu webových stránok namiesto jednoduchého porovnávania kľúčových slov. Vďaka tomu môže sémantické vyhľadávanie poskytovať relevantnejšie výsledky, aj keď neobsahujú presné slová použité v pôvodnej požiadavke.
Na dosiahnutie tohto cieľa sa pri sémantickom vyhľadávaní využívajú rôzne techniky, ako napríklad dezambiguácia slovných významov, extrakcia pojmov a rozšírenie dotazu. Využíva tiež vektorové vyhľadávanie a strojové učenie na vrátenie výsledkov, ktoré sa snažia zodpovedať zámeru a kontextu používateľa. Sémantické vyhľadávanie sa široko používa vo webových vyhľadávačoch, ako je napríklad Google, a je podporované technológiami, ako je napríklad Knowledge Graph, ktorý uchováva štruktúrované údaje o entitách a ich vzťahoch. To umožňuje vyhľadávačom pochopiť význam vyhľadávacích dotazov a poskytovať presnejšie a zmysluplnejšie výsledky.
Sémantické vyhľadávanie je veľmi užitočné pre podniky, ktoré chcú odpovedať na otázky týkajúce sa ich vlastných doménových znalostí, ako je ich technická dokumentácia, zmluvy, opisy produktov...
Retrieval Augmented Generation (RAG) je technika, ktorá zvyšuje presnosť a spoľahlivosť generatívnych modelov umelej inteligencie, ako sú veľké jazykové modely (Large Language Models - LLM), začlenením externých zdrojov údajov s cieľom poskytnúť kontextovo presnejšie a aktuálnejšie informácie. Integruje vyhľadávaciu zložku s generatívnym modelom, čo umožňuje systému vyhľadávať a získavať relevantné informácie z databázy alebo znalostnej databázy na doplnenie jeho interných znalostí pri generovaní odpovedí.
Tento prístup zaručuje, že model umelej inteligencie môže poskytovať odpovede na základe najaktuálnejších a najspoľahlivejších faktov a umožňuje používateľom overiť zdroje informácií použitých v odpovediach modelu. RAG pomáha založiť model AI na externých zdrojoch znalostí, čím sa zlepšuje kvalita jeho výstupov a poskytuje spôsob aktualizácie modelu bez potreby rozsiahleho preškolenia.
RAG je skvelá stratégia na zmiernenie potenciálnych halucinácií z generatívnych modelov AI. RAG pomáha vytvoriť systém odpovedania na otázky, ktorý má to najlepšie z oboch svetov: faktickú presnosť a ľudské odpovede generované v prirodzenom jazyku.
Knižnica Sentence Transformers je výkonný rámec jazyka Python navrhnutý pre najmodernejšie vkladanie textu. Je postavený na transformátorových neurónových sieťach, ako sú BERT, RoBERTa, XLM-R a ďalšie, ktoré dosahujú špičkový výkon v rôznych úlohách vrátane sémantického vyhľadávania, dolovania parafráz, porovnávania sémantickej podobnosti, zhlukovania a ďalších. Táto knižnica umožňuje jednoduché doladenie metód vkladania viet, čím umožňuje vytvárať vkladania viet prispôsobené konkrétnym úlohám. Viac informácií nájdete na webovej stránke Sentence Transformers
Knižnica ponúka široký výber predtrénovaných modelov Sentence Transformers pre viac ako 50 jazykov, ktoré sú k dispozícii na platforme Hugging Face. Používatelia môžu pomocou knižnice trénovať alebo dolaďovať aj svoje vlastné modely, čo poskytuje flexibilitu pri vytváraní vlastných modelov pre jedinečné prípady použitia. Tím Sentence Transformers nedávno vydal novú hlavnú verziu (v3), ktorá výrazne zlepšuje možnosti tejto knižnice, najmä jej možnosti jemného ladenia.
Knižnica Sentence Transformers je rýchla, komplexná a dobre udržiavaná, preto ju používame v tomto návode.
Vytvorenie vlastného modelu sémantického vyhľadávania je skvelý spôsob, ako získať presné výsledky a zároveň zabezpečiť veľmi nízku latenciu. To platí ešte viac, ak svoj vlastný model sémantického vyhľadávania nasadíte na GPU.
Najprv vytvorme malú množinu údajov obsahujúcu naše údaje. Vytvorte súbor CSV s 1 stĺpcom (s názvom "dataset.csv"), ktorý bude obsahovať nasledujúcu technickú dokumentáciu o tlačiarňach HP (v reálnom scenári budete samozrejme chcieť uviesť oveľa viac príkladov):
"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."
Každý riadok môže obsahovať až 512 tokenov (čo približne zodpovedá 400 slovám), pričom v záujme maximalizácie presnosti sa odporúča neprekročiť 128 tokenov (čo približne zodpovedá 100 slovám). Teraz, keď máme v našom súbore údajov naše 3 časti dokumentácie, môžeme údaje zakódovať pomocou nášho modelu s transformátormi viet. Vytvorte skript v jazyku Python s nasledujúcim textom (uistite sa, že sú nainštalované programy PyTorch a 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)
Tento skript stiahne a použije paraphrase-multilingual-mpnet-base-v2 ako základný model a použije ho na kódovanie našich údajov. Môžete si vybrať z mnohých dostupných predtrénovaných modelov v závislosti od vašich požiadaviek (veľkosť modelu, prípad použitia, podporované jazyky, ...). V závislosti od vášho hardvéru budete chcieť prispôsobiť parameter "batch_size", aby ste urýchlili proces kódovania.
Po vytvorení môžete svoj model použiť na odvodzovanie pomocou nasledujúceho skriptu jazyka 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]}
Vyššie uvedený inferenčný skript vráti nasledujúce výsledky:
{
"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."
},
]
}
V našom inferenčnom skripte parameter "top_k" určuje, koľko výsledkov chceme vrátiť. Vo výsledku zobrazíme zodpovedajúci text zo súboru údajov s hodnotením dôveryhodnosti. Toto skóre je dôležité, pretože nám pomáha rozhodnúť, či chceme odpoveď prijať alebo nie.
Ako vidíte, hlavným obmedzením sémantického vyhľadávania je, že model vracia surový text zo súboru údajov bez priamej odpovede na otázku. Preto ju teraz chceme dať generatívnemu modelu umelej inteligencie ako kontext, aby odpovedal na pôvodnú otázku v prirodzenom jazyku.
Môžeme to ľahko dosiahnuť využitím pokročilého LLM, ako je GPT-4 na OpenAI alebo LLaMA 3 a ChatDolphin na NLP Cloud. Môžete sa rozhodnúť, či si ponecháte najlepší výsledok zo sémantického vyhľadávacieho modelu a odovzdáte ho ako kontext LLM, alebo si ponecháte niekoľko výsledkov. Tu je príklad výzvy, v ktorej sa použije len najlepší výsledok:
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?
Táto požiadavka vráti niečo podobné:
The warranty on the HP Color LasertJet Pro lasts at least 1 year.
V systéme Retrieval-Augmented Generation (RAG) sú zaujímavé dve možnosti: vytvorenie sémantického modelu vyhľadávania s lokálnymi kódovanými údajmi alebo použitie vektorovej databázy.
Pri kódovaní vlastných údajov konvertujeme údaje na tenzory a potom máme možnosť načítať údaje na GPU. Na druhej strane vektorová databáza je špecializovaná databáza určená na efektívne ukladanie, indexovanie a vyhľadávanie týchto vysokodimenzionálnych vektorov.
Podnikom, ktoré chcú dosiahnuť veľmi nízke latencie, sa odporúča zakódovať vlastné údaje a načítať ich do GPU, aby sa zlepšil čas výpočtu. Je to však na úkor flexibility, pretože vaše údaje sa musia pri každej zmene súboru údajov znovu kódovať. Ak sa vaše podkladové údaje menia veľmi často, môže byť pre vás jednoduchšie extrahovať embeddings a inkrementálne ich ukladať do vektorovej databázy (ako napríklad PG Vector).
Rozšírené generovanie vyhľadávania je kľúčové pre podniky, ktoré hľadajú odpovede na otázky týkajúce sa špecifických údajov, ako je technická dokumentácia, zmluvy atď., pretože výrazne zvyšuje presnosť výsledkov. RAG je napríklad kľúčovou súčasťou chatbota pre podporu.
Sentence Transformers je skvelá knižnica, ktorú môžete použiť na vytvorenie vlastného modelu sémantického vyhľadávania na základe vlastných údajov. Pri nasadení na GPU a v spojení s pokročilým generatívnym modelom AI sa takýto model ukáže ako mimoriadne výkonný.
Ak nemáte záujem sami vytvárať a nasadzovať vlastný model sémantického vyhľadávania založený na transformátoroch viet, môžete to jednoducho urobiť jedným kliknutím v službe NLP Cloud. Vyskúšajte sémantické vyhľadávanie v službe NLP Cloud teraz!
Ak máte otázky týkajúce sa RAG, sémantického vyhľadávania a Sentence Transformers, neváhajte sa nás opýtať, vždy vám radi poradíme!
Julien
Technický riaditeľ spoločnosti NLP Cloud