Fase de enriquecimento de fragmentos RAG
Depois de dividir seus documentos em uma coleção de partes, a próxima etapa é enriquecer cada parte limpando-a e aumentando-a com metadados. Limpar as partes permite que você obtenha melhores correspondências para consultas semânticas em uma pesquisa de vetor. Adicionar metadados permite que você dê suporte a pesquisas das partes que vão além das pesquisas semânticas. A limpeza e o aumento envolvem a extensão do esquema para o fragmento.
Este artigo discute várias maneiras de aumentar seus blocos, incluindo operações comuns de limpeza que você pode realizar em blocos para melhorar as comparações de vetores. Ele também descreve alguns campos de metadados comuns que você pode adicionar às partes para aumentar o índice de pesquisa.
Este artigo faz parte de uma série. Veja a introdução.
O exemplo de código a seguir mostra partes enriquecidas com dados.
Limpar dados
Agrupar seus dados ajuda sua carga de trabalho a encontrar as partes mais relevantes, normalmente por meio da vetorização dessas partes e do armazenamento delas em um banco de dados de vetor. Uma pesquisa de vetor otimizada retorna apenas as linhas no banco de dados que têm as correspondências semânticas mais próximas da consulta. O objetivo de limpar os dados é dar suporte a correspondências de proximidade eliminando possíveis diferenças que não são materiais para a semântica do texto. A seguir estão alguns procedimentos comuns de limpeza.
Nota
Você deve retornar a parte original não processada como resultado da consulta, então, você deve adicionar um campo extra para armazenar os dados limpos e vetorizados.
Implemente estratégias de caixa baixa. A caixa baixa permite que as palavras em maiúsculas, como as palavras no início de uma frase, correspondam às mesmas palavras em uma frase. As incorporações são tipicamente sensíveis a maiúsculas e minúsculas, o que significa que "Chita" e "chita" resultariam em um vetor diferente para a mesma palavra lógica. Por exemplo, para a consulta inserida "o que é mais rápido, um guepardo ou um puma?" a inserção "guepardos são mais rápidos do que pumas" é uma correspondência mais próxima do que "Guepardos são mais rápidos que pumas". Algumas estratégias minúsculas reduzem todas as palavras, incluindo substantivos adequados, enquanto outras estratégias reduzem apenas as primeiras palavras em frases.
Remova palavras irrelevantes. As palavras irrelevantes são palavras como “um”, “uma” e “a”. Você pode remover essas palavras para reduzir a dimensionalidade do vetor resultante. Se você remover as palavras irrelevantes no exemplo anterior, “uma chita é mais rápida que um puma” e “a chita é mais rápida que o puma” são vetorialmente iguais a “chita mais rápida que puma”. No entanto, é importante entender que algumas palavras irrelevantes têm significado semântico. Por exemplo, "não" pode ser considerado uma palavra de parada, mas possui uma importância semântica relevante. Você precisa fazer testes para determinar o efeito da remoção de palavras irrelevantes.
Corrija erros de ortografia. Uma palavra incorreta não corresponde à palavra escrita corretamente no modelo de inserção. Por exemplo, "chita" não é o mesmo que "xita" na incorporação. Você deve corrigir erros de ortografia para resolver esse problema.
Remover caracteres Unicode. Remover caracteres Unicode pode reduzir o ruído em seus segmentos e diminuir a dimensionalidade. Como palavras de parada, alguns caracteres Unicode podem conter informações relevantes. É importante realizar testes para entender o impacto da remoção de caracteres Unicode.
Normalizar texto. Normalizar o texto de acordo com padrões como expandir abreviações, converter números em palavras e expandir contrações, por exemplo, expandir "I'm" para "I am", pode ajudar a aumentar o desempenho de busca em vetor.
Aumentando os fragmentos
Pesquisas semânticas em relação às partes vetorizadas funcionam bem para alguns tipos de consultas, mas não tão bem para outras. Dependendo dos tipos de consultas a que você precisa oferecer suporte, talvez seja necessário aumentar seus fragmentos com informações adicionais. Os campos de metadados adicionais são todos armazenados na mesma linha que suas inserções e podem ser usados na solução de pesquisa como filtros ou como parte de uma pesquisa.
A imagem a seguir mostra o JSON de conteúdo totalmente enriquecido e descreve como os metadados podem ser usados por uma plataforma de pesquisa.
As colunas de metadados que você precisa adicionar dependem do domínio do problema, incluindo o tipo de dados que você tem e os tipos de consultas que você deseja dar suporte. Você precisa analisar a experiência do usuário, os dados disponíveis e a qualidade do resultado que você está tentando alcançar. A partir daí, você pode determinar quais metadados podem ajudá-lo a atender aos requisitos da carga de trabalho.
A seguir estão alguns campos de metadados comuns, juntamente com o texto da parte original, algumas diretrizes sobre seus possíveis usos e ferramentas ou técnicas que geralmente são usadas para gerar o conteúdo dos metadados.
ID. Uma ID identifica exclusivamente uma parte. Uma ID exclusiva é útil durante o processamento para determinar se uma parte já existe no repositório. Uma ID pode ser um hash de algum campo de chave. Ferramentas: biblioteca de hash.
Título. Um título é um valor de retorno útil para um fragmento. Fornece um resumo rápido do conteúdo no bloco. O resumo também pode ser útil para consultar com uma pesquisa indexada, pois pode conter palavras-chave para correspondência. Ferramentas: modelo de linguagem.
Resumo. O resumo é semelhante ao título, pois é um valor de retorno comum e pode ser usado em pesquisas indexadas. Os resumos geralmente são mais longos do que os títulos. Ferramentas: modelo de linguagem.
Reformulação do fragmento. A reformulação de um trecho pode ser útil como um campo de pesquisa de vetor, porque a reformulação captura variações na linguagem, como sinônimos e paráfrases. Ferramentas: modelo de linguagem.
Palavras-chave. Pesquisas de palavra-chave são úteis para dados que não são contextuais, para encontrar uma correspondência exata e quando um termo ou valor específico é importante. Por exemplo, um fabricante de automóveis pode ter revisões ou dados de desempenho para cada um de seus modelos por vários anos. "Revisão do produto X para o ano 2009" é semanticamente como "Revisão do produto X para 2010" e "Revisão do produto Y para 2009". Nesse caso, é mais eficaz corresponder às palavras-chave do produto e do ano. Ferramentas: modelo de linguagem, RAKE, KeyBERT, multi-rake.
Entidades. As entidades são informações específicas, como pessoas, organizações e locais. Assim como as palavras-chave, as entidades são boas para pesquisas de correspondência exatas ou quando entidades específicas são importantes. Tools: spaCy, Stanford Named Entity Recognizer (Stanford NER), scikit-learn, Natural Language Toolkit (NLTK).
Texto com fragmentos limpos. O texto do fragmento limpo. Tools: Um modelo de linguagem.
Perguntas que o fragmento pode responder. Algumas vezes, a consulta incorporada não corresponde exatamente ao trecho incorporado. Por exemplo, a consulta pode ser pequena em relação ao tamanho do bloco. Talvez seja melhor formular as consultas que o trecho pode responder e fazer uma busca vetorial entre a consulta real do usuário e as consultas pré-formuladas. Ferramentas: modelo de linguagem.
Fonte. A origem do fragmento pode ser valiosa como um retorno para consultas. Retornar a origem permite que o usuário cite a fonte original.
Idioma. O idioma do segmento pode ser útil como um filtro em consultas.
O custo do aumento
O uso de alguns modelos de linguagem para aumentar partes pode ser caro. Você precisa calcular o custo de cada enriquecimento que você está considerando e multiplicá-lo pelo número estimado de partes ao longo do tempo. Você deve usar essas informações, juntamente com o teste dos campos enriquecidos, para determinar a melhor decisão de negócios.