Máte potíže s umělou inteligencí nebo s vývojem celého balíku? Naši odborníci jsou tu pro vás: poradenství na míru, technická integrace a další. Obraťte se na [email protected].

Vytvoření sémantického vyhledávacího modelu s transformátory vět pro aplikaci RAG

Implementace Retrieval Augmented Generation (RAG) pipeline vyladěním vlastního modelu sémantického vyhledávání je účinný přístup ke zvýšení přesnosti a relevance systémů pro zodpovídání otázek.

Tato technika kombinuje silné stránky sémantického vyhledávání a generativní umělé inteligence, což systému umožňuje lépe porozumět otázkám uživatelů a generovat přesnější a kontextově relevantní odpovědi. Jemným vyladěním modelu sémantického vyhledávání pomocí transformátorů vět mohou vývojáři přizpůsobit model své konkrétní doméně, čímž se zlepší celkový výkon pipeline RAG.

Sémantické vyhledávání

Co je sémantické vyhledávání?

Sémantické vyhledávání je technika vyhledávání dat, která přesahuje tradiční metody vyhledávání založené na klíčových slovech. Využívá zpracování přirozeného jazyka a algoritmy strojového učení ke zlepšení přesnosti výsledků vyhledávání tím, že zohledňuje záměr vyhledávajícího a kontextový význam výrazů použitých v jeho dotazu. Cílem tohoto přístupu je pochopit základní význam vyhledávacího dotazu a obsahu webových stránek, nikoli pouze porovnávat klíčová slova. Díky tomu může sémantické vyhledávání poskytovat relevantnější výsledky, i když neobsahují přesná slova použitá v původním dotazu.

K dosažení tohoto cíle se při sémantickém vyhledávání používají různé techniky, jako je disambiguace slovních významů, extrakce pojmů a rozšiřování dotazů. Využívá také vektorové vyhledávání a strojové učení, aby vrátilo výsledky, které se snaží odpovídat záměru a kontextu uživatele. Sémantické vyhledávání se široce používá ve webových vyhledávačích, jako je Google, a je založeno na technologiích, jako je Knowledge Graph, který uchovává strukturovaná data o entitách a jejich vztazích. To vyhledávačům umožňuje porozumět významu vyhledávacích dotazů a poskytovat přesnější a smysluplnější výsledky.

Sémantické vyhledávání je velmi užitečné pro podniky, které chtějí odpovídat na otázky týkající se jejich vlastních znalostí, jako je technická dokumentace, smlouvy, popisy produktů...

Co je Retrieval Augmented Generation (RAG)?

Sémantické vyhledávání

Retrieval Augmented Generation (RAG) je technika, která zvyšuje přesnost a spolehlivost generativních modelů umělé inteligence, jako jsou velké jazykové modely (LLM), začleněním externích zdrojů dat, které poskytují kontextově přesnější a aktuálnější informace. Integruje vyhledávací složku s generativním modelem, což systému umožňuje vyhledávat a získávat relevantní informace z databáze nebo znalostní báze, které doplňují jeho interní znalosti při generování odpovědí.

Tento přístup zajišťuje, že model umělé inteligence může poskytovat odpovědi na základě nejaktuálnějších a nejspolehlivějších faktů, a umožňuje uživatelům ověřit zdroje informací použitých v odpovědích modelu. RAG pomáhá založit model AI na externích zdrojích znalostí, čímž zlepšuje kvalitu jeho výstupů a poskytuje způsob, jak model aktualizovat bez nutnosti rozsáhlého přeškolování.

RAG je skvělou strategií pro zmírnění potenciálních halucinací generativních modelů AI. RAG pomáhá vytvořit systém pro zodpovídání otázek, který má to nejlepší z obou světů: věcnou přesnost a lidské odpovědi generované v přirozeném jazyce.

Co je knihovna Transformátory vět?

Transformátory vět

Knihovna Sentence Transformers je výkonný framework v jazyce Python určený pro nejmodernější vkládání textu. Je postaven na transformátorových neuronových sítích, jako jsou BERT, RoBERTa, XLM-R a další, a dosahuje špičkového výkonu v různých úlohách včetně sémantického vyhledávání, dolování parafrází, porovnávání sémantické podobnosti, shlukování a dalších. Tato knihovna umožňuje snadné doladění metod vkládání vět, což umožňuje vytvářet vkládání vět přizpůsobené konkrétním úlohám. Další informace najdete na webových stránkách Sentence Transformers

Knihovna nabízí široký výběr předtrénovaných modelů Sentence Transformers pro více než 50 jazyků, které jsou k dispozici na platformě Hugging Face. Uživatelé mohou pomocí knihovny také trénovat nebo dolaďovat své vlastní modely, což poskytuje flexibilitu při vytváření vlastních modelů pro jedinečné případy použití. Tým Sentence Transformers nedávno vydal novou hlavní verzi (v3), která výrazně zlepšuje možnosti této knihovny, zejména její možnosti jemného ladění.

Knihovna Sentence Transformers je rychlá, obsáhlá a dobře udržovaná, a proto ji v tomto tutoriálu používáme.

Vytvoření vlastního modelu sémantického vyhledávání

Vytvoření vlastního modelu sémantického vyhledávání je skvělý způsob, jak získat přesné výsledky a zároveň zajistit velmi nízkou latenci. To platí ještě více, pokud vlastní model sémantického vyhledávání nasadíte na GPU.

Nejprve vytvoříme malou datovou sadu obsahující naše data. Vytvořte jednosloupcový soubor CSV (nazvaný "dataset.csv") obsahující následující technickou dokumentaci k tiskárnám HP (v reálném scénáři budete samozřejmě chtít zahrnout mnohem více příkladů):

"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ý řádek může obsahovat až 512 tokenů (což zhruba odpovídá 400 slovům) a pro dosažení maximální přesnosti se doporučuje nepřekračovat 128 tokenů (což zhruba odpovídá 100 slovům). Nyní, když máme v naší datové sadě 3 kusy dokumentace, můžeme data zakódovat pomocí našeho modelu s transformátory vět. Vytvořte skript v jazyce Python s následujícím postupem (ujistěte se, že jsou nainstalovány 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 stáhne a použije paraphrase-multilingual-mpnet-base-v2 jako základní model a použije jej k zakódování našich dat. Můžete si vybrat z mnoha dostupných předtrénovaných modelů v závislosti na svých požadavcích (velikost modelu, případ použití, podporované jazyky, ...). V závislosti na vašem hardwaru budete chtít přizpůsobit parametr "batch_size", abyste urychlili proces kódování.

Po vytvoření můžete model použít k odvozování pomocí následujícího skriptu v jazyce 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]}

Výše uvedený odvozovací skript vrátí následující 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šem inferenčním skriptu určuje parametr "top_k", kolik výsledků chceme vrátit. Ve výsledku zobrazíme odpovídající text z datového souboru se skóre důvěryhodnosti. Toto skóre je důležité, protože nám pomáhá rozhodnout, zda chceme odpověď přijmout, nebo ne.

Generování odpovědi v přirozeném jazyce pomocí generativní umělé inteligence

Jak jste mohli vidět, hlavním omezením sémantického vyhledávání je, že model vrací surový text ze souboru dat bez přímé odpovědi na otázku. Proto jej nyní chceme předat generativnímu modelu umělé inteligence jako kontext, aby odpověděl na původní otázku v přirozeném jazyce.

Toho můžeme snadno dosáhnout využitím pokročilého LLM, jako je GPT-4 v OpenAI nebo LLaMA 3 a ChatDolphin v NLP Cloud. Můžete se rozhodnout, zda si ponecháte nejlepší výsledek ze sémantického vyhledávacího modelu a předáte jej jako kontext do LLM, nebo si ponecháte několik výsledků. Zde je příklad výzvy, která používá pouze nejlepší výsledek:

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?

Tento požadavek vrátí něco takového:

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

Model sémantického vyhledávání s kódovanými daty VS ukládání vložených dat do vektorové databáze

V systému RAG (Retrieval-Augmented Generation) jsou zajímavé dvě možnosti: vytvoření sémantického modelu vyhledávání s lokálními kódovanými daty nebo použití vektorové databáze.

Při kódování vlastních dat převedeme data na tenzory a poté máme možnost data načíst na GPU. Na druhou stranu vektorová databáze je specializovaná databáze určená k efektivnímu ukládání, indexování a dotazování těchto vysokorozměrných vektorů.

Podnikům, které chtějí dosáhnout velmi nízkých latencí, se doporučuje zakódovat vlastní data a načíst je do GPU, aby se zlepšila doba výpočtu. Je to však na úkor flexibility, protože vaše data musí být znovu zakódována při každé změně datové sady. Pokud se vaše podkladová data mění velmi často, může být pro vás jednodušší extrahovat embeddingy a inkrementálně je ukládat do vektorové databáze (jako například PG Vector).

Závěr

Vyhledávání rozšířeného generování má zásadní význam pro podniky, které chtějí odpovědět na otázky týkající se konkrétních dat, jako je technická dokumentace, smlouvy atd., protože výrazně zvyšuje přesnost výsledků. RAG je například klíčovou součástí chatbota pro podporu.

Sentence Transformers je skvělá knihovna, kterou lze použít k vytvoření vlastního modelu sémantického vyhledávání na základě vlastních dat. Při nasazení na GPU a ve spojení s pokročilým generativním modelem AI se takový model ukáže jako mimořádně výkonný.

Pokud nemáte zájem sami vytvářet a nasazovat vlastní sémantický vyhledávací model založený na Sentence Transformers, můžete to snadno udělat jedním kliknutím na NLP Cloud. Vyzkoušejte si sémantické vyhledávání v NLP Cloud!

Pokud máte dotazy ohledně RAG, sémantického vyhledávání a Sentence Transformers, neváhejte se nás zeptat, vždy vám rádi poradíme!

Julien
Technický ředitel společnosti NLP Cloud