RAG: Risposta alle domande sulla conoscenza del dominio con ricerca semantica e intelligenza artificiale generativa

Rispondere a domande basate sulla conoscenza del dominio (come documentazione interna, contratti, libri, ecc.) è impegnativo. In questo articolo esploriamo una tecnica avanzata chiamata Retrieval-Augmented Generation (RAG) per raggiungere questo obiettivo con grande precisione, mescolando la ricerca semantica e la generazione di testo con modelli come ChatDolphin, LLaMA, ChatGPT, GPT-4...

Risposta alle domande

Le sfide per rispondere alle domande sulla conoscenza del dominio

La risposta alle domande sulla conoscenza del dominio richiede che l'utente invii prima un contesto al modello di intelligenza artificiale e poi ponga una domanda su di esso.

Ad esempio, si può inviare il seguente contesto:

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.

A questo punto è opportuno porsi la seguente domanda:

When can plans be stopped?

L'intelligenza artificiale risponderebbe in questo modo:

Anytime

Per maggiori dettagli, consultare la documentazione sulla risposta alle domande qui.

Il problema di questo approccio è che la dimensione del contesto (cioè la dimensione del testo inserito) è limitata. Non è quindi possibile inviare l'intera conoscenza del dominio come contesto.

Supponiamo che vogliate costruire un chatbot di supporto che conosca tutto ciò che riguarda la documentazione del vostro prodotto, in modo che gli utenti finali possano porre qualsiasi domanda relativa al prodotto al chatbot senza contattare un vero agente di supporto. Molto probabilmente, la vostra documentazione sarà composta da diverse centinaia o migliaia di parole, o addirittura milioni di parole...

Vediamo come superare questa limitazione ed eseguire la risposta a domande su documenti molto grandi.

Ricerca semantica VS IA generativa

Quando si tratta di rispondere alle domande, si possono utilizzare due tipi di tecnologie. La generazione di testo (IA generativa) e la ricerca semantica.

Il primo, la generazione del testo, è fondamentalmente quello che ho mostrato sopra. Di solito si utilizza un modello avanzato di generazione del testo come ChatDolphin, LLaMA, ChatGPT, GPT-4... È in grado di comprendere una domanda umana e di rispondere come un essere umano. Tuttavia, non funziona su documenti di grandi dimensioni. La messa a punto di un modello di intelligenza artificiale generativa con le proprie conoscenze di dominio non funzionerebbe bene, poiché la messa a punto non è una buona tecnica per aggiungere conoscenza a un modello.

La ricerca semantica consiste fondamentalmente nel cercare un documento nello stesso modo di Google, ma basandosi sulla propria conoscenza del dominio.

Per ottenere questo risultato, è necessario convertire i documenti interni in vettori (noti anche come "embeddings"). Poi dovreste convertire anche la vostra domanda in un vettore ed eseguire una ricerca vettoriale (nota anche come "similarità semantica") per recuperare la parte della vostra conoscenza del dominio che è più vicina alla vostra domanda.

Una prima soluzione consiste nell'archiviare le incorporazioni in un database vettoriale dedicato, come PG Vector. Un'altra soluzione è quella di codificare il proprio modello di ricerca semantica con la propria conoscenza del dominio e di implementarlo su una GPU (che è la soluzione proposta da NLP Cloud perché offre i migliori tempi di risposta). Una volta pronto il DB vettoriale, o una volta creato il modello, è possibile porre domande in linguaggio naturale e il modello AI restituirà un estratto della conoscenza del dominio che risponde al meglio alla domanda.

La ricerca semantica è solitamente molto veloce e relativamente economica. Inoltre, è più affidabile della strategia di generazione del testo, per cui non si verifica alcun problema di allucinazione dell'intelligenza artificiale. Ma non è in grado di "rispondere" correttamente a una domanda. Restituisce semplicemente un pezzo di testo che contiene una risposta alla domanda. Spetta poi all'utente leggere l'intero testo per trovare la risposta alla sua domanda.

Per maggiori dettagli, consultare la documentazione sulla ricerca semantica. qui.

La buona notizia è che è possibile combinare sia la ricerca semantica che l'IA generativa per ottenere risultati avanzati!

Risposta alle domande che mescola ricerca semantica e IA generativa

Per rispondere a domande sulla conoscenza del dominio, la strategia che preferiamo in NLP Cloud è la seguente: prima fare una richiesta con la ricerca semantica per recuperare le risorse che meglio rispondono alla domanda, e poi usare la generazione di testo per rispondere alla domanda sulla base di queste risorse come un umano.

Supponiamo di essere un rivenditore di stampanti HP e di voler rispondere alle domande dei nostri clienti sul nostro sito web.

Per prima cosa dovremo calcolare gli embeddings e memorizzarli in un database vettoriale, oppure creare il nostro modello di ricerca semantica. In questo caso sarà composto da soli 3 esempi, ma nella vita reale è possibile includere fino a 1 milione di esempi quando si utilizza la ricerca semantica su NLP Cloud. È sufficiente creare un file CSV e inserirvi quanto segue:

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.

Carichiamo quindi il nostro set di dati CSV su NLP Cloud e facciamo clic su "Crea modello". Dopo un po', il nostro modello di ricerca semantica contenente la nostra conoscenza del dominio sarà pronto e riceveremo un URL API privato per poterlo utilizzare.

Poniamo una domanda al nostro nuovo modello utilizzando il client Python di NLP Cloud:

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

Il modello restituisce rapidamente quanto segue con un breve tempo di risposta:

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

Ora recuperiamo la risposta che ha il punteggio più alto (potremmo anche recuperare più risposte): "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."

La risposta è corretta, ma non è molto facile da usare, poiché l'utente deve leggere un testo piuttosto lungo per ottenere la risposta. Ora poniamo nuovamente la stessa domanda al nostro endpoint di risposta alle domande, utilizzando il modello ChatDolphin. Utilizzeremo la risposta della ricerca semantica come contesto:

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

La risposta è la seguente:

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

Non è male, vero?

Conclusione

Nonostante i recenti progressi compiuti dai modelli di IA generativa come ChatDolphin, LLaMA, ChatGPT, GPT-4, ecc. la dimensione limitata delle richieste rende impossibile utilizzare questi grandi modelli sulla conoscenza di un dominio specifico per rispondere alle domande. La messa a punto di questi modelli non funziona bene per questo caso d'uso, purtroppo...

Una buona strategia consiste nell'implementare un sistema RAG. Prima si risponde alla domanda convertendo i documenti in embeddings e memorizzandoli in un database vettoriale, oppure creando un proprio modello di ricerca semantica a partire dai documenti, quindi si utilizza un modello di risposta alle domande regolare basato sull'IA generativa per restituire una risposta umana alla domanda iniziale.

Se volete implementare questa strategia, non esitate a creare il vostro modello di ricerca semantica su NLP Cloud: vedere la relativa documentazione qui!

Mark
Ingegnere applicativo presso NLP Cloud