Grandes modelos de linguagem facilitaram muitas tarefas, como criação de chatbots, tradução de idiomas, resumo de textos, etc. Costumávamos escrever modelos para resumo e sempre havia a questão do desempenho. Agora, podemos fazer isso facilmente com o uso de modelos de linguagem grandes (LLMs). Por exemplo, LLMs de última geração (SOTA) já podem lidar com um livro inteiro em sua janela de contexto. Mas ainda existem algumas limitações ao resumir documentos muito grandes.
Limitações do resumo de documentos grandes por LLM
O limite contextual ou comprimento do contexto em um LLM refere-se ao número de tokens que um modelo pode processar. Cada modelo tem seu próprio comprimento de contexto, também conhecido como tokens máximos ou limite de token. Por exemplo, um modelo GPT-4 padrão tem um comprimento de contexto de 128.000 tokens. Ele perderá mais informações dos tokens do que isso. Alguns LLMs SOTA têm um limite contextual de até 1 milhão de tokens. No entanto, à medida que o limite contextual aumenta, os LLMs sofrem de limitações como recência e primazia. Também podemos nos aprofundar em maneiras de mitigar esses efeitos.
O efeito de primazia em LLMs refere-se ao modelo que dá mais importância às informações apresentadas no início de uma sequência.
O efeito de recência refere-se ao modelo que enfatiza as informações mais recentes que ele processa.
Ambos os efeitos influenciam o modelo em relação a partes específicas dos dados de entrada. O modelo pode pular informações importantes no meio da sequência.
A segunda questão é o custo. Podemos resolver a primeira questão do limite de contexto dividindo o texto, mas simplesmente não podemos passar o livro inteiro diretamente para o modelo. Custaria muito. Por exemplo, se tivermos 1 milhão de tokens de um livro e o passarmos diretamente para o modelo GPT4, nosso custo total seria em torno de US$ 90 (tokens de prompt e conclusão). Temos que encontrar um meio-termo para resumir nosso texto considerando o preço, o limite contextual e o contexto completo do livro.
Neste tutorial você aprenderá a resumir um livro completo considerando o preço e o limite contextual do modelo. Vamos começar.
Resuma documentos grandes com LangChain e OpenAI
Configurando o Ambiente
Para acompanhar o tutorial, você precisa ter:
Python instalado
Um IDE (código VS funcionaria)
Para instalar as dependências, abra seu terminal e digite o comando:
Este comando instalará todas as dependências necessárias.
Carregue o livro
Você usará o livro “David Copperfield” de Charles Dickens, que está disponível publicamente para este projeto. Vamos carregar o livro usando o PyPDFLoader utilitário fornecido pela LangChain.
Irá carregar o livro completo, mas só nos interessa a parte do conteúdo. Podemos pular páginas como Prefácio e Introdução.
Agora temos o conteúdo. Vamos imprimir os primeiros 200 caracteres.
Pré-processando
Vamos remover o conteúdo desnecessário do texto, como caracteres não imprimíveis, espaços extras, etc.
Depois de limpar os dados, estamos prontos para mergulhar no problema de resumo.
Carregue a API OpenAI
Antes de usar a API OpenAI, precisamos configurá-la e fornecer credenciais aqui.
Insira sua chave de API e ela configurará a variável de ambiente.
Vamos ver quantos tokens temos no livro:
Temos mais de 466.000 tokens neste livro e, se passássemos todos eles diretamente para o LLM, isso nos cobraria muito. Portanto, para reduzir o custo, implementaremos o agrupamento K-means para extrair as partes importantes do livro.
Observação: A decisão de usar clustering K-means foi inspirada no tutorial do guru de dados Greg Kamradt.
Para obter partes importantes do livro, vamos primeiro dividir o livro em partes diferentes.
Divida o conteúdo em documentos
Dividiremos o conteúdo do livro em documentos usando o SemanticChunker utilidade do LangChain.
O SemanticChunker recebe dois argumentos, o primeiro é o modelo de embeddings. Os embeddings gerados por este modelo são utilizados para dividir o texto com base na semântica. O segundo é o breakpoint_threshold_typeque determina os pontos em que o texto deve ser dividido em diferentes partes com base na semelhança semântica.
Nota: Ao processar esses pedaços menores e semanticamente semelhantes, pretendemos minimizar os efeitos de atualidade e primazia em nosso LLM. Esta estratégia permite que o nosso modelo lide com cada pequeno contexto de forma mais eficaz, garantindo uma interpretação e geração de respostas mais equilibradas.
Encontre as incorporações de cada documento
Agora, vamos obter os embeddings de cada documento gerado. Você obterá os embeddings usando o método padrão OpenAI.
O get_embeddings O método nos fornece as incorporações de todos os documentos.
Observação: O text-embedding-3-small método é lançado especialmente pela OpenAI, que é considerado mais barato e rápido.
Reorganizar os dados
A seguir, converteremos listas de conteúdos de documentos e suas incorporações em um DataFrame do pandas para facilitar o manuseio e análise de dados.
Aplique Faiss para clustering eficiente
Agora, vamos transformar os vetores de documentos em um formato compatível com Faiss, agrupá-los em 50 grupos usando K-means e, em seguida, criar um índice Faiss para pesquisas eficientes de similaridade entre documentos.
Este agrupamento K-means agrupará os documentos em 50 grupos.
Observação: A razão para escolher o agrupamento K-means é que cada cluster terá um conteúdo ou contexto semelhante porque todos os documentos dentro desse cluster têm incorporações relacionadas, e selecionaremos aquele que está mais próximo do núcleo.
Selecione os documentos de importação
Agora, selecionaremos apenas o documento mais importante de cada cluster. Para isso, selecionaremos apenas o primeiro vetor mais próximo do centróide.
Este código usa o método de pesquisa no índice para encontrar o documento mais próximo de cada centróide na lista de centróides. Ele retorna duas matrizes: Dque contém as distâncias dos documentos mais próximos aos seus respectivos centróides, e I, que contém os índices desses documentos mais próximos. O segundo parâmetro 1 no método de pesquisa especifica que apenas o documento mais próximo deve ser encontrado para cada centróide.
Agora precisamos ordenar os índices dos documentos selecionados porque os documentos estão em sequência em relação à sequência do livro.
Obtenha o resumo de cada documento
O próximo passo é obter o resumo de cada documento utilizando o modelo GPT-4 para economizar dinheiro. Para usar o GPT-4, vamos definir o modelo.
Defina o prompt e crie um modelo de prompt usando LangChain para passá-lo ao modelo.
Este modelo de prompt ajudará o modelo a resumir os documentos de forma mais eficaz e eficiente.
A próxima etapa é definir uma cadeia do LangChain usando LangChain Expression Language (LCEL).
A cadeia de resumo usa StrOutputParser para analisar a saída. Existem outros analisadores de saída para explorar.
Você pode finalmente aplicar a cadeia definida em cada documento para obter um resumo.
O código acima aplica a cadeia em cada documento, um por um, e concatena cada resumo ao final_summary.
Salve o resumo como PDF
O próximo passo é formatar o resumo e salvá-lo em formato PDF.
Então, aqui temos o resumo completo do livro em formato PDF.
Conclusão
Neste tutorial, navegamos pelas complexidades de resumir textos grandes, como livros inteiros, usando LLMs, ao mesmo tempo em que abordamos desafios relacionados a limites contextuais e custos. Aprendemos as etapas para pré-processar o texto e implementar uma estratégia que combina fragmentação semântica e agrupamento K-means para gerenciar eficazmente as limitações contextuais do modelo.
Ao usar clustering eficiente, extraímos passagens principais com eficiência, reduzindo a sobrecarga do processamento direto de textos massivos. Esta abordagem não só reduz significativamente os custos, minimizando o número de tokens processados, mas também mitiga os efeitos de atualidade e primazia inerentes aos LLMs, garantindo uma consideração equilibrada de todos os segmentos de texto.
Tem havido um entusiasmo significativo sobre o desenvolvimento de aplicações de IA através das APIs de LLMs, onde os bancos de dados vetoriais desempenham um papel significativo, oferecendo armazenamento e recuperação eficientes de incorporações contextuais. MyScaleDB é um banco de dados vetorial projetado especificamente para aplicações de IA, tendo em mente todos os fatores como custo, precisão e velocidade. Sua interface compatível com SQL permite que os desenvolvedores comecem a desenvolver seus aplicativos de IA sem aprender nada novo.
Se você quiser discutir mais conosco, seja bem-vindo ao MyScale Discord para compartilhar suas idéias e comentários.
YOUTUBE.COM/THENEWSTACK
A tecnologia avança rápido, não perca um episódio. Inscreva-se em nosso canal no YouTube para transmitir todos os nossos podcasts, entrevistas, demonstrações e muito mais.
SE INSCREVER
Usama Jamil, defensor do desenvolvedor na MyScale, traz consigo uma vasta experiência e um profundo interesse em ciência de dados. Com paixão por explorar novas tendências no domínio de IA/ML, Usama se esforça para tornar conceitos complexos acessíveis a…
Este site utiliza cookies para melhorar sua experiência de navegação. Ao continuar, você concorda com o uso de cookies. Para mais informações, consulte nossa Política de Privacidade.
Funcional
Sempre ativo
O armazenamento ou acesso técnico é estritamente necessário para a finalidade legítima de permitir a utilização de um serviço específico explicitamente solicitado pelo assinante ou utilizador, ou com a finalidade exclusiva de efetuar a transmissão de uma comunicação através de uma rede de comunicações eletrónicas.
Preferências
O armazenamento ou acesso técnico é necessário para o propósito legítimo de armazenar preferências que não são solicitadas pelo assinante ou usuário.
Estatísticas
O armazenamento ou acesso técnico que é usado exclusivamente para fins estatísticos.O armazenamento técnico ou acesso que é usado exclusivamente para fins estatísticos anônimos. Sem uma intimação, conformidade voluntária por parte de seu provedor de serviços de Internet ou registros adicionais de terceiros, as informações armazenadas ou recuperadas apenas para esse fim geralmente não podem ser usadas para identificá-lo.
Marketing
O armazenamento ou acesso técnico é necessário para criar perfis de usuário para enviar publicidade ou para rastrear o usuário em um site ou em vários sites para fins de marketing semelhantes.