Está a ter dificuldades com a IA ou com o desenvolvimento full-stack? Os nossos especialistas estão aqui para o orientar: aconselhamento personalizado, integração técnica e muito mais. Entre em contacto com [email protected].

RAG: Resposta a perguntas sobre conhecimento de domínio com pesquisa semântica e IA generativa

Responder a perguntas baseadas no conhecimento do domínio (como documentação interna, contratos, livros, etc.) é um desafio. Neste artigo exploramos uma técnica avançada chamada Retrieval-Augmented Generation (RAG) para o conseguir com grande precisão, misturando pesquisa semântica e geração de texto com modelos como ChatDolphin, LLaMA, ChatGPT, GPT-4...

Resposta a perguntas

Os desafios de responder a perguntas sobre o conhecimento do domínio

A resposta a perguntas com base no conhecimento do domínio exige que primeiro se envie algum contexto para o modelo de IA e, em seguida, se faça uma pergunta sobre esse contexto.

Por exemplo, pode enviar o seguinte contexto:

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.

Agora, talvez queiras fazer a seguinte pergunta:

When can plans be stopped?

A IA responderia mais ou menos assim:

Anytime

Para obter mais detalhes, consulte a nossa documentação sobre resposta a perguntas aqui.

O problema com esta abordagem é que o tamanho do contexto (ou seja, o tamanho do texto de entrada) é limitado. Assim, não é possível enviar todo o conhecimento do domínio como contexto.

Digamos que quer construir um chatbot de suporte que saiba tudo sobre a documentação do seu produto, para que os utilizadores finais possam fazer qualquer pergunta relacionada com o produto ao chatbot sem contactar um agente de suporte real. Muito provavelmente, a sua documentação será composta por várias centenas ou milhares de palavras, ou mesmo milhões de palavras...

Vamos explorar a forma de ultrapassar esta limitação e responder a perguntas em documentos muito grandes.

Pesquisa semântica VS IA generativa

No que diz respeito à resposta a perguntas, podem ser utilizados dois tipos de tecnologias. Geração de texto (IA generativa) e pesquisa semântica.

A primeira, a geração de texto, é basicamente o que acabei de mostrar acima. Normalmente, utiliza um modelo avançado de geração de texto como o ChatDolphin, LLaMA, ChatGPT, GPT-4... É capaz de compreender uma pergunta humana e responder como um humano. No entanto, não funciona com documentos de grandes dimensões. O ajuste fino de um modelo de IA generativo com o seu conhecimento do domínio não funcionaria bem, uma vez que o ajuste fino não é uma boa técnica para adicionar conhecimento a um modelo.

A pesquisa semântica consiste basicamente em pesquisar um documento da mesma forma que o Google, mas com base no seu próprio conhecimento do domínio.

Para tal, é necessário converter os seus documentos internos em vectores (também conhecidos como "embeddings"). Depois, deve converter também a sua pergunta num vetor e, em seguida, efetuar uma pesquisa vetorial (também conhecida por "semelhança semântica") para recuperar a parte do seu conhecimento de domínio que está mais próxima da sua pergunta.

Uma primeira solução é armazenar os seus embeddings numa base de dados vetorial dedicada, como o PG Vetor. Outra solução é codificar o seu próprio modelo de pesquisa semântica com o seu próprio conhecimento do domínio e implementá-lo numa GPU (que é a solução que propomos na NLP Cloud porque oferece o melhor tempo de resposta). Depois, quando tiver a sua base de dados vetorial pronta, ou quando o seu modelo estiver criado, pode fazer perguntas em linguagem natural e o seu modelo de IA devolverá um extrato do seu conhecimento do domínio que melhor responde à sua pergunta.

A pesquisa semântica é normalmente muito rápida e relativamente barata. É também mais fiável do que a estratégia de afinação da geração de texto, pelo que não se deparará com qualquer problema de alucinação da IA. Mas não é capaz de "responder" corretamente a uma pergunta. Limita-se a devolver um pedaço de texto que contém uma resposta à sua pergunta. Cabe então ao utilizador ler todo o texto para encontrar a resposta à sua pergunta.

Para mais informações, consulte a nossa documentação sobre pesquisa semântica aqui.

A boa notícia é que é possível combinar a pesquisa semântica e a IA generativa para obter resultados avançados!

Resposta a perguntas: combinação de pesquisa semântica e IA generativa

Para responder a perguntas sobre conhecimento de domínio, a estratégia que preferimos na NLP Cloud é a seguinte: primeiro, fazer um pedido com pesquisa semântica para recuperar os recursos que melhor respondem à sua pergunta e, em seguida, utilizar a geração de texto para responder à pergunta com base nesses recursos, como um ser humano.

Digamos que somos um revendedor de impressoras HP e queremos responder às perguntas dos nossos clientes no nosso sítio Web.

Primeiro, temos de calcular os embeddings e armazená-los numa base de dados vetorial, ou criar o nosso próprio modelo de pesquisa semântica. Neste caso, será composto apenas por 3 exemplos, mas na vida real pode incluir até 1 milhão de exemplos ao utilizar a pesquisa semântica no NLP Cloud. Basta criar um ficheiro CSV e inserir o seguinte:

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.

Em seguida, carregamos o nosso conjunto de dados CSV para o NLP Cloud e clicamos em "Criar modelo". Passado algum tempo, o nosso próprio modelo de pesquisa semântica contendo o nosso próprio conhecimento de domínio estará pronto e receberemos um URL de API privado para o podermos utilizar.

Vamos fazer uma pergunta ao nosso novo modelo usando o cliente Python do 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?")

O modelo devolve rapidamente o seguinte com um tempo de resposta curto:

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

Agora, recuperamos a resposta que tem a pontuação mais elevada (poderíamos perfeitamente recuperar várias respostas também): "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."

Esta resposta está correcta, mas não é muito fácil de utilizar, uma vez que o utilizador tem de ler um texto bastante longo para obter a resposta. Portanto, agora fazemos novamente a mesma pergunta ao nosso ponto final de resposta a perguntas, utilizando o modelo ChatDolphin. Utilizaremos a resposta da pesquisa semântica como contexto:

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

A resposta é a seguinte:

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

É muito bom, não é?

Conclusão

Apesar dos recentes progressos registados em modelos de IA generativa como o ChatDolphin, LLaMA, ChatGPT, GPT-4, etc., o tamanho limitado dos pedidos torna impossível utilizar estes modelos fantásticos em conhecimentos de domínios específicos para responder a perguntas. Infelizmente, a afinação destes modelos não funciona bem para este caso de utilização...

Uma boa estratégia é implementar um sistema RAG. Primeiro, responda à sua pergunta convertendo os seus documentos em embeddings e armazenando-os numa base de dados vetorial ou criando o seu próprio modelo de pesquisa semântica a partir dos seus documentos e, em seguida, utilize um modelo regular de resposta a perguntas baseado em IA generativa para devolver uma resposta humana à pergunta inicial.

Se quiser implementar esta estratégia, não hesite em criar o seu próprio modelo de pesquisa semântica no NLP Cloud: ver a documentação relacionada aqui!

Mark
Engenheiro de aplicações na NLP Cloud