Worstel je met AI of full-stack ontwikkeling? Onze experts staan klaar om je te begeleiden: advies op maat, technische integratie en meer. Neem contact op met [email protected].

RAG: Vraagbeantwoording op domeinkennis met semantisch zoeken en generatieve AI

Het beantwoorden van vragen op basis van domeinkennis (zoals interne documentatie, contracten, boeken, etc.) is een uitdaging. In dit artikel verkennen we een geavanceerde techniek genaamd Retrieval-Augmented Generation (RAG) om dit met grote nauwkeurigheid te bereiken, door semantisch zoeken en tekstgeneratie te combineren met modellen zoals ChatDolphin, LLaMA, ChatGPT, GPT-4...

Vraag beantwoorden

De uitdagingen van het beantwoorden van vragen over domeinkennis

Het beantwoorden van vragen op domeinkennis vereist dat je eerst wat context naar het AI-model stuurt en er dan een vraag over stelt.

Je kunt bijvoorbeeld de volgende context verzenden:

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 zou je de volgende vraag kunnen stellen:

When can plans be stopped?

De AI zou zoiets als dit antwoorden:

Anytime

Raadpleeg voor meer informatie onze documentatie over het beantwoorden van vragen hier.

Het probleem met deze aanpak is dat de grootte van je context (d.w.z. de grootte van je invoertekst) beperkt is. Je kunt dus niet je hele domeinkennis als context meesturen.

Laten we zeggen dat je een ondersteunende chatbot wilt bouwen die alles weet over je productdocumentatie, zodat eindgebruikers elke productgerelateerde vraag aan de chatbot kunnen stellen zonder contact op te nemen met een echte ondersteuningsmedewerker. Hoogstwaarschijnlijk bestaat je documentatie uit enkele honderden of duizenden woorden, of zelfs miljoenen woorden...

Laten we eens kijken hoe we deze beperking kunnen overwinnen en vragen kunnen beantwoorden op zeer grote documenten.

Semantisch zoeken VS Generatieve AI

Voor het beantwoorden van vragen kunnen 2 soorten technologieën worden gebruikt. Tekstgeneratie (generatieve AI) en semantisch zoeken.

De eerste, tekstgeneratie, is in principe wat ik hierboven heb laten zien. Meestal wordt hiervoor een geavanceerd tekstgeneratiemodel gebruikt zoals ChatDolphin, LLaMA, ChatGPT, GPT-4... Het kan een menselijke vraag begrijpen en ook reageren als een mens. Het werkt echter niet op grote documenten. Het finetunen van een generatief AI-model met je domeinkennis zou niet goed werken omdat finetuning geen goede techniek is om kennis aan een model toe te voegen.

Semantisch zoeken is in principe op dezelfde manier zoeken in een document als Google, maar dan op basis van je eigen domeinkennis.

Om dat te bereiken, moet je je interne documenten omzetten in vectoren (ook bekend als "embeddings"). Vervolgens moet je je vraag ook omzetten in een vector en dan een vectoronderzoek uitvoeren (ook bekend als "semantische gelijkenis") om het deel van je domeinkennis op te halen dat het dichtst bij je vraag ligt.

Een eerste oplossing is om je embeddings op te slaan in een speciale vectordatabase zoals PG Vector. Een andere oplossing is om je eigen semantische zoekmodel te coderen met je eigen domeinkennis en het in te zetten op een GPU (dit is de oplossing die we bij NLP Cloud voorstellen omdat het de beste reactietijd biedt). Zodra je je vector DB klaar hebt, of zodra je model is gemaakt, kun je vragen stellen in natuurlijke taal en je AI-model zal een extract van je domeinkennis terugsturen dat het beste antwoord geeft op je vraag.

Semantisch zoeken is meestal erg snel en relatief goedkoop. Het is ook betrouwbaarder dan de fijnafstemmingsstrategie voor tekstgeneratie, dus je zult geen AI-hallucinatieproblemen krijgen. Maar het is niet in staat om een vraag goed te "beantwoorden". Er wordt gewoon een stuk tekst teruggestuurd dat een antwoord op je vraag bevat. Dan is het aan de gebruiker om het hele stuk tekst te lezen om het antwoord op zijn vraag te vinden.

Raadpleeg voor meer informatie onze documentatie over semantisch zoeken hier.

Het goede nieuws is dat het mogelijk is om zowel semantisch zoeken als generatieve AI te combineren om geavanceerde resultaten te bereiken!

Vraagbeantwoording, een mix van semantisch zoeken en generatieve AI

Om vragen over domeinkennis te beantwoorden, geven we bij NLP Cloud de voorkeur aan de volgende strategie: eerst een verzoek doen met semantisch zoeken om de bronnen op te halen die het beste antwoord geven op je vraag, en dan tekstgeneratie gebruiken om de vraag te beantwoorden op basis van deze bronnen, net als een mens.

Laten we zeggen dat we een wederverkoper van HP printers zijn en dat we de vragen van onze klanten op onze website willen beantwoorden.

Eerst moeten we embeddings berekenen en opslaan in een vectordatabase, of ons eigen semantische zoekmodel maken. Hier bestaat het uit slechts 3 voorbeelden, maar in het echte leven kun je tot 1 miljoen voorbeelden opnemen als je semantisch zoeken gebruikt op NLP Cloud. We maken gewoon een CSV-bestand en zetten het volgende erin:

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.

Vervolgens uploaden we onze CSV-dataset naar NLP Cloud en klikken we op "Model maken". Na een tijdje is ons eigen semantische zoekmodel met onze eigen domeinkennis klaar en ontvangen we een privé API URL om het te gebruiken.

Laten we een vraag stellen aan ons gloednieuwe model met behulp van de NLP Cloud Python-client:

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?")

Het model geeft snel en met een korte responstijd het volgende weer:

{
"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 halen we het antwoord op dat de hoogste score heeft (we kunnen ook perfect meerdere antwoorden ophalen): "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."

Dit antwoord is correct, maar het is niet erg gebruiksvriendelijk omdat de gebruiker een vrij lang stuk tekst moet lezen om het antwoord te krijgen. Dus nu stellen we dezelfde vraag opnieuw aan ons vraagbeantwoordingseindpunt, met behulp van het ChatDolphin-model. We gebruiken het semantische zoekantwoord als context:

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

Het geeft het volgende antwoord:

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

Best goed, nietwaar?

Conclusie

Ondanks de recente vooruitgang op het gebied van generatieve AI-modellen zoals ChatDolphin, LLaMA, ChatGPT, GPT-4, enz. maakt de beperkte vraaggrootte het onmogelijk om deze geweldige modellen te gebruiken op specifieke domeinkennis voor het beantwoorden van vragen. Het fine-tunen van deze modellen werkt helaas niet goed voor een dergelijke use case...

Een goede strategie is om een RAG-systeem te implementeren. Beantwoord eerst je vraag door je documenten te converteren naar embeddings en ze op te slaan in een vector database, of door je eigen semantische zoekmodel te maken van je documenten, en gebruik dan een regulier vraagbeantwoordingsmodel gebaseerd op generatieve AI om een menselijk antwoord te geven op de oorspronkelijke vraag.

Als je deze strategie wilt implementeren, aarzel dan niet om je eigen semantische zoekmodel te maken op NLP Cloud: zie de gerelateerde documentatie hier!

Mark
Toepassingsingenieur bij NLP Cloud