Fase de agrupamento RAG
Depois de reunir seus documentos e consultas de teste e realizar uma análise de documentos durante a fase de preparação, a próxima fase é o agrupamento. Dividir documentos em partes de tamanho adequado que contêm conteúdo semanticamente relevante é crucial para o sucesso da implementação de RAG (geração de Retrieval-Augmented). Passar documentos inteiros ou partes superdimensionadas é caro, pode sobrecarregar os limites de token do modelo e não produzir os melhores resultados. Passar informações para um modelo de linguagem irrelevante para a consulta pode resultar em respostas imprecisas ou não relacionadas. Você precisa otimizar o processo de passar informações relevantes e remover informações irrelevantes usando estratégias eficazes de agrupamento e pesquisa. Essa abordagem minimiza falsos positivos e falsos negativos e maximiza verdadeiros positivos e verdadeiros negativos.
Partes muito pequenas e que não contêm contexto suficiente para lidar com a consulta podem gerar resultados ruins. O contexto relevante que existe em várias partes pode não ser capturado. A chave é implementar abordagens de agrupamento eficazes para seus tipos de documento específicos e suas estruturas e conteúdo específicos. Há várias abordagens de agrupamento a serem consideradas, cada uma com suas próprias implicações de custo e eficácia, dependendo do tipo e estrutura do documento ao qual elas são aplicadas.
Este artigo descreve várias abordagens de agrupamento e examina como a estrutura de seus documentos pode influenciar a abordagem de agrupamento escolhida.
Este artigo faz parte de uma série. Leia a introdução antes de continuar.
Economia da fragmentação
Ao determinar sua estratégia geral de segmentação, você deve considerar seu orçamento e seus requisitos de qualidade e desempenho para sua coleção de documentos. Há custos de engenharia para o design e a implementação de cada implementação de agrupamento exclusivo e custos de processamento por documento que diferem dependendo da abordagem. Se seus documentos tiverem mídia inserida ou vinculada, você deverá considerar a economia do processamento desses elementos. Para agrupamento, esse processamento geralmente usa modelos de linguagem para gerar descrições da mídia. Essas descrições são então agrupadas. Uma abordagem alternativa para algumas mídias é passá-las como estão para um modelo multimodal no momento da inferência. No entanto, essa abordagem não afeta a economia de segmentação.
As seções a seguir examinam a economia do agrupamento de imagens e a solução geral.
Economia de fragmentação de imagem
Há um custo para usar um modelo de linguagem para gerar uma descrição de uma imagem que você segmenta. Por exemplo, serviços baseados em nuvem, como o Serviço OpenAI do Azure, cobram por transação ou em uma base de provisionamento pré-pago. Imagens maiores incorrem em um custo maior. Através da análise do documento, você deve determinar quais imagens são importantes para segmentar e quais imagens você deve ignorar. A partir daí, você precisa entender o número e os tamanhos das imagens em sua solução. Em seguida, você deve pesar o custo-benefício de segmentar as descrições de imagens em comparação com o custo de gerá-las.
Uma maneira de determinar quais imagens processar é usar um serviço como a Visão de IA do Azure para classificar imagens, marcar imagens ou fazer a detecção de logotipo. Em seguida, você pode usar os resultados e os indicadores de confiança para determinar se a imagem adiciona um valor contextual significativo e deve ser processado. As chamadas à Visão podem ser mais baratas do que as chamadas para modelos de linguagem, portanto, essa abordagem pode resultar em economia de custos. Experimente determinar quais níveis de confiança e quais classificações ou marcas fornecem os melhores resultados para seus dados. Outra opção é criar seu próprio modelo de classificador. Se você adotar essa abordagem, considere os custos para criar, hospedar e manter seu próprio modelo.
Outra estratégia de otimização de custo é armazenar em cache usando o padrão Cache-Aside. Você pode gerar uma chave baseada no hash da imagem. Como primeira etapa, verifique se você tem um resultado armazenado em cache de uma execução anterior ou de um documento processado anteriormente. Se você fizer isso, poderá usar esse resultado. Essa abordagem elimina os custos de chamar um classificador ou um modelo de idioma. Se não houver cache, ao chamar o classificador ou o modelo de idioma, você armazenará o resultado em cache. Chamadas futuras para essa imagem usam o cache.
O fluxo de trabalho simples a seguir integra todos esses processos de otimização de custo:
Verifique se o processamento da imagem está armazenado em cache. Nesse caso, use os resultados armazenados em cache.
Execute o classificador para determinar se você deve processar a imagem. Armazene em cache o resultado da classificação. Se a lógica de classificação determinar que a imagem adiciona valor, prossiga para a próxima etapa.
Gere a descrição para sua imagem. Armazene o resultado em cache.
Economia da solução geral
Considere os seguintes fatores ao avaliar o custo de sua solução geral:
Número de implementações de agrupamento exclusivas: Cada implementação exclusiva tem custos de engenharia e manutenção. Considere o número de diferentes tipos de documento em sua coleção e as compensações entre custo e qualidade de implementações únicas para cada um.
custo por documento de cada implementação: Algumas abordagens de agrupamento podem resultar em partes de melhor qualidade, mas têm um custo financeiro e temporal mais alto para gerar essas partes. Por exemplo, o uso de um modelo predefinido no Azure AI Document Intelligence provavelmente tem um custo por documento maior do que uma implementação de análise de texto puro, mas pode resultar em partes melhores.
Número de documentos iniciais: o número de documentos iniciais que você precisa processar para iniciar sua solução.
Número de documentos incrementais: o número e a taxa de novos documentos que você deve processar para manutenção contínua do sistema.
Carregamento e agrupamento
Durante o agrupamento, primeiro você deve carregar o documento na memória em algum formato. O código de agrupamento opera na representação na memória do documento. Você pode combinar o código de carregamento com o agrupamento ou separar o carregamento em sua própria fase. A abordagem escolhida deve ser baseada principalmente em restrições arquitetônicas e suas preferências. As seções a seguir exploram brevemente as duas opções e fornecem recomendações gerais.
Carregamento e fragmentação separados
Há vários motivos pelos quais você pode optar por separar as fases de carregamento e agrupamento. Talvez você queira encapsular a lógica no código de carregamento. Talvez você queira manter o resultado do código de carregamento antes de fazer o agrupamento, especialmente quando experimentar várias permutações de agrupamento para economizar tempo ou custo de processamento. Por fim, talvez você queira executar o código de carregamento e agrupamento em processos separados por motivos arquitetônicos, como compartimentação de processo ou segmentação de segurança, que inclui a remoção de dados pessoais.
Encapsular lógica no código de carregamento
Você pode optar por encapsular a lógica de pré-processamento na fase de carregamento. Essa abordagem simplifica o código de agrupamento porque ele não requer nenhum pré-processamento. O pré-processamento pode ser tão simples quanto remover ou anotar partes do documento que você deseja ignorar na análise do documento, como marcas d'água, cabeçalhos e rodapés, para tarefas mais complexas, como reformatar o documento. Por exemplo, você pode incluir as seguintes tarefas de pré-processamento na fase de carregamento:
Remova ou anota itens que você deseja ignorar.
Substitua referências de imagem por descrições de imagem. Durante essa fase, você usa um modelo de linguagem grande para gerar uma descrição para a imagem e atualizar o documento com essa descrição. Se você determinar na fase de análise do documento que há um texto ao redor que fornece um contexto valioso para a imagem, passe esse texto, juntamente com a imagem, para o modelo de linguagem grande.
Baixe ou copie imagens para o armazenamento de arquivos, como o Azure Data Lake Storage, a ser processado separadamente do texto do documento. Se você determinar na análise do documento que há um texto ao redor que fornece um contexto valioso para a imagem, armazene esse texto junto com a imagem no armazenamento de arquivos.
Reformatar tabelas para que elas sejam processadas com mais facilidade.
Persistir o resultado do código de carregamento
Há vários motivos pelos quais você pode optar por persistir o resultado do código de carregamento. Um motivo é se você deseja a capacidade de inspecionar os documentos depois que eles são carregados e pré-processados, mas antes que a lógica de agrupamento seja executada. Outro motivo é que talvez você queira executar uma lógica de agrupamento diferente em relação ao mesmo código pré-processado enquanto ele estiver em desenvolvimento ou em produção. Persistir o código carregado acelera esse processo.
Executar o carregamento e o código de agrupamento em processos separados
Separe o código de carregamento e agrupamento em processos separados para ajudar a executar várias implementações de agrupamento no mesmo código pré-processado. Essa separação também permite que você execute o carregamento e o código de agrupamento em diferentes ambientes de computação e em hardwares diferentes. Você pode usar esse design para dimensionar independentemente a computação usada para carregamento e agrupamento.
Combinar carregamento e agrupamento
Combinar o código de carregamento e agrupamento é uma implementação mais simples na maioria dos casos. Muitas das operações que você pode considerar fazer no pré-processamento durante uma fase de carregamento separada podem ser realizadas na fase de divisão em partes. Por exemplo, em vez de substituir URLs de imagens por uma descrição na fase de carregamento, a lógica de agrupamento pode fazer chamadas para o modelo de linguagem grande para obter uma descrição de texto e fragmentar a descrição.
Quando você tiver formatos de documento como HTML que tenham marcas com referências a imagens, verifique se o leitor ou analisador que o código de agrupamento está usando não remove as marcas. O código de fragmentação precisa ser capaz de identificar referências de imagem.
Recomendações
Considere as recomendações a seguir ao determinar se você deve combinar ou separar sua lógica de agrupamento.
Comece combinando a lógica de carregamento e de agrupamento. Separe-os quando sua solução exigir.
Evite converter documentos em um formato intermediário se optar por separar os processos. Esse tipo de operação pode resultar em perda de dados.
Abordagens de fragmentação
Esta seção fornece uma visão geral das abordagens comuns de agrupamento. Você pode usar várias abordagens na implementação, como combinar o uso de um modelo de linguagem para obter uma representação de texto de uma imagem com muitas das abordagens listadas.
Cada abordagem é acompanhada por uma matriz de tomada de decisão resumida que realça as ferramentas, os custos associados e muito mais. O esforço de engenharia e os custos de processamento são subjetivos e estão incluídos para comparação relativa.
Análise baseada em sentenças
Essa abordagem simples divide documentos de texto em partes compostas por frases completas. As vantagens dessa abordagem incluem seu baixo custo de implementação, baixo custo de processamento e sua aplicabilidade a qualquer documento baseado em texto escrito em prosa ou frases completas. Uma desvantagem dessa abordagem é que cada parte pode não capturar o contexto completo de uma ideia ou significado. Muitas vezes, várias frases devem ser consideradas em conjunto para apreender o significado semântico.
Ferramentas:tokenizador de frases SpaCy, divisor de texto recursivo LangChain, tokenizador de frases NLTK
Esforço de engenharia: Baixo
Custo de Processamento: Baixo
Casos de uso: documentos não estruturados escritos em prosa ou frases completas, e sua coleção de documentos contém um número proibitivo de diferentes tipos de documentos que exigem estratégias individuais de fragmentação
Exemplos: conteúdo gerado pelo usuário, como feedback aberto de pesquisas, postagens em fóruns, resenhas, mensagens de email, um romance ou um ensaio
Análise de tamanho fixo, com sobreposição
Essa abordagem divide um documento em partes com base em um número fixo de caracteres ou tokens e permite alguma sobreposição de caracteres entre partes. Essa abordagem tem muitas das mesmas vantagens e desvantagens que a análise baseada em frases. Uma vantagem dessa abordagem em relação à análise baseada em sentença é a capacidade de obter partes com significados semânticos que abrangem várias frases.
Você deve escolher o tamanho fixo das partes e a quantidade de sobreposição. Como os resultados variam para diferentes tipos de documento, é melhor usar uma ferramenta como o "chunk visualizer" da Hugging Face para fazer análise exploratória. Você pode usar ferramentas como esta para visualizar como seus documentos são agrupados com base em suas decisões. Você deve usar tokens BERT em vez de contagens de caracteres ao usar a análise de tamanho fixo. Os tokens BERT são baseados em unidades significativas de linguagem, portanto, preservam mais informações semânticas do que contagens de caracteres.
Ferramentas:Divisor de texto recursivo LangChain, visualizador de fragmentos Hugging Face
Esforço de engenharia: Baixo
Custo de Processamento: Baixo
Casos de uso: documentos não estruturados escritos em prosa ou em outras formas que não a prosa, contendo frases completas ou incompletas. Sua coleção de documentos contém um número proibitivo de diferentes tipos de documento que exigem estratégias individuais de agrupamento
Exemplos: conteúdo gerado pelo usuário, como comentários abertos de pesquisas, postagens no fórum, revisões, mensagens de email, anotações pessoais, anotações de pesquisa, listas
Código personalizado
Essa abordagem analisa documentos usando código personalizado para criar partes. Essa abordagem é mais bem-sucedida para documentos baseados em texto em que a estrutura é conhecida ou pode ser inferida e um alto grau de controle sobre a criação de partes é necessário. Você pode usar técnicas de análise de texto, como expressões regulares, para criar partes com base em padrões dentro da estrutura do documento. O objetivo é criar partes com tamanho semelhante em comprimento e partes que tenham conteúdo distinto. Muitas linguagens de programação oferecem suporte para expressões regulares e algumas têm bibliotecas ou pacotes que fornecem recursos de manipulação de cadeia de caracteres mais elegantes.
Ferramentas:Python (re, regex, BeautifulSoup, lxml, html5lib, marko), R (stringr, xml2), Julia (Gumbo.jl)
Esforço de engenharia: médio
Custo de processamento : baixo
Casos de uso: documentos semiestruturados em que a estrutura pode ser inferida
Exemplos: registros de patentes, artigos de pesquisa, apólices de seguro, scripts e roteiros
Aumento do modelo de linguagem
Você pode usar modelos de linguagem para criar partes. Por exemplo, você pode usar um modelo de linguagem grande, como GPT-4, para gerar representações textuais de imagens ou resumos de tabelas que podem ser usadas como partes. O aumento do modelo de linguagem é usado com outras abordagens de agrupamento, como código personalizado.
Se a análise do documento determinar que o texto antes ou depois da imagem ajuda a responder a algumas perguntas de requisito, passe esse contexto extra para o modelo de linguagem. É importante experimentar para determinar se esse contexto extra melhora o desempenho da solução.
Se a lógica de agrupamento dividir a descrição da imagem em várias partes, certifique-se de incluir a URL da imagem em cada parte. Inclua a URL da imagem em cada parte para garantir que os metadados sejam retornados para todas as consultas que a imagem atende. Essa etapa é crucial para cenários em que o usuário final precisa acessar a imagem de origem por meio dessa URL ou usar imagens brutas durante o tempo de inferência.
Ferramentas :Azure OpenAI, OpenAI
Esforço de engenharia: médio
Custo de processamento: Alto
Casos de uso: Imagens, tabelas
Exemplos: Gerar representações de texto de tabelas e imagens, resumir transcrições de reuniões, falas, entrevistas ou podcasts
Análise de layout do documento
Bibliotecas e serviços de análise de layout de documento combinam funcionalidades de reconhecimento óptico de caracteres com modelos de aprendizado profundo para extrair a estrutura e o texto de documentos. Elementos estruturais podem incluir cabeçalhos, rodapés, títulos, títulos de seção, tabelas e figuras. O objetivo é fornecer um melhor significado semântico ao conteúdo contido em documentos.
Bibliotecas e serviços de análise de layout de documento expõem um modelo que representa o conteúdo estrutural e textual do documento. Você ainda precisa escrever um código que interaja com o modelo.
Nota
O Document Intelligence é um serviço baseado em nuvem que exige que você carregue seu documento. Você precisa garantir que seus regulamentos de segurança e conformidade permitam que você carregue documentos para esses serviços.
Ferramentas:Modelos de análise de documentos da Document Intelligence, Donut, Layout Parser
Esforço de engenharia: médio
Custo de processamento: Médio
Casos de uso: Documentos semiestruturados
Exemplos: artigos do News, páginas da Web, currículos
Modelo predefinido
Serviços como o Document Intelligence fornecem modelos predefinidos dos quais você pode aproveitar para vários tipos de documento. Alguns modelos são treinados para tipos de documento específicos, como o formulário de imposto W-2 dos EUA, enquanto outros visam um gênero mais amplo de tipos de documentos, como faturas.
Ferramentas:modelos predefinidos do Document Intelligence, Processamento inteligente de documentos Power Automate, LayoutLMv3
Esforço de engenharia: Baixo
Custo do processamento: Médio/Alto
Casos de uso: documentos estruturados em que existe um modelo predefinido
exemplos específicos: faturas, recibos, cartões de seguro de saúde, formulários W-2
Modelo personalizado
Para documentos altamente estruturados em que nenhum modelo predefinido existe, talvez seja necessário criar um modelo personalizado. Essa abordagem pode ser eficaz para imagens ou documentos altamente estruturados, o que dificulta o uso de técnicas de análise de texto.
Ferramentas:modelos personalizados do Document Intelligence, Tesseract
Esforço de engenharia: alto
Custo de processamento: Médio/Alto
Casos de uso: documentos estruturados em que um modelo predefinido não existe
Exemplos: agendamentos de manutenção e reparo automotivo, transcrições acadêmicas, registros, manuais técnicos, procedimentos operacionais, diretrizes de manutenção
Estrutura do documento
Os documentos variam na quantidade de estrutura que eles têm. Alguns documentos, como formulários governamentais, têm uma estrutura complexa e conhecida, como um formulário fiscal W-2 dos EUA. Na outra extremidade do espectro estão documentos não estruturados, como notas de forma livre. O grau de estrutura para um tipo de documento é um bom ponto de partida para determinar uma abordagem de agrupamento eficaz. Embora não haja regras específicas, esta seção fornece algumas diretrizes a seguir.
Documentos estruturados
Documentos estruturados, às vezes chamados de documentos de formato fixo, têm layouts definidos. Os dados nesses documentos estão localizados em locais fixos. Por exemplo, a data ou o nome da família do cliente é encontrado no mesmo local em cada documento do mesmo formato fixo. Um exemplo de um documento de formato fixo é o documento fiscal W-2 dos EUA.
Documentos de formato fixo podem ser imagens digitalizadas de documentos originais que foram preenchidos à mão ou têm estruturas de layout complexas. Esse formato os torna difíceis de processar usando uma abordagem básica de análise de texto. Uma abordagem típica para processar estruturas de documentos complexas é usar modelos de machine learning para extrair dados e aplicar significado semântico a esses dados, quando possível.
Exemplos de : formulário W-2, cartão de seguro
abordagens típicas: modelos predefinidos, modelos personalizados
Documentos semiestruturados
Documentos semiestruturados não têm um formato ou esquema fixo, como o formulário W-2, mas fornecem consistência em relação ao formato ou esquema. Por exemplo, todas as faturas não são apresentadas da mesma forma. No entanto, eles geralmente têm um esquema consistente. Você pode esperar que uma fatura tenha um número de fatura e alguma forma de fatura para e enviar para nome e endereço, entre outros dados. Uma página da Web pode não ter consistências de esquema, mas ela tem elementos estruturais ou elementos de layout semelhantes, como corpo, título, H1e p que podem adicionar significado semântico ao texto ao redor.
Assim como documentos estruturados, documentos semiestruturados que têm estruturas de layout complexas são difíceis de processar usando a análise de texto. Para esses tipos de documento, os modelos de machine learning são uma boa abordagem. Há modelos predefinidos para determinados domínios que têm esquemas consistentes, como faturas, contratos ou documentos de seguro de saúde. Considere a criação de modelos personalizados para estruturas complexas em que nenhum modelo predefinido existe.
Exemplos: Faturas, recibos, páginas da Web, arquivos de markdown
Abordagens típicas: modelos de análise de documento
Estrutura inferida
Alguns documentos possuem uma estrutura, mas não são escritos em linguagem de marcação. Para esses documentos, a estrutura deve ser inferida. Um bom exemplo é o seguinte documento de regulamentação da UE.
Como você pode entender claramente a estrutura do documento e não há modelos conhecidos para ele, você pode determinar que pode escrever código personalizado. Um formato de documento como esse pode não justificar o esforço para criar um modelo personalizado, dependendo do número de documentos diferentes desse tipo com o qual você está trabalhando. Por exemplo, se sua coleção contiver todos os regulamentos da UE ou leis estaduais dos EUA, um modelo personalizado poderá ser uma boa abordagem. Se você estiver trabalhando com um único documento, como o regulamento da UE no exemplo, o código personalizado poderá ser mais econômico.
Exemplos: documentos legais, scripts, especificações de fabricação
abordagens típicas: código personalizado, modelos personalizados
Documentos não estruturados
Uma boa abordagem para documentos com pouca ou nenhuma estrutura é baseada em frases ou em tamanho fixo com abordagens de sobreposição.
Exemplos: conteúdo gerado pelo usuário, como comentários abertos de pesquisas, postagens no fórum, revisões, mensagens de email, anotações pessoais, anotações de pesquisa
Abordagens típicas: baseadas em frases ou em limites com sobreposição
Experimentação
Este artigo descreve as abordagens de agrupamento mais adequadas para cada tipo de documento, mas, na prática, qualquer uma das abordagens pode ser apropriada para qualquer tipo de documento. Por exemplo, a análise baseada em frases pode ser apropriada para documentos altamente estruturados ou um modelo personalizado pode ser apropriado para documentos não estruturados. Parte da otimização da solução RAG é experimentar várias abordagens de agrupamento. Considere o número de recursos que você tem, a habilidade técnica de seus recursos e o volume de documentos que você precisa processar. Para obter uma estratégia de agrupamento ideal, observe as vantagens e as desvantagens de cada abordagem que você testa para garantir que você escolha a abordagem apropriada para seu caso de uso.