Imate težave z umetno inteligenco ali razvojem celotnega paketa? Naši strokovnjaki so vam na voljo za pomoč: prilagojeni nasveti, tehnična integracija in še več. Obrnite se na [email protected].

Oblikovanje modela semantičnega iskanja s pretvorniki stavkov za aplikacijo RAG

Izvedba cevovoda za razširjeno generiranje iskanja (Retrieval Augmented Generation - RAG) z natančnim prilagajanjem lastnega modela semantičnega iskanja je učinkovit pristop za izboljšanje natančnosti in ustreznosti sistemov za odgovarjanje na vprašanja.

Ta tehnika združuje prednosti semantičnega iskanja in generativne umetne inteligence, kar sistemu omogoča boljše razumevanje uporabniških vprašanj ter ustvarjanje natančnejših in kontekstualno ustreznih odgovorov. Z natančnim prilagajanjem modela semantičnega iskanja z uporabo pretvornikov stavkov lahko razvijalci prilagodijo model svoji specifični domeni in tako izboljšajo splošno zmogljivost cevovoda RAG.

Semantično iskanje

Kaj je semantično iskanje?

Semantično iskanje je tehnika iskanja podatkov, ki presega tradicionalne metode iskanja na podlagi ključnih besed. Uporablja obdelavo naravnega jezika in algoritme strojnega učenja za izboljšanje natančnosti rezultatov iskanja z upoštevanjem namena iskalca in kontekstualnega pomena izrazov, uporabljenih v njegovi poizvedbi. Cilj tega pristopa je razumeti osnovni pomen iskalne poizvedbe in vsebine na spletnih straneh, ne pa zgolj ujemanje ključnih besed. S tem lahko semantično iskanje zagotovi ustreznejše rezultate, tudi če ti ne vsebujejo natančnih besed, uporabljenih v prvotni poizvedbi.

Da bi to dosegli, se pri semantičnem iskanju uporabljajo različne tehnike, kot so razločevanje besednih pomenov, ekstrakcija pojmov in razširitev poizvedbe. Uporablja tudi vektorsko iskanje in strojno učenje, da vrne rezultate, ki ustrezajo uporabnikovemu namenu in kontekstu. Semantično iskanje se pogosto uporablja v spletnih iskalnikih, kot je Google, in temelji na tehnologijah, kot je Knowledge Graph, ki hrani strukturirane podatke o entitetah in njihovih odnosih. To omogoča iskalnikom, da razumejo pomen iskalnih poizvedb ter zagotavljajo natančnejše in bolj smiselne rezultate.

Semantično iskanje je zelo koristno za podjetja, ki želijo odgovoriti na vprašanja o svojem domenskem znanju, kot so tehnična dokumentacija, pogodbe, opisi izdelkov ...

Kaj je razširjena generacija za iskanje (RAG)?

Semantično iskanje

Retrieval Augmented Generation (RAG) je tehnika, ki povečuje natančnost in zanesljivost generativnih modelov umetne inteligence, kot so veliki jezikovni modeli (LLM), z vključevanjem zunanjih virov podatkov za zagotavljanje kontekstualno natančnejših in bolj aktualnih informacij. Združuje komponento iskanja z generativnim modelom, kar sistemu omogoča iskanje in pridobivanje ustreznih informacij iz podatkovne zbirke ali baze znanja, ki dopolnjujejo njegovo notranje znanje pri generiranju odgovorov.

Ta pristop zagotavlja, da lahko model umetne inteligence zagotavlja odgovore na podlagi najnovejših in zanesljivih dejstev, uporabnikom pa omogoča, da preverijo vire informacij, uporabljenih v odgovorih modela. RAG pomaga utemeljiti model umetne inteligence na zunanjih virih znanja, kar izboljša kakovost njegovih rezultatov in zagotavlja način za posodabljanje modela, ne da bi bilo potrebno obsežno preusposabljanje.

RAG je odlična strategija za ublažitev morebitnih halucinacij generativnih modelov umetne inteligence. RAG pomaga zgraditi sistem za odgovarjanje na vprašanja, ki ima najboljše iz obeh svetov: točnost dejstev in človeške odgovore, ustvarjene v naravnem jeziku.

Kaj je knjižnica Transformatorji stavkov?

Transformatorji stavkov

Knjižnica Sentence Transformers je zmogljivo ogrodje v Pythonu, zasnovano za najsodobnejše vgrajevanje besedil. Temelji na nevronskih mrežah transformatorjev, kot so BERT, RoBERTa, XLM-R in druge, ki dosegajo vrhunsko zmogljivost pri različnih nalogah, vključno s semantičnim iskanjem, iskanjem parafraz, primerjavo semantične podobnosti, grozdenjem in drugimi. Ta knjižnica omogoča enostavno prilagajanje metod vgrajevanja stavkov, kar omogoča ustvarjanje vgrajevanja stavkov, prilagojenih posameznim nalogam, ki ustrezajo posebnim potrebam. Več informacij na spletni strani Sentence Transformers

Knjižnica ponuja širok izbor predhodno usposobljenih modelov Sentence Transformers za več kot 50 jezikov, ki so na voljo na platformi Hugging Face. Uporabniki lahko s pomočjo knjižnice trenirajo ali natančno prilagodijo tudi svoje modele, kar zagotavlja prilagodljivost za ustvarjanje modelov po meri za edinstvene primere uporabe. Ekipa Sentence Transformers je pred kratkim izdala novo glavno različico (v3), ki znatno izboljšuje zmogljivosti te knjižnice, zlasti njene zmožnosti natančnega uglaševanja.

Knjižnica Sentence Transformers je hitra, obsežna in dobro vzdrževana, zato jo uporabljamo v tem učbeniku.

Ustvarjanje lastnega modela semantičnega iskanja

Ustvarjanje lastnega modela semantičnega iskanja je odličen način za pridobivanje natančnih rezultatov ob zagotavljanju zelo nizke latence. To velja še toliko bolj, če svoj model semantičnega iskanja namestite na grafični procesor.

Najprej ustvarimo majhen nabor podatkov, ki vsebuje naše podatke. Ustvarite datoteko CSV z enim stolpcem (imenovano "dataset.csv"), ki vsebuje naslednjo tehnično dokumentacijo o HP-jevih tiskalnikih (v resničnem scenariju boste seveda želeli vključiti veliko več primerov):

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

Vsaka vrstica lahko vsebuje do 512 žetonov (kar približno ustreza 400 besedam), za čim večjo natančnost pa je priporočljivo, da ne presega 128 žetonov (kar približno ustreza 100 besedam). Zdaj, ko imamo v naši zbirki podatkov naše tri dele dokumentacije, lahko podatke kodiramo s pomočjo našega modela s pretvorniki stavkov. Ustvarite skripto v jeziku Python z naslednjo vsebino (prepričajte se, da sta nameščena PyTorch in 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)

Ta skripta prenese in uporabi paraphrase-multilingual-mpnet-base-v2 kot osnovni model in ga uporabi za kodiranje naših podatkov. Glede na svoje zahteve (velikost modela, primer uporabe, podprti jeziki ...) lahko izbirate med številnimi razpoložljivimi predhodno usposobljenimi modeli. Glede na strojno opremo boste želeli prilagoditi parameter "batch_size", da bi pospešili postopek kodiranja.

Ko je model ustvarjen, ga lahko uporabite za sklepanje z naslednjo skripto 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]}

Zgornja skripta za sklepanje dobi naslednje 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."
    },
    ]
}

V naši skripti za sklepanje je s parametrom "top_k" določeno, koliko rezultatov želimo vrniti. V rezultatu prikažemo ujemajoče se besedilo iz nabora podatkov z oceno zaupanja. Ta ocena je pomembna, saj nam pomaga pri odločitvi, ali želimo odgovor sprejeti ali ne.

Generiranje odgovora v naravnem jeziku z generativno umetno inteligenco

Kot lahko vidite, je glavna omejitev semantičnega iskanja ta, da model vrne neobdelano besedilo iz nabora podatkov, ne da bi neposredno odgovoril na vprašanje. Zato ga zdaj želimo dati generativnemu modelu umetne inteligence kot kontekst, da odgovori na začetno vprašanje v naravnem jeziku.

To lahko zlahka dosežemo z uporabo naprednega LLM, kot je GPT-4 v OpenAI ali LLaMA 3 in ChatDolphin v NLP Cloud. Lahko se odločite, da boste obdržali najboljši rezultat iz modela semantičnega iskanja in ga kot kontekst posredovali LLM ali pa obdržite več rezultatov. Tukaj je primer s pozivom, pri katerem je uporabljen samo najboljši 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?

Ta zahteva vrne nekaj takega:

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

Model semantičnega iskanja s kodiranimi podatki VS shranjevanje vgrajenih podatkov v vektorski podatkovni zbirki

V sistemu Retrieval-Augmented Generation (RAG) sta zanimivi dve možnosti: oblikovanje modela semantičnega iskanja z lokalnimi kodiranimi podatki ali uporaba vektorske podatkovne zbirke.

Pri kodiranju lastnih podatkov jih pretvorimo v tenzorje in jih nato naložimo v grafični procesor. Po drugi strani pa je vektorska podatkovna zbirka specializirana podatkovna zbirka, zasnovana za učinkovito shranjevanje, indeksiranje in poizvedovanje po teh visokodimenzionalnih vektorjih.

Podjetjem, ki želijo doseči zelo nizke zakasnitve, priporočamo, da kodirajo lastne podatke in jih naložijo v grafični procesor ter tako izboljšajo čas izračuna. Vendar je to na račun prilagodljivosti, saj je treba podatke ponovno kodirati vsakič, ko se nabor podatkov spremeni. Če se vaši osnovni podatki zelo pogosto spreminjajo, je morda za vas enostavneje, da izluščite vgradnje in jih postopoma shranite v vektorsko zbirko podatkov (kot je na primer PG Vector).

Zaključek

Razširjeno generiranje je ključnega pomena za podjetja, ki želijo odgovoriti na vprašanja o določenih podatkih, kot so tehnična dokumentacija, pogodbe itd., saj znatno poveča natančnost rezultatov. RAG je na primer ključna sestavina klepetalnega robota za podporo.

Sentence Transformers je odlična knjižnica, ki jo lahko uporabite za ustvarjanje lastnega modela semantičnega iskanja na podlagi lastnih podatkov. Če je tak model nameščen na grafičnem procesorju in povezan z naprednim generativnim modelom umetne inteligence, se izkaže za izjemno zmogljivega.

Če vas ne zanima, da bi sami ustvarili in namestili svoj model semantičnega iskanja na podlagi pretvornikov stavkov, lahko to preprosto storite z enim klikom v oblaku NLP Cloud. Preizkusite semantično iskanje v oblaku NLP Cloud!

Če imate vprašanja o sistemu RAG, semantičnem iskanju in pretvornikih stavkov, nas brez oklevanja vprašajte, saj vam vedno z veseljem svetujemo!

Julien
Tehnični direktor v podjetju NLP Cloud