Szemantikus keresési modell létrehozása mondattranszformátorokkal egy RAG alkalmazáshoz

A saját szemantikus keresési modell finomhangolásával megvalósított RAG (Retrieval Augmented Generation) csővezeték hatékony megközelítés a kérdésmegoldó rendszerek pontosságának és relevanciájának növelésére.

Ez a technika egyesíti a szemantikus keresés és a generatív mesterséges intelligencia erősségeit, lehetővé téve a rendszer számára, hogy jobban megértse a felhasználói kérdéseket, és pontosabb és kontextusfüggőbb válaszokat generáljon. A szemantikus keresési modell finomhangolásával a Sentence Transformers segítségével a fejlesztők a modellt saját területükre szabhatják, javítva ezzel a RAG csővezeték általános teljesítményét.

Szemantikus keresés

Mi a szemantikus keresés?

A szemantikus keresés olyan adatkeresési technika, amely túlmutat a hagyományos kulcsszó alapú keresési módszereken. Természetes nyelvi feldolgozási és gépi tanulási algoritmusokat használ a keresési eredmények pontosságának javítására azáltal, hogy figyelembe veszi a kereső szándékát és a lekérdezésben használt kifejezések kontextuális jelentését. Ez a megközelítés a keresési lekérdezés és a weboldalak tartalmának mögöttes jelentését igyekszik megérteni, ahelyett, hogy egyszerűen kulcsszavakkal egyezne meg. Ezáltal a szemantikus keresés relevánsabb találatokat adhat, még akkor is, ha azok nem tartalmazzák pontosan az eredeti lekérdezésben használt szavakat.

Ennek elérése érdekében a szemantikus keresés különböző technikákat alkalmaz, például szóértelmezési diszambiguaciót, fogalomkinyerést és lekérdezésbővítést. A vektoros keresést és a gépi tanulást is felhasználja, hogy olyan eredményeket adjon vissza, amelyek a felhasználó szándékának és kontextusának megfelelnek. A szemantikus keresést széles körben használják a webes keresőmotorok, például a Google, és olyan technológiák támogatják, mint a Knowledge Graph, amely strukturált adatokat tárol az entitásokról és kapcsolataikról. Ez lehetővé teszi a keresőmotorok számára, hogy megértsék a keresési lekérdezések mögött rejlő jelentést, és pontosabb és értelmesebb eredményeket adjanak.

A szemantikus keresés nagyon hasznos a vállalkozások számára, amelyek saját domain tudásukkal kapcsolatos kérdésekre szeretnének választ kapni, például műszaki dokumentációjukra, szerződéseikre, termékleírásaikra...

Mi a Retrieval Augmented Generation (RAG)?

Szemantikus keresés

A Retrieval Augmented Generation (RAG) egy olyan technika, amely külső adatforrások bevonásával növeli a generatív AI modellek, például a Large Language Models (LLM) pontosságát és megbízhatóságát, hogy kontextuálisan pontosabb és naprakészebb információkat szolgáltasson. A keresési komponenst integrálja a generatív modellbe, lehetővé téve a rendszer számára, hogy a válaszok generálásakor a belső tudását kiegészítendő releváns információkat keressen és szerezzen be egy adatbázisból vagy tudásbázisból.

Ez a megközelítés biztosítja, hogy a mesterséges intelligenciamodell a legfrissebb, megbízható tényeken alapuló válaszokat adjon, és lehetővé teszi a felhasználók számára, hogy ellenőrizzék a modell válaszaiban felhasznált információk forrásait. A RAG segít megalapozni a mesterséges intelligenciamodellt a külső tudásforrásokra, javítva a kimenet minőségét, és lehetőséget biztosít a modell frissítésére anélkül, hogy széles körű újratanításra lenne szükség.

A RAG nagyszerű stratégia a generatív AI-modellek potenciális hallucinációinak mérséklésére. A RAG segít olyan kérdésválaszoló rendszert építeni, amely mindkét világ legjobbját nyújtja: tényszerű pontosságot és természetes nyelven generált emberi válaszokat.

Mi az a Sentence Transformers könyvtár?

Mondat transzformátorok

A Sentence Transformers könyvtár egy hatékony Python keretrendszer, amelyet a legkorszerűbb szövegbeágyazásokhoz terveztek. Olyan transzformátor neurális hálózatokra épül, mint a BERT, RoBERTa, XLM-R és mások, és kiváló teljesítményt ér el különböző feladatokban, beleértve a szemantikus keresést, a parafrázisbányászatot, a szemantikus hasonlóságok összehasonlítását, a klaszterezést és még sok más feladatot. Ez a könyvtár lehetővé teszi a mondatbeágyazási módszerek egyszerű finomhangolását, lehetővé téve az egyedi igényekre szabott, feladatspecifikus mondatbeágyazások létrehozását. Tudjon meg többet a Sentence Transformers weboldalán

A könyvtár több mint 50 nyelvhez kínál előre betanított Sentence Transformers modellek széles választékát, amelyek a Hugging Face platformon érhetők el. A felhasználók a könyvtár segítségével saját modelljeiket is betaníthatják vagy finomhangolhatják, ami rugalmasságot biztosít az egyedi felhasználási esetekhez szükséges egyéni modellek létrehozásához. A Sentence Transformers csapata nemrégiben egy új főverziót (v3) adott ki, amely jelentősen javítja a könyvtár képességeit, különösen a finomhangolási képességeit.

A Sentence Transformers könyvtár gyors, átfogó és jól karbantartott, ezért használjuk ebben a bemutatóban.

Saját szemantikus keresési modell létrehozása

A saját szemantikus keresési modell létrehozása nagyszerű módja annak, hogy pontos eredményeket kapjon, miközben nagyon alacsony késleltetést biztosít. Ez még inkább igaz, ha a saját szemantikus keresési modellt GPU-n telepíti.

Először is készítsünk egy kis adathalmazt, amely tartalmazza az adatainkat. Hozzunk létre egy 1 oszlopos CSV-fájlt (a "dataset.csv" nevű), amely a következő, HP nyomtatókra vonatkozó műszaki dokumentációt tartalmazza (egy valós forgatókönyvben természetesen sokkal több példát is be akarunk majd vonni):

"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."

Minden sor legfeljebb 512 tokent tartalmazhat (ami nagyjából 400 szónak felel meg), és a pontosság maximalizálása érdekében ajánlott 128 token (ami nagyjából 100 szónak felel meg) alatt maradni. Most, hogy megvan a 3 dokumentációnk az adathalmazunkban, kódolhatjuk az adatokat a modellünkkel a Sentence Transformers segítségével. Hozzunk létre egy Python szkriptet a következőkkel (győződjünk meg róla, hogy a PyTorch és a Sentence Transformers telepítve van).

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)

Ez a szkript letölti és használja a paraphrase-multilingual-mpnet-base-v2 alapmodellt, és azt használja az adataink kódolásához. Számos rendelkezésre álló, előre betanított modell közül választhatunk, az igényeinktől függően (modell mérete, felhasználási eset, támogatott nyelvek, ...). A hardvertől függően a "batch_size" paramétert érdemes módosítani a kódolási folyamat felgyorsítása érdekében.

Ha létrehozta a modellt, akkor a következő Python szkript segítségével használhatja a következtetéshez:

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]}

A fenti következtetési szkript a következő eredményeket adja vissza:

{
"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."
    },
    ]
}

A következtetési szkriptünkben a "top_k" paraméter határozza meg, hogy hány eredményt szeretnénk visszaadni. Az eredményben az adathalmazból az egyező szöveget mutatjuk meg a megbízhatósági pontszámmal együtt. Ez a pontszám azért fontos, mert segít eldönteni, hogy elfogadjuk-e a választ vagy sem.

Természetes nyelvi válasz generálása generatív mesterséges intelligenciával

Mint látható, a szemantikus keresés fő korlátja az, hogy a modell a nyers szöveget adja vissza az adathalmazból anélkül, hogy közvetlenül válaszolna a kérdésre. Ezért most ezt szeretnénk egy generatív AI-modellnek kontextusként átadni, hogy természetes nyelven válaszoljon az eredeti kérdésre.

Ezt könnyen elérhetjük egy fejlett LLM, például a GPT-4 az OpenAI-n vagy a LLaMA 3 és a ChatDolphin az NLP Cloudon. Dönthetünk úgy, hogy a szemantikus keresési modellből megtartjuk a legjobb eredményt, és ezt adjuk át kontextusként az LLM-nek, vagy több eredményt is megtarthatunk. Íme egy prompt példa, amely csak a legjobb eredményt használja:

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?

Ez a kérés valami ilyesmit ad vissza:

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

Szemantikus keresési modell kódolt adatokkal VS beágyazások tárolása vektoros adatbázisban

Egy RAG (Retrieval-Augmented Generation) rendszerben a szemantikus keresési modell létrehozása helyi kódolt adatokkal vagy egy vektoros adatbázis használata két érdekes lehetőség.

A saját adataink kódolásakor az adatokat tenzorokká alakítjuk, majd lehetőségünk van az adatokat egy GPU-ra betölteni. Másrészt a vektoradatbázis egy speciális adatbázis, amelyet arra terveztek, hogy ezeket a nagydimenziós vektorokat hatékonyan tárolja, indexelje és lekérdezze.

Azoknak a vállalkozásoknak, amelyek nagyon alacsony késleltetési időt szeretnének elérni, ajánlott a saját adatok kódolása és az adatok GPU-ra történő betöltése a számítási idő javítása érdekében. Ez azonban a rugalmasság rovására megy, mivel az adatokat minden alkalommal újra kell kódolni, amikor az adatállomány változik. Ha a mögöttes adatai nagyon gyakran változnak, egyszerűbb lehet a beágyazások kivonása és inkrementális tárolása egy vektoradatbázisban (például a PG Vectorban).

Következtetés

A visszakeresés kiterjesztett generálása kulcsfontosságú a vállalkozások számára, amelyek olyan konkrét adatokkal kapcsolatos kérdésekre keresnek választ, mint a műszaki dokumentáció, szerződések stb., mivel jelentősen növeli az eredmények pontosságát. A RAG például egy támogatási chatbot kulcsfontosságú összetevője.

A Sentence Transformers egy nagyszerű könyvtár, amellyel saját szemantikus keresési modellt hozhat létre saját adatai alapján. Ha egy ilyen modellt GPU-n telepítünk, és egy fejlett generatív AI-modellel párosítjuk, az rendkívül erősnek bizonyul.

Ha nem érdekli, hogy saját maga hozza létre és telepítse a saját szemantikus keresési modelljét a Sentence Transformers alapján, akkor ezt könnyen megteheti 1 kattintással az NLP Cloudon. Próbáld ki a szemantikus keresést az NLP Cloudon most!

Ha kérdése van a RAG-gal, a szemantikus kereséssel és a Sentence Transformers-szel kapcsolatban, kérjük, ne habozzon, kérdezzen minket, mindig örömmel adunk tanácsot!

Julien
CTO az NLP Cloudnál