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
chunk_size
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:
Section. 1.
All legislative Powers herein granted shall be vested in a Congress of the United States, which shall consist of a Senate and House of Representatives.
Section. 2.
The House of Representatives shall be composed of Members chosen every second Year by the People of the several States, and the Electors in each State shall have the Qualifications requisite for Electors of the most numerous Branch of the State Legislature.
No Person shall be a Representative who shall not have attained to the Age of twenty five Years, and been seven Years a Citizen of the United States, and who shall not, when elected, be an Inhabitant of that State in which he shall be chosen.
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 (简化版):
你的任务是作为一个分块器。
你应该在输入中插入“段”标记。
你的目标是将内容分成语义相关的组。
- Gerar blocos::
Section. 1.
All legislative Powers herein granted shall be vested in a Congress of the United States, which shall consist of a Senate and House of Representatives.段
Section. 2.
The House of Representatives shall be composed of Members chosen every second Year by the People of the several States, and the Electors in each State shall have the Qualifications requisite for Electors of the most numerous Branch of the State Legislature.段
No Person shall be a Representative who shall not have attained to the Age of twenty five Years, and been seven Years a Citizen of the United States, and who shall not, when elected, be an Inhabitant of that State in which he shall be chosen.段
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.