Kæmper du med AI eller full-stack-udvikling? Vores eksperter er her for at vejlede dig: skræddersyet rådgivning, teknisk integration og meget mere. Kontakt os på [email protected].

RAG: Spørgsmålsbesvarelse på domæneviden med semantisk søgning og generativ AI

Besvarelse af spørgsmål baseret på domæneviden (som intern dokumentation, kontrakter, bøger osv.) er en udfordring. I denne artikel undersøger vi en avanceret teknik kaldet Retrieval-Augmented Generation (RAG) for at opnå dette med stor nøjagtighed ved at blande semantisk søgning og tekstgenerering med modeller som ChatDolphin, LLaMA, ChatGPT, GPT-4...

Besvarelse af spørgsmål

Udfordringerne ved at besvare spørgsmål om domæneviden

Besvarelse af spørgsmål ud fra domæneviden kræver, at du først sender noget kontekst til AI-modellen og derefter stiller et spørgsmål om det.

Du kan f.eks. sende følgende kontekst:

All NLP Cloud plans can be stopped anytime. You only pay for the time you used the service. In case of a downgrade, you will get a discount on your next invoice.

Nu har du måske lyst til at stille følgende spørgsmål:

When can plans be stopped?

AI'en ville svare noget i denne retning:

Anytime

For flere detaljer, se vores dokumentation om besvarelse af spørgsmål her.

Problemet med denne tilgang er, at størrelsen på din kontekst (dvs. størrelsen på din inputtekst) er begrænset. Så du kan ikke sende hele din domæneviden som en kontekst.

Lad os sige, at du vil bygge en supportchatbot, der ved alt om din produktdokumentation, så slutbrugerne kan stille ethvert produktrelateret spørgsmål til chatbotten uden at kontakte en rigtig supportagent. Din dokumentation vil højst sandsynligt bestå af flere hundrede eller tusinde ord, eller endda millioner af ord...

Lad os se på, hvordan vi kan overvinde denne begrænsning og besvare spørgsmål i meget store dokumenter.

Semantisk søgning VS generativ AI

Når det gælder besvarelse af spørgsmål, kan der bruges to slags teknologier. Tekstgenerering (generativ AI) og semantisk søgning.

Den første, tekstgenerering, er dybest set det, jeg lige har vist ovenfor. Det tager normalt en avanceret tekstgenereringsmodel som ChatDolphin, LLaMA, ChatGPT, GPT-4... Den er i stand til at forstå et menneskeligt spørgsmål og også svare som et menneske. Men den fungerer ikke på store dokumenter. Finjustering af en generativ AI-model med din domæneviden ville ikke fungere godt, da finjustering ikke er en god teknik til at tilføje viden til en model.

Semantisk søgning handler dybest set om at søge i et dokument på samme måde som Google, men baseret på din egen domæneviden.

For at opnå det skal du konvertere dine interne dokumenter til vektorer (også kendt som "embeddings"). Derefter skal du også konvertere dit spørgsmål til en vektor og derefter udføre en vektorsøgning (også kendt som "semantisk lighed") for at hente den del af din domæneviden, der er tættest på dit spørgsmål.

En første løsning er at gemme dine embeddings i en dedikeret vektordatabase som PG Vector. En anden løsning er at kode din egen semantiske søgemodel med din egen domæneviden og implementere den på en GPU (hvilket er den løsning, vi foreslår hos NLP Cloud, fordi den giver den bedste responstid). Når du så har din vektor-DB klar, eller når din model er oprettet, kan du stille spørgsmål i naturligt sprog, og din AI-model vil returnere et uddrag af din domæneviden, der bedst besvarer dit spørgsmål.

Semantisk søgning er normalt meget hurtig og relativt billig. Den er også mere pålidelig end finjusteringsstrategien til tekstgenerering, så du vil ikke stå over for noget AI-hallucinationsproblem. Men den er ikke i stand til at "besvare" et spørgsmål korrekt. Den returnerer blot et stykke tekst, der indeholder et svar på dit spørgsmål. Så er det op til brugeren at læse hele tekststykket for at finde svaret på sit spørgsmål.

For flere detaljer, se vores dokumentation om semantisk søgning. her.

Den gode nyhed er, at det er muligt at kombinere både semantisk søgning og generativ AI for at opnå avancerede resultater!

Spørgsmålsbesvarelse blander semantisk søgning og generativ AI

For at besvare spørgsmål om domæneviden er den strategi, vi foretrækker hos NLP Cloud, følgende: Lav først en anmodning med semantisk søgning for at hente de ressourcer, der bedst besvarer dit spørgsmål, og brug derefter tekstgenerering til at besvare spørgsmålet baseret på disse ressourcer som et menneske.

Lad os sige, at vi er forhandler af HP-printere, og at vi ønsker at besvare vores kunders spørgsmål på vores hjemmeside.

Først skal vi beregne indlejringer og gemme dem i en vektordatabase eller oprette vores egen semantiske søgemodel. Her vil den kun bestå af 3 eksempler, men i det virkelige liv kan du inkludere op til 1 million eksempler, når du bruger semantisk søgning på NLP Cloud. Vi opretter simpelthen en CSV-fil og lægger følgende ind:

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 printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert.
HP LaserJet ; Lowest cost per page on mono laser printing. · $319.99 ; Wireless options available. · $109.00 ; Essential management features. · $209.00.

Derefter uploader vi vores CSV-datasæt til NLP Cloud og klikker på "Create model". Efter et stykke tid vil vores egen semantiske søgemodel, der indeholder vores egen domæneviden, være klar, og vi vil modtage en privat API-URL for at kunne bruge den.

Lad os stille et spørgsmål til vores helt nye model ved hjælp af NLP Cloud Python-klienten:

import nlpcloud

# We use a fake model name and a fake API key for illustration reasons.
client = nlpcloud.Client("custom-model/5d8e6s8w5", "poigre5754gaefdsf5486gdsa56", gpu=True)
client.semantic_search("How long is the warranty on the HP Color LaserJet Pro?")

Modellen returnerer hurtigt følgende med en kort svartid:

{
"search_results": [
    {
        "score": 0.99,
        "text": "Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."
    },
    {
        "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."
    },
    ]
}

Nu henter vi det svar, der har den højeste score (vi kan også sagtens hente flere svar): "Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."

Dette svar er korrekt, men det er ikke særlig brugervenligt, da brugeren skal læse et ret langt stykke tekst for at få svaret. Så nu stiller vi det samme spørgsmål igen til vores slutpunkt for besvarelse af spørgsmål ved hjælp af ChatDolphin-modellen. Vi vil bruge svaret fra den semantiske søgning som kontekst:

import nlpcloud

client = nlpcloud.Client("chatdolphin", "poigre5754gaefdsf5486gdsa56", gpu=True)
client.question(
    """How long is the warranty on the HP Color LaserJet Pro?""",
    context="""Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."""
)

Den returnerer følgende svar:

{
    "answer": "The warranty lasts for three years."
}

Det er ret godt, ikke?

Konklusion

På trods af de seneste fremskridt med generative AI-modeller som ChatDolphin, LLaMA, ChatGPT, GPT-4 osv. gør den begrænsede forespørgselsstørrelse det umuligt at bruge disse fantastiske modeller på specifik domæneviden til spørgsmålsbesvarelse. Finjustering af disse modeller fungerer desværre ikke godt til en sådan brugssag...

En god strategi er at implementere et RAG-system. Svar først på dit spørgsmål ved at konvertere dine dokumenter til indlejringer og gemme dem i en vektordatabase, eller skab din egen semantiske søgemodel ud fra dine dokumenter, og brug derefter en almindelig spørgsmålsbesvarelsesmodel baseret på generativ AI for at returnere et menneskeligt svar på det oprindelige spørgsmål.

Hvis du vil implementere denne strategi, skal du ikke tøve med at oprette din egen semantiske søgemodel på NLP Cloud: se den relaterede dokumentation her!

Mark
Applikationsingeniør hos NLP Cloud