Vaikeuksia tekoälyn tai full-stack-kehityksen kanssa? Asiantuntijamme opastavat sinua: räätälöityjä neuvoja, teknistä integrointia ja paljon muuta. Ota yhteyttä osoitteessa [email protected].

Semanttisen hakumallin luominen lauseenmuuntimilla RAG-sovellusta varten

RAG-putken (Retrieval Augmented Generation) toteuttaminen hienosäätämällä omaa semanttista hakumallia on tehokas tapa parantaa kysymysten vastausjärjestelmien tarkkuutta ja relevanssia.

Tässä tekniikassa yhdistyvät sekä semanttisen haun että generatiivisen tekoälyn vahvuudet, minkä ansiosta järjestelmä ymmärtää paremmin käyttäjän kysymyksiä ja tuottaa tarkempia ja asiayhteyteen sopivia vastauksia. Hienosäätämällä semanttista hakumallia lauseenmuuntimien avulla kehittäjät voivat räätälöidä mallin omalle alalleen, mikä parantaa RAG-putken yleistä suorituskykyä.

Semanttinen haku

Mikä on semanttinen haku?

Semanttinen haku on tiedonhakutekniikka, joka ylittää perinteiset avainsanapohjaiset hakumenetelmät. Siinä käytetään luonnollisen kielen käsittelyä ja koneoppimisalgoritmeja hakutulosten tarkkuuden parantamiseksi ottamalla huomioon hakijan aikomus ja hänen kyselyssään käyttämiensä termien kontekstuaalinen merkitys. Tällä lähestymistavalla pyritään ymmärtämään hakukyselyn ja verkkosivujen sisällön perimmäinen merkitys sen sijaan, että hakusanoja vain täsmennettäisiin. Näin semanttinen haku voi tuottaa relevantimpia tuloksia, vaikka ne eivät sisältäisikään täsmälleen alkuperäisessä kyselyssä käytettyjä sanoja.

Tämän saavuttamiseksi semanttisessa haussa käytetään erilaisia tekniikoita, kuten sanamerkityksen erottelua, käsitteiden louhintaa ja kyselyn laajentamista. Se hyödyntää myös vektorihakua ja koneoppimista palauttaakseen tuloksia, jotka pyrkivät vastaamaan käyttäjän tarkoitusta ja asiayhteyttä. Semanttista hakua käytetään laajalti web-hakukoneissa, kuten Google, ja se perustuu Knowledge Graphin kaltaisiin tekniikoihin, jotka tallentavat rakenteista tietoa olioista ja niiden välisistä suhteista. Tämän ansiosta hakukoneet ymmärtävät hakukyselyjen taustalla olevan merkityksen ja tarjoavat tarkempia ja merkityksellisempiä tuloksia.

Semanttinen haku on erittäin hyödyllinen yrityksille, jotka haluavat vastata kysymyksiin, jotka koskevat heidän omaa toimialueensa tietämystä, kuten teknistä dokumentaatiota, sopimuksia, tuotekuvauksia...

Mikä on Retrieval Augmented Generation (RAG)?

Semanttinen haku

Retrieval Augmented Generation (RAG) on tekniikka, jolla parannetaan generatiivisten tekoälymallien, kuten suurten kielimallien (LLM), tarkkuutta ja luotettavuutta sisällyttämällä ulkoisia tietolähteitä, jotta saadaan kontekstuaalisesti tarkempaa ja ajantasaisempaa tietoa. Se yhdistää hakukomponentin ja generatiivisen mallin, jolloin järjestelmä voi etsiä ja hakea asiaankuuluvaa tietoa tietokannasta tai tietopohjasta täydentääkseen sisäistä tietämystään vastauksia luodessaan.

Tällä lähestymistavalla varmistetaan, että tekoälymalli voi antaa vastauksia, jotka perustuvat tuoreimpiin ja luotettavimpiin faktoihin, ja käyttäjät voivat tarkistaa mallin vastauksissa käytettyjen tietojen lähteet. RAG auttaa perustamaan tekoälymallin ulkoisiin tietolähteisiin, mikä parantaa sen tuotosten laatua ja tarjoaa keinon päivittää mallia ilman laajaa uudelleenkoulutusta.

RAG on erinomainen strategia, jolla voidaan lieventää generatiivisten tekoälymallien aiheuttamia mahdollisia hallusinaatioita. RAG auttaa rakentamaan kysymysten vastausjärjestelmän, jossa on molempien maailmojen parhaat puolet: faktatarkkuus ja luonnollisella kielellä tuotetut inhimilliset vastaukset.

Mikä on lauseen Transformers-kirjasto?

Lauseen muuntajat

Sentence Transformers -kirjasto on tehokas Python-kehys, joka on suunniteltu huipputason tekstin sulauttamiseen. Se on rakennettu BERTin, RoBERTan, XLM-R:n ja muiden kaltaisten neuroverkkomuuntajien varaan, ja sillä saavutetaan huippusuorituskykyä erilaisissa tehtävissä, kuten semanttisessa haussa, parafraasien louhinnassa, semanttisen samankaltaisuuden vertailussa, klusteroinnissa ja muissa tehtävissä. Tämä kirjasto mahdollistaa lauseiden upotusmenetelmien helpon hienosäädön, jolloin voidaan luoda tehtäväkohtaisia lauseiden upotuksia, jotka on räätälöity vastaamaan erityistarpeita. Lisätietoja Sentence Transformersin verkkosivustolla

Kirjasto tarjoaa laajan valikoiman valmiiksi koulutettuja Sentence Transformers -malleja yli 50 kielelle, jotka ovat saatavilla Hugging Face -alustalla. Käyttäjät voivat myös kouluttaa tai hienosäätää omia mallejaan kirjaston avulla, mikä tarjoaa joustavuutta luoda mukautettuja malleja yksilöllisiin käyttötapauksiin. Sentence Transformers -tiimi julkaisi hiljattain uuden pääversion (v3), joka parantaa huomattavasti kirjaston ominaisuuksia, erityisesti sen hienosäätöominaisuuksia.

Sentence Transformers -kirjasto on nopea, kattava ja hyvin ylläpidetty, ja siksi käytämme sitä tässä oppaassa.

Oman semanttisen hakumallin luominen

Oman semanttisen hakumallin luominen on erinomainen tapa saada tarkkoja tuloksia ja varmistaa samalla erittäin alhainen viive. Tämä pätee vielä paremmin, jos otat oman semanttisen hakumallin käyttöön GPU:lla.

Luodaan ensin pieni tietokokonaisuus, joka sisältää tietomme. Luodaan 1-sarakkeinen CSV-tiedosto (nimeltään "dataset.csv"), joka sisältää seuraavat HP:n tulostimia koskevat tekniset asiakirjat (tosielämän skenaariossa haluat tietysti sisällyttää mukaan paljon enemmän esimerkkejä):

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

Kukin rivi voi sisältää enintään 512 merkkiä (vastaa noin 400 sanaa), ja tarkkuuden maksimoimiseksi on suositeltavaa pysyä alle 128 merkissä (vastaa noin 100 sanaa). Nyt kun meillä on kolme dokumenttia tietokannassamme, voimme koodata tiedot käyttämällä malliamme Sentence Transformersin avulla. Luo Python-skripti seuraavasti (varmista, että PyTorch ja Sentence Transformers on asennettu).

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)

Tämä skripti lataa ja käyttää paraphrase-multilingual-mpnet-base-v2:ta perusmallina ja käyttää sitä tietojen koodaamiseen. Voit valita monista saatavilla olevista esivalmistetuista malleista riippuen vaatimuksistasi (mallin koko, käyttötarkoitus, tuetut kielet, ...). Laitteistostasi riippuen sinun kannattaa mukauttaa parametria "batch_size" koodausprosessin nopeuttamiseksi.

Kun malli on luotu, voit käyttää sitä päättelyyn seuraavan Python-skriptin avulla:

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

Yllä oleva päättelyskripti tuottaa seuraavat tulokset:

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

Päättelyskriptissämme parametri "top_k" määrittää, kuinka monta tulosta haluamme palauttaa. Tuloksessa näytämme tietokokonaisuudesta löytyvän vastaavan tekstin ja luottamuspisteet. Tämä pistemäärä on tärkeä, koska se auttaa meitä päättämään, haluammeko hyväksyä vastauksen vai emme.

Vastauksen luominen luonnollisella kielellä generatiivisen tekoälyn avulla

Kuten huomaat, semanttisen haun tärkein rajoitus on se, että malli palauttaa raakatekstin tietokokonaisuudesta vastaamatta suoraan kysymykseen. Haluamme siis nyt antaa tämän generatiiviselle tekoälymallille kontekstina, jotta se voi vastata alkuperäiseen kysymykseen luonnollisella kielellä.

Tämä onnistuu helposti käyttämällä kehittynyttä LLM:ää, kuten GPT-4:ää OpenAI:ssa tai LLaMA 3:a ja ChatDolphinia NLP Cloudissa. Voit joko päättää pitää parhaan tuloksen semanttisesta hakumallista ja välittää sen kontekstina LLM:lle tai pitää useita tuloksia. Tässä on kehote-esimerkki, jossa käytetään vain parasta tulosta:

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ämä pyyntö palauttaa jotain tällaista:

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

Semanttinen hakumalli koodatun datan kanssa VS sulautusten tallentaminen vektoritietokantaan

RAG-järjestelmässä (Retrieval-Augmented Generation) semanttisen hakumallin luominen paikallisesti koodattujen tietojen avulla tai vektoritietokannan käyttö ovat kaksi mielenkiintoista vaihtoehtoa.

Kun koodaamme omia tietojamme, muunnamme tiedot tensoreiksi ja voimme sitten ladata tiedot GPU:lle. Toisaalta vektoritietokanta on erikoistunut tietokanta, joka on suunniteltu tallentamaan, indeksoimaan ja kyselemään näitä korkea-ulotteisia vektoreita tehokkaasti.

Yrityksille, jotka haluavat saavuttaa erittäin alhaiset latenssit, suositellaan omien tietojen koodaamista ja tietojen lataamista GPU:lle laskenta-aikojen parantamiseksi. Tämä tapahtuu kuitenkin joustavuuden kustannuksella, sillä tiedot on koodattava uudelleen aina, kun tietokokonaisuus muuttuu. Jos taustalla oleva datasi muuttuu hyvin usein, voi olla yksinkertaisempaa purkaa sulautukset ja tallentaa ne vaiheittain vektoritietokantaan (kuten esimerkiksi PG Vector).

Päätelmä

Haun täydennetty sukupolvi on ratkaisevan tärkeä yrityksille, jotka etsivät vastauksia kysymyksiin, jotka koskevat tiettyjä tietoja, kuten teknistä dokumentaatiota, sopimuksia jne., sillä se lisää huomattavasti tulosten tarkkuutta. RAG on keskeinen osa esimerkiksi tukikeskustelubottia.

Sentence Transformers on loistava kirjasto, jonka avulla voit luoda oman semanttisen hakumallin omien tietojesi pohjalta. Kun tällainen malli otetaan käyttöön GPU:lla ja yhdistetään kehittyneeseen generatiiviseen tekoälymalliin, se osoittautuu erittäin tehokkaaksi.

Jos et ole kiinnostunut luomaan ja ottamaan käyttöön omaa semanttista hakumallia, joka perustuu lauseenmuuntimiin, voit tehdä sen helposti yhdellä napsautuksella NLP Cloudissa. Kokeile semanttista hakua NLP Cloudissa nyt!

Jos sinulla on kysyttävää RAG:stä, semanttisesta hausta ja Sentence Transformersista, älä epäröi kysyä meiltä, on aina ilo neuvoa!

Julien
teknologiajohtaja, NLP Cloud