Tech

Poder dos reclassificadores e recuperação em dois estágios para geração aumentada de recuperação

Quando se trata de processamento de linguagem pure (PNL) e recuperação de informações, a capacidade de recuperar informações relevantes com eficiência e precisão é basic. À medida que o campo continua a evoluir, novas técnicas e metodologias estão sendo desenvolvidas para melhorar o desempenho dos sistemas de recuperação, particularmente no contexto da Geração Aumentada de Recuperação (RAG). Uma dessas técnicas, conhecida como recuperação em dois estágios com reclassificadores, surgiu como uma solução poderosa para resolver as limitações inerentes aos métodos de recuperação tradicionais.

Nesta postagem abrangente do weblog, nos aprofundaremos nas complexidades da recuperação e reclassificação em dois estágios, explorando seus princípios subjacentes, estratégias de implementação e os benefícios que oferecem para melhorar a precisão e a eficiência dos sistemas RAG. Também forneceremos exemplos práticos e trechos de código para ilustrar os conceitos e facilitar uma compreensão mais profunda desta técnica de ponta.

Compreendendo a geração aumentada de recuperação (RAG)

Antes de mergulhar nas especificidades da recuperação e reclassificação em dois estágios, vamos revisitar brevemente o conceito de Geração Aumentada de Recuperação (RAG). RAG é uma técnica que amplia o conhecimento e as capacidades de grandes modelos de linguagem (LLMs), fornecendo-lhes acesso a fontes externas de informação, como bancos de dados ou coleções de documentos. Consulte mais informações no artigo “A Deep Dive into Retrieval Augmented Technology in LLM“.

“RAFT: Uma abordagem de ajuste fino e RAG para respostas a perguntas específicas de domínio” “Um guia completo para ajuste fino de modelos de linguagem grande” “A ascensão da mistura de especialistas para modelos eficientes de linguagem grande” e “Um guia para dominar linguagem grande Modelos”

O processo RAG típico envolve as seguintes etapas:

  1. Consulta: um usuário faz uma pergunta ou fornece uma instrução ao sistema.
  2. Recuperação: o sistema consulta um banco de dados vetorial ou coleção de documentos para encontrar informações relevantes para a consulta do usuário.
  3. Aumento: as informações recuperadas são combinadas com a consulta ou instrução authentic do usuário.
  4. Geração: O modelo de linguagem processa a entrada aumentada e gera uma resposta, aproveitando as informações externas para aumentar a precisão e a abrangência de sua saída.

Embora o RAG tenha provado ser uma técnica poderosa, tem seus desafios. Uma das principais questões reside na fase de recuperação, onde os métodos tradicionais de recuperação podem não conseguir identificar os documentos mais relevantes, levando a respostas subótimas ou imprecisas do modelo de linguagem.

A necessidade de recuperação e reclassificação em dois estágios

Os métodos tradicionais de recuperação, como aqueles baseados em correspondência de palavras-chave ou modelos de espaço vetorial, muitas vezes têm dificuldade para capturar as relações semânticas diferenciadas entre consultas e documentos. Esta limitação pode resultar na recuperação de documentos que são apenas superficialmente relevantes ou que perdem informações cruciais que poderiam melhorar significativamente a qualidade da resposta gerada.

Para enfrentar esse desafio, pesquisadores e profissionais recorreram à recuperação em dois estágios com reclassificadores. Esta abordagem envolve um processo de duas etapas:

  1. Recuperação Inicial: No primeiro estágio, um conjunto relativamente grande de documentos potencialmente relevantes é recuperado usando um método de recuperação rápido e eficiente, como um modelo de espaço vetorial ou uma pesquisa baseada em palavras-chave.
  2. Reclassificação: Na segunda etapa, um modelo de reclassificação mais sofisticado é empregado para reordenar os documentos inicialmente recuperados com base na sua relevância para a consulta, trazendo efetivamente os documentos mais relevantes para o topo da lista.

O modelo de reclassificação, muitas vezes uma rede neural ou uma arquitetura baseada em transformador, é treinado especificamente para avaliar a relevância de um documento para uma determinada consulta. Ao aproveitar recursos avançados de compreensão de linguagem pure, o reclassificador pode capturar as nuances semânticas e as relações contextuais entre a consulta e os documentos, resultando em uma classificação mais precisa e relevante.

Benefícios da recuperação e reclassificação em dois estágios

A adoção da recuperação em dois estágios com reclassificadores oferece vários benefícios significativos no contexto dos sistemas RAG:

  1. Precisão aprimorada: Ao reclassificar os documentos inicialmente recuperados e promover os mais relevantes ao topo, o sistema pode fornecer informações mais precisas e precisas ao modelo de linguagem, levando a respostas geradas de maior qualidade.
  2. Problemas mitigados fora do domínio: Os modelos de incorporação usados ​​para recuperação tradicional são frequentemente treinados em corpora de texto de uso geral, que podem não capturar adequadamente a linguagem e a semântica específicas do domínio. Os modelos de reclassificação, por outro lado, podem ser treinados em dados específicos de domínio, mitigando o problema “fora do domínio” e melhorando a relevância dos documentos recuperados em domínios especializados.
  3. Escalabilidade: A abordagem em dois estágios permite um escalonamento eficiente, aproveitando métodos de recuperação rápidos e leves no estágio inicial, enquanto reserva o processo de reclassificação mais intensivo em termos computacionais para um subconjunto menor de documentos.
  4. Flexibilidade: Os modelos de reclassificação podem ser trocados ou atualizados independentemente do método de recuperação inicial, proporcionando flexibilidade e adaptabilidade às necessidades crescentes do sistema.

ColBERT: Interação Tardia Eficiente e Eficaz

Um dos modelos de destaque no domínio da reclassificação é o ColBERT (Contextualized Late Interplay over BERT). ColBERT é um modelo de reclassificação de documentos que aproveita os recursos profundos de compreensão da linguagem do BERT, ao mesmo tempo que introduz um novo mecanismo de interação conhecido como “interação tardia”.

ColBERT: Pesquisa de passagem eficiente e eficaz por meio de interação tardia contextualizada sobre BERT

ColBERT: Pesquisa de passagem eficiente e eficaz por meio de interação tardia contextualizada sobre BERT

O mecanismo de interação tardia do ColBERT permite uma recuperação eficiente e precisa, processando consultas e documentos separadamente até os estágios finais do processo de recuperação. Especificamente, ColBERT codifica independentemente a consulta e o documento usando BERT e, em seguida, emprega uma etapa de interação leve, porém poderosa, que modela sua similaridade refinada. Ao atrasar, mas manter esta interação refinada, o ColBERT pode aproveitar a expressividade dos modelos de linguagem profunda e, ao mesmo tempo, obter a capacidade de pré-calcular representações de documentos offline, acelerando consideravelmente o processamento de consultas.

A arquitetura de interação tardia do ColBERT oferece vários benefícios, incluindo maior eficiência computacional, escalabilidade com tamanho de coleção de documentos e aplicabilidade prática para cenários do mundo actual. Além disso, o ColBERT foi aprimorado ainda mais com técnicas como supervisão sem ruído e compressão residual (no ColBERTv2), que refinam o processo de treinamento e reduzem a ocupação de espaço do modelo, mantendo uma alta eficácia de recuperação.

Este trecho de código demonstra como configurar e usar o modelo jina-colbert-v1-en para indexar uma coleção de documentos, aproveitando sua capacidade de lidar com contextos longos de forma eficiente.

Implementando recuperação em dois estágios com reclassificadores

Agora que entendemos os princípios por trás da recuperação e dos reclassificadores em dois estágios, vamos explorar sua implementação prática no contexto de um sistema RAG. Aproveitaremos bibliotecas e estruturas populares para demonstrar a integração dessas técnicas.

Configurando o Ambiente

Antes de mergulharmos no código, vamos configurar nosso ambiente de desenvolvimento. Usaremos Python e várias bibliotecas populares de PNL, incluindo Hugging Face Transformers, Sentence Transformers e LanceDB.

# Set up required libraries
!pip set up datasets huggingface_hub sentence_transformers lancedb

Preparação de dados

Para fins de demonstração, usaremos o conjunto de dados “ai-arxiv-chunked” do Hugging Face Datasets, que contém mais de 400 artigos do ArXiv sobre aprendizado de máquina, processamento de linguagem pure e grandes modelos de linguagem.

</pre>
from datasets import load_dataset
dataset = load_dataset("jamescalam/ai-arxiv-chunked", cut up="practice")
<pre>

A seguir, pré-processaremos os dados e os dividiremos em partes menores para facilitar a recuperação e o processamento eficientes.

</pre>
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(textual content, chunk_size=512, overlap=64):
tokens = tokenizer.encode(textual content, return_tensors="pt", truncation=True)
chunks = tokens.cut up(chunk_size - overlap)
texts = (tokenizer.decode(chunk) for chunk in chunks)
return texts
chunked_data = ()
for doc in dataset:
textual content = doc("chunk")
chunked_texts = chunk_text(textual content)
chunked_data.lengthen(chunked_texts)
For the preliminary retrieval stage, we'll use a Sentence Transformer mannequin to encode our paperwork and queries into dense vector representations, after which carry out approximate nearest neighbor search utilizing a vector database like LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer mannequin
mannequin = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector retailer
db = lancedb.lancedb('/path/to/retailer')
db.create_collection('docs', vector_dimension=mannequin.get_sentence_embedding_dimension())
# Index paperwork
for textual content in chunked_data:
vector = mannequin.encode(textual content).tolist()
db.insert_document('docs', vector, textual content)
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer mannequin
mannequin = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector retailer
db = lancedb.lancedb('/path/to/retailer')
db.create_collection('docs', vector_dimension=mannequin.get_sentence_embedding_dimension())
# Index paperwork
for textual content in chunked_data:
vector = mannequin.encode(textual content).tolist()
db.insert_document('docs', vector, textual content)

Com nossos documentos indexados, podemos realizar a recuperação inicial encontrando os vizinhos mais próximos de um determinado vetor de consulta.

</pre>
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(textual content, chunk_size=512, overlap=64):
tokens = tokenizer.encode(textual content, return_tensors="pt", truncation=True)
chunks = tokens.cut up(chunk_size - overlap)
texts = (tokenizer.decode(chunk) for chunk in chunks)
return texts
chunked_data = ()
for doc in dataset:
textual content = doc("chunk")
chunked_texts = chunk_text(textual content)
chunked_data.lengthen(chunked_texts)
<pre>

Reclassificação

Após a recuperação inicial, empregaremos um modelo de reclassificação para reordenar os documentos recuperados com base na sua relevância para a consulta. Neste exemplo, usaremos o reclassificador ColBERT, um modelo rápido e preciso baseado em transformador projetado especificamente para classificação de documentos.

</pre>
from lancedb.rerankers import ColbertReranker
reranker = ColbertReranker()
# Rerank preliminary paperwork
reranked_docs = reranker.rerank(question, initial_docs)
<pre>

O reranked_docs record agora contém os documentos reordenados com base em sua relevância para a consulta, conforme determinado pelo reclassificador ColBERT.

Aumento e Geração

Com os documentos reclassificados e relevantes em mãos, podemos prosseguir para as etapas de aumento e geração do pipeline RAG. Usaremos um modelo de linguagem da biblioteca Hugging Face Transformers para gerar a resposta closing.

</pre>
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("t5-base")
mannequin = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
# Increase question with reranked paperwork
augmented_query = question + " " + " ".be a part of(reranked_docs(:3))
# Generate response from language mannequin
input_ids = tokenizer.encode(augmented_query, return_tensors="pt")
output_ids = mannequin.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids(0), skip_special_tokens=True)
print(response)
<pre>

No trecho de código acima, aumentamos a consulta authentic com os três principais documentos reclassificados, criando um augmented_query. Em seguida, passamos essa consulta aumentada para um modelo de linguagem T5, que gera uma resposta com base no contexto fornecido.

O response A variável conterá o resultado closing, aproveitando as informações externas dos documentos recuperados e reclassificados para fornecer uma resposta mais precisa e abrangente à consulta authentic.

Técnicas e considerações avançadas

Embora a implementação que abordamos forneça uma base sólida para a integração de recuperação e reclassificação em dois estágios em um sistema RAG, existem diversas técnicas e considerações avançadas que podem melhorar ainda mais o desempenho e a robustez da abordagem.

  1. Expansão de consulta: para melhorar o estágio inicial de recuperação, você pode empregar técnicas de expansão de consulta, que envolvem aumentar a consulta authentic com termos ou frases relacionadas. Isto pode ajudar a recuperar um conjunto mais diversificado de documentos potencialmente relevantes.
  2. Reclassificação do conjunto: em vez de depender de um único modelo de reclassificação, você pode combinar vários reclassificadores em um conjunto, aproveitando os pontos fortes de diferentes modelos para melhorar o desempenho geral.
  3. Reclassificadores de ajuste fino: embora modelos de reclassificação pré-treinados possam ser eficazes, ajustá-los em dados específicos de domínio pode aumentar ainda mais sua capacidade de capturar semântica específica de domínio e sinais de relevância.
  4. Recuperação iterativa e reclassificação: Em alguns casos, uma única iteração de recuperação e reclassificação pode não ser suficiente. Você pode explorar abordagens iterativas, onde a saída do modelo de linguagem é usada para refinar o processo de consulta e recuperação, levando a um sistema mais interativo e dinâmico.
  5. Equilibrando Relevância e Diversidade: embora os reclassificadores tenham como objetivo promover os documentos mais relevantes, é essencial encontrar um equilíbrio entre relevância e diversidade. A incorporação de técnicas de promoção da diversidade pode ajudar a evitar que o sistema seja excessivamente restrito ou tendencioso nas suas fontes de informação.
  6. Métricas de avaliação: para avaliar a eficácia da sua abordagem de recuperação e reclassificação em dois estágios, você precisará definir métricas de avaliação apropriadas. Isso pode incluir métricas tradicionais de recuperação de informações, como precisão, recall e classificação recíproca média (MRR), bem como métricas específicas de tarefas adaptadas ao seu caso de uso.

Conclusão

A Geração Aumentada de Recuperação (RAG) emergiu como uma técnica poderosa para aprimorar as capacidades de grandes modelos de linguagem, aproveitando fontes externas de informação. No entanto, os métodos tradicionais de recuperação muitas vezes têm dificuldades para identificar os documentos mais relevantes, levando a um desempenho abaixo do perfect.

A recuperação em dois estágios com reclassificadores oferece uma solução atraente para esse desafio. Ao combinar um estágio inicial de recuperação rápida com um modelo de reclassificação mais sofisticado, esta abordagem pode melhorar significativamente a precisão e a relevância dos documentos recuperados, levando, em última análise, a respostas geradas de maior qualidade a partir do modelo de linguagem.

Nesta postagem do weblog, exploramos os princípios por trás da recuperação e reclassificação em dois estágios, destacando seus benefícios e fornecendo um exemplo prático de implementação usando bibliotecas e estruturas populares de PNL. Também discutimos técnicas e considerações avançadas para melhorar ainda mais o desempenho e a robustez desta abordagem.

join the future newsletter Unite AI Mobile Newsletter 1

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button