Introdução geral
O zChunk é uma nova estratégia de fragmentação desenvolvida pela ZeroEntropy para fornecer uma solução de fragmentação semântica de uso geral. A estratégia se baseia no modelo Llama-70B, que otimiza o processo de fragmentação de um documento, solicitando a geração de partes, garantindo a manutenção de uma alta relação sinal-ruído durante a recuperação de informações. O zChunk é especialmente adequado para aplicativos RAG (Retrieval Augmentation Generation) que exigem recuperação de alta precisão e resolve as limitações dos métodos tradicionais de fragmentação ao lidar com documentos complexos. Com o zChunk, os usuários podem segmentar com mais eficiência os documentos em partes significativas, melhorando assim a precisão e a eficiência da recuperação de informações.
Seu trabalho é atuar como um chunker.
Você deve inserir o "parágrafo" em toda a entrada.
Seu objetivo é separar o conteúdo em agrupamentos semanticamente relevantes.
metodologia e Limitações do LLM OCR: Desafios de análise de documentos sob o glamour Os PROMPTs mencionados têm alguns pontos em comum.
Lista de funções
- Algoritmo de fragmentação baseado em Llama-70BGeração de pistas para a fragmentação semântica usando o modelo Llama-70B.
- Chunking com alta relação sinal-ruídoOtimize a estratégia de fragmentação para garantir que as informações recuperadas tenham uma alta relação sinal-ruído.
- Várias estratégias de fragmentaçãoSuporte a várias estratégias, como chunking de tamanho fixo, chunking baseado em similaridade de incorporação etc.
- ajuste de hiperparâmetrosFornece um pipeline de ajuste de hiperparâmetros que permite aos usuários ajustar os tamanhos dos blocos e os parâmetros de sobreposição de acordo com suas necessidades específicas.
- código abertoCódigo-fonte aberto: O código-fonte aberto completo é fornecido e pode ser usado e modificado livremente pelo usuário.
Usando a Ajuda
Processo de instalação
- armazém de clones::
git clone https://github.com/zeroentropy-ai/zchunk.git
cd zchunk
- Instalação de dependências::
pip install -r requirements.txt
Uso
- Preparação do arquivo de entradaSalvar o documento a ser dividido em partes como um arquivo de texto, por exemplo.
example_input.txt
. - Executar o script de fragmentação::
python test.py --input example_input.txt --output example_output.txt
- Exibição do arquivo de saídaOs resultados da fragmentação serão salvos no arquivo
example_output.txt
Médio.
Fluxo de operação detalhado da função
- Escolha de uma estratégia de fragmentação::
- NaiveChunkTamanho fixo de pedaços para documentos simples.
- SemanticChunkChunking baseado em similaridade de incorporação para documentos que precisam manter a integridade semântica.
- Algoritmo zChunkGeração de blocos com base em dicas do modelo Llama-70B para documentos complexos.
- Ajuste dos hiperparâmetros::
- tamanho do blocoAjuste do parâmetro: Isso pode ser feito ajustando o parâmetro
tamanho do bloco
para definir o tamanho de cada bloco. - taxa de sobreposição: por meio do parâmetro
overlap_ratio
Defina a porcentagem de sobreposição entre os blocos para garantir a continuidade das informações.
- tamanho do blocoAjuste do parâmetro: Isso pode ser feito ajustando o parâmetro
- Execução do ajuste de hiperparâmetros::
python hyperparameter_tuning.py --input example_input.txt --output tuned_output.txt
O script ajustará automaticamente o tamanho do bloco e a taxa de sobreposição com base no documento de entrada para gerar resultados ideais de fragmentação.
- Avaliação dos efeitos da fragmentação::
- Avalie os resultados da separação em blocos usando o script de avaliação fornecido para garantir a eficácia da estratégia de separação em blocos.
python evaluate.py --input example_input.txt --output example_output.txt
exemplo típico
Suponhamos que tenhamos um texto da Constituição dos EUA que precise ser dividido em pedaços:
Texto original:
Seção 1.
Todos os poderes legislativos aqui concedidos serão investidos em um Congresso dos Estados Unidos, que consistirá em um Senado e uma Câmara dos Deputados.
Seção. 2.
A Câmara dos Representantes será composta de membros escolhidos a cada dois anos pelo povo dos diversos Estados, e os eleitores de cada Estado deverão ter as qualificações exigidas para os eleitores. A Câmara dos Representantes será composta de membros escolhidos a cada dois anos pelo povo dos diversos Estados, e os eleitores de cada Estado deverão ter as qualificações exigidas para os eleitores do ramo mais numeroso da legislatura estadual.
Nenhuma pessoa poderá ser representante se não tiver completado vinte e cinco anos de idade e sete anos de cidadania dos Estados Unidos, e se não seja, quando eleito, um habitante do Estado em que for escolhido.
Chunking usando o algoritmo zChunk:
- Selecionar palavras-chavetoken especial: selecione um token especial (por exemplo, "parágrafo") que não esteja no corpus.
- Inserir dicasLlama: Faça com que o Llama insira o token na mensagem do usuário.
SYSTEM_PROMPT (simplificado):
Sua tarefa é atuar como um chunker.
Você deve inserir tags de "segmento" na entrada.
Seu objetivo é dividir o conteúdo em grupos semanticamente relacionados.
- Gerar blocos::
Seção 1.
Todos os poderes legislativos aqui concedidos serão investidos em um Congresso dos Estados Unidos, que consistirá em um Senado e uma Câmara dos Deputados.
Seção. 2.
A Câmara dos Representantes será composta de membros escolhidos a cada dois anos pelo povo dos diversos Estados, e os eleitores de cada Estado deverão ter as qualificações necessárias para o cargo. Os eleitores de cada Estado deverão ter as qualificações exigidas para o cargo.
Não poderá ser Representante quem não tiver completado vinte e cinco anos de idade e sete anos de cidadania dos Estados Unidos, e quem não seja, quando eleito, um habitante do Estado em que for escolhido.
Dessa forma, podemos segmentar documentos em blocos semanticamente relacionados, cada um dos quais pode ser recuperado de forma independente, melhorando a relação sinal-ruído e a precisão da recuperação de informações.
otimização
- Com o Llama de inferência local, passagens inteiras podem ser processadas com eficiência e os logprobs podem ser examinados para determinar os locais dos blocos.
- São necessários cerca de 15 minutos para processar 450.000 caracteres, mas isso pode ser reduzido significativamente se o código for otimizado.
avaliação comparativa
- O zChunk tem maior índice de recuperação e pontuações de índice de sinal do que o NaiveChunk e os métodos de chunking semântico no conjunto de dados LegalBenchConsumerContractsQA.
Com o algoritmo zChunk, podemos segmentar facilmente qualquer tipo de documento sem depender de expressões regulares ou regras criadas manualmente, melhorando a eficiência e a precisão dos aplicativos RAG.