Este repositório hospeda o código oficial e o lançamento de dados de nosso artigo ICLR 2024, BooookScore : Uma exploração sistemática do resumo do tamanho de um livro na era dos LLMs. Existem 4 O's?
Se você achar BooookScore útil, cite:
@inproceedings{
chang2024 BooookScore ,
title={ BooookScore : A systematic exploration of book-length summarization in the era of {LLM}s},
author={Yapei Chang and Kyle Lo and Tanya Goyal and Mohit Iyyer},
booktitle={The Twelfth International Conference on Learning Representations},
year={2024},
url={https://arxiv.org/pdf/2310.00785.pdf}
}
Além disso, se você estiver interessado na avaliação da fidelidade na sumarização de livros, confira nosso trabalho de acompanhamento: FÁBULAS: Avaliando a fidelidade e a seleção de conteúdo na sumarização de livros (artigo | repo)!
Alguns TODOs para atualizações futuras estão no final deste README. Também acolhemos contribuições de código aberto?
2024/09/03
Adicionado um link de formulário do Google para solicitar o conjunto de dados BooookScore .2024/04/01
BooookScore agora está disponível como um pacote Python!2024/02/27
Agora temos BooookScore v2, uma versão que agrupa frases ao obter anotações geradas por modelo para resumos. Parabéns a @IlyaGusev por implementar isso!2023/10/10
Divulgação inicial de dados: todos os resumos, anotações GPT-4 e anotações humanas.Se você estiver interessado em obter uma cópia do conjunto de dados BooookScore , preencha este formulário. Observe que só podemos liberar o conjunto de dados para laboratórios acadêmicos.
pip install BooookScore
Antes de executar o script de chunking, você precisa ter um arquivo pickle contendo um dicionário, onde as chaves são os nomes dos livros e os valores são os textos completos dos livros. Consulte data/example_all_books.pkl
para obter um exemplo. Depois de ter este arquivo pronto, execute o seguinte comando para agrupar os dados:
python -m BooookScore .chunk --chunk_size {chunk_size}
--input_path {input_path} --output_path {output_path}
--chunk_size
: o tamanho do pedaço desejado (cada pedaço não excederá esse limite)--input_path
: deve ser definido como o caminho que armazena o arquivo pickle descrito acima--output_path
: onde salvar os dados fragmentados (arquivo pickle)--include_empty_lines
(opcional): se especificado, não remove as linhas vazias que possam existir nos textos de entradaExemplo de uso:
python -m BooookScore .chunk --chunk_size 2048
--input_path all_books.pkl --output_path all_books_chunked_2048.pkl
python -m BooookScore .summ --book_path {book_path} --summ_path {summ_path}
--model {model} --api {api} --api_key {api_key} --method {method} --chunk_size {chunk_size}
--max_context_len {max_context_len} --max_summary_len {max_summary_len}
--book_path
: o caminho para os dados fragmentados (arquivo pickle)--summ_path
: o caminho para salvar os resumos gerados--model
: nome do modelo a ser usado, deve ser suportado pela API que você está usando--api
: qual API usar, atualmente suporta openai
, anthropic
, together
--api_key
: o caminho para o arquivo txt que armazena sua chave de API--method
: o método de resumo a ser usado, "inc" para atualização incremental, "hier" para fusão hierárquica--chunk_size
: o tamanho desejado de cada pedaço de texto, deve ser consistente com seus dados em book_path
max_context_len
: a janela de contexto máxima do modelomax_summary_len
: o número máximo de tokens que um resumo pode terExemplo de uso (GPT 4):
python -m BooookScore .summ --book_path all_books_chunked_4096.pkl
--summ_path summaries.json --model gpt-4 --api openai --api_key api_key.txt
--method hier --chunk_size 4096 --max_context_len 8192
Exemplo de uso (Claude 3 Opus):
python -m BooookScore .summ --book_path all_books_chunked_150000.pkl
--summ_path summaries.json --model claude-3-opus-20240229
--api anthropic --api_key api_key.txt --method hier
--chunk_size 150000 --max_context_len 200000
Exemplo de uso (Mixtral 8x7B):
python -m BooookScore .summ --book_path all_books_chunked_30000.pkl
--summ_path summaries.json --model mistralai/Mixtral-8x7B-Instruct-v0.1
--api together --api_key api_key.txt --method hier
--chunk_size 30000 --max_context_len 32000
A atualização incremental salva o progresso a cada 10 blocos. A fusão hierárquica salva o progresso de cada livro. Pontos de verificação aprimorados (e também estrutura de dados) para fusão hierárquica serão implementados em versões futuras!
Após gerar resumos com atualização incremental ou fusão hierárquica, criamos um arquivo json com um dicionário que mapeia os nomes dos livros para seus resumos finais. Se o arquivo de entrada for summaries.json
, os resumos finais extraídos serão salvos em summaries_cleaned.json
.
python -m BooookScore .postprocess --input_path {input_path}
--model {model} --api {api} --api_key {api_key}
--input_path
: o caminho para os dados fragmentados (arquivo pickle)--model
(opcional): qual modelo usar se você deseja que um LLM remova artefatos de resumo--api
(opcional): qual API usar, atualmente suporta openai
, anthropic
, together
--api_key
(opcional): o caminho para o arquivo txt que armazena sua chave de API OpenAI--remove_artifacts
(opcional): se especificado, solicitará a um modelo de linguagem que remova os artefatos da fusão (também deve especificar model
e api_key
neste caso)Exemplo de uso (sem remoção de artefato):
python -m BooookScore .postprocess --input_path summaries.json
Exemplo de uso (com remoção de artefato):
python -m BooookScore .postprocess --input_path summaries.json --model gpt-4
--api openai --api_key api_key.txt --remove_artifacts
python -m BooookScore .score --summ_path {summ_path} --annot_path {annot_path}
--model {model} --api {api} --api_key {api_key}
Os resumos de entrada devem ser armazenados em um arquivo json que mapeia desde os nomes dos livros até os resumos finais dos livros.
--summ_path
: o caminho para todos os resumos (deve especificar se ainda não há anotações)--annot_path
: o caminho para anotações geradas pelo modelo--model
: qual modelo usar--api
: qual API usar, atualmente suporta openai
, anthropic
, together
--api_key
: o caminho para o arquivo txt que armazena sua chave de API--v2
(opcional): se especificado, gerará anotações usando código v2 e prompt, que usa lote de frases em vez de avaliar frase por frase (contribuição de @IlyaGusev!)--batch_size
(opcional): tamanho do lote a ser usado se estiver usando v2Exemplo de uso ( BooookScore original):
python -m BooookScore .score --summ_path summaries/chatgpt-2048-hier-cleaned.json
--annot_path annotations.json --model gpt-4
--api openai --api_key api_key.txt
Exemplo de uso (v2 BooookScore com lote de frases):
python -m BooookScore .score --summ_path summaries/chatgpt-2048-hier-cleaned.json
--annot_path annotations.json --model gpt-4 --api openai
--api_key api_key.txt --v2 --batch_size 10