RAG: Frågesvar på domänkunskap med semantisk sökning och generativ AI

Att besvara frågor baserat på domänkunskap (som intern dokumentation, kontrakt, böcker etc.) är en utmaning. I den här artikeln utforskar vi en avancerad teknik som kallas Retrieval-Augmented Generation (RAG) för att uppnå detta med stor noggrannhet, genom att blanda semantisk sökning och textgenerering med modeller som ChatDolphin, LLaMA, ChatGPT, GPT-4...

Svar på frågor

Utmaningarna med att besvara frågor om domänkunskap

För att kunna besvara frågor med hjälp av domänkunskap måste du först skicka en kontext till AI-modellen och sedan ställa en fråga om den.

Du kan t.ex. skicka följande kontext:

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 kanske du vill ställa följande fråga:

When can plans be stopped?

AI:n skulle svara ungefär så här:

Anytime

Mer information finns i vår dokumentation om att svara på frågor här.

Problemet med detta tillvägagångssätt är att storleken på din kontext (dvs. storleken på din inmatningstext) är begränsad. Du kan alltså inte skicka hela din domänkunskap som en kontext.

Låt oss säga att du vill bygga en supportchattbot som vet allt om din produktdokumentation, så att slutanvändarna kan ställa alla produktrelaterade frågor till chattboten utan att behöva kontakta en riktig supportagent. Troligtvis består er dokumentation av flera hundra eller tusentals ord, eller till och med miljontals ord...

Låt oss undersöka hur vi kan övervinna denna begränsning och svara på frågor i mycket stora dokument.

Semantisk sökning VS generativ AI

När det gäller att besvara frågor kan två typer av teknik användas. Textgenerering (generativ AI) och semantisk sökning.

Den första, textgenerering, är i princip vad jag just visade ovan. Den använder vanligtvis en avancerad textgenereringsmodell som ChatDolphin, LLaMA, ChatGPT, GPT-4... Den kan förstå en mänsklig fråga och svara som en människa också. Men den fungerar inte på stora dokument. Att finjustera en generativ AI-modell med din domänkunskap skulle inte fungera bra eftersom finjustering inte är en bra teknik för att lägga till kunskap till en modell.

Semantisk sökning handlar i grund och botten om att söka i ett dokument på samma sätt som Google, men baserat på din egen domänkunskap.

För att uppnå detta måste du konvertera dina interna dokument till vektorer (även kallade "inbäddningar"). Sedan bör du konvertera din fråga till en vektor också, och sedan utföra en vektorsökning (även känd som "semantisk likhet") för att hämta den del av din domänkunskap som ligger närmast din fråga.

En första lösning är att lagra dina inbäddningar i en dedikerad vektordatabas som PG Vector. En annan lösning är att koda din egen semantiska sökmodell med din egen domänkunskap och distribuera den på en GPU (vilket är den lösning vi föreslår på NLP Cloud eftersom den ger den bästa svarstiden). När du sedan har din vektor-DB redo, eller när din modell är skapad, kan du ställa frågor på naturligt språk och din AI-modell kommer att returnera ett utdrag av din domänkunskap som bäst svarar på din fråga.

Semantisk sökning är vanligtvis mycket snabb och relativt billig. Den är också mer tillförlitlig än finjusteringsstrategin för textgenerering, så du kommer inte att stöta på några problem med AI-hallucinationer. Men den kan inte "svara" ordentligt på en fråga. Den returnerar helt enkelt en text som innehåller ett svar på din fråga. Sedan är det upp till användaren att läsa hela textstycket för att hitta svaret på sin fråga.

För mer information, se vår dokumentation om semantisk sökning här.

Den goda nyheten är att det är möjligt att kombinera både semantisk sökning och generativ AI för att uppnå avancerade resultat!

Frågesvar som blandar semantisk sökning och generativ AI

För att besvara frågor om domänkunskap är den strategi vi föredrar på NLP Cloud följande: gör först en förfrågan med semantisk sökning för att hämta de resurser som bäst svarar på din fråga, och använd sedan textgenerering för att besvara frågan baserat på dessa resurser som en människa.

Låt oss säga att vi är återförsäljare av HP-skrivare och att vi vill svara på våra kunders frågor på vår webbplats.

Först måste vi beräkna inbäddningar och lagra dem i en vektordatabas, eller skapa vår egen semantiska sökmodell. Här kommer den endast att bestå av 3 exempel, men i verkliga livet kan du inkludera upp till 1 miljon exempel när du använder semantisk sökning på NLP Cloud. Vi skapar helt enkelt en CSV-fil och lägger in följande:

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.

Vi laddar sedan upp vår CSV-datauppsättning till NLP Cloud och klickar på "Skapa modell". Efter ett tag är vår egen semantiska sökmodell som innehåller vår egen domänkunskap klar och vi får en privat API-URL för att kunna använda den.

Låt oss ställa en fråga till vår helt nya modell med hjälp av 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 returnerar snabbt följande med kort svarstid:

{
"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 hämtar vi det svar som har högst poäng (vi skulle också kunna hämta flera 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."

Detta svar är korrekt, men det är inte särskilt användarvänligt eftersom användaren måste läsa en ganska lång text för att få svaret. Så nu ställer vi samma fråga igen till vår slutpunkt för frågesvar, med hjälp av ChatDolphin-modellen. Vi kommer att använda det semantiska söksvaret som ett sammanhang:

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 returnerar följande svar:

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

Ganska bra, eller hur?

Slutsats

Trots de senaste framstegen med generativa AI-modeller som ChatDolphin, LLaMA, ChatGPT, GPT-4, etc. gör den begränsade storleken på förfrågningarna det omöjligt att använda dessa fantastiska modeller på specifik domänkunskap för att besvara frågor. Finjustering av dessa modeller fungerar tyvärr inte bra för ett sådant användningsfall ...

En bra strategi är att implementera ett RAG-system. Svara först på din fråga genom att konvertera dina dokument till inbäddningar och lagra dem i en vektordatabas, eller skapa din egen semantiska sökmodell av dina dokument, och använd sedan en vanlig frågesvarsmodell baserad på generativ AI för att returnera ett mänskligt svar på den ursprungliga frågan.

Om du vill implementera denna strategi, tveka inte att skapa din egen semantiska sökmodell på NLP Cloud: se den relaterade dokumentationen här!

Mark
Applikationsingenjör på NLP Cloud