Ce référentiel héberge le code officiel et la publication des données de notre article ICLR 2024, BooookScore : Une exploration systématique du résumé de la longueur d'un livre à l'ère des LLM. Il y a des 4 O ?
Si vous trouvez BooookScore utile, veuillez citer :
@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}
}
De plus, si vous êtes intéressé par l'évaluation de la fidélité dans le résumé de la longueur d'un livre, consultez notre travail de suivi : FABLES : Évaluation de la fidélité et de la sélection du contenu dans le résumé de la longueur d'un livre (papier | repo) !
Certaines TODO pour les futures mises à jour se trouvent à la fin de ce README. Nous acceptons également les contributions open source ?
2024/09/03
Ajout d'un lien de formulaire Google pour demander l'ensemble de données BooookScore .2024/04/01
BooookScore est désormais disponible sous forme de package Python !2024/02/27
Nous avons maintenant BooookScore v2, une version qui regroupe les phrases lors de l'obtention d'annotations générées par le modèle pour les résumés. Félicitations à @IlyaGusev pour avoir mis en œuvre cela !2023/10/10
Publication initiale des données : tous les résumés, annotations GPT-4 et annotations humaines.Si vous souhaitez obtenir une copie de l'ensemble de données BooookScore , veuillez remplir ce formulaire. Notez que nous ne pouvons diffuser l'ensemble de données qu'aux laboratoires universitaires.
pip install BooookScore
Avant d'exécuter le script de segmentation, vous devez disposer d'un fichier pickle contenant un dictionnaire, où les clés sont des noms de livres et les valeurs sont des textes complets des livres. Reportez-vous à data/example_all_books.pkl
pour un exemple. Une fois ce fichier prêt, exécutez la commande suivante pour fragmenter les données :
python -m BooookScore .chunk --chunk_size {chunk_size}
--input_path {input_path} --output_path {output_path}
--chunk_size
: la taille de morceau souhaitée (chaque morceau ne dépassera pas cette limite)--input_path
: doit être défini sur le chemin stockant le fichier pickle décrit ci-dessus--output_path
: où enregistrer les données fragmentées (fichier pickle)--include_empty_lines
(facultatif) : si spécifié, il ne supprime pas les lignes vides qui peuvent exister dans les textes d'entréeExemple d'utilisation :
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
: le chemin d'accès aux données fragmentées (fichier pickle)--summ_path
: le chemin pour sauvegarder les résumés générés--model
: nom du modèle à utiliser, doit être supporté par l'API que vous utilisez--api
: quelle API utiliser, prend actuellement en charge openai
, anthropic
, together
--api_key
: le chemin vers le fichier txt stockant votre clé API--method
: la méthode de récapitulation à utiliser, "inc" pour une mise à jour incrémentielle, "hier" pour une fusion hiérarchique--chunk_size
: la taille souhaitée de chaque morceau de texte, doit être cohérente avec vos données dans book_path
max_context_len
: la fenêtre de contexte maximale du modèlemax_summary_len
: le nombre maximum de jetons qu'un résumé peut avoirExemple d'utilisation (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
Exemple d'utilisation (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
Exemple d'utilisation (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
La mise à jour incrémentielle enregistre la progression tous les 10 morceaux. La fusion hiérarchique enregistre la progression de chaque livre. Des points de contrôle améliorés (et la structure des données également) pour la fusion hiérarchique seront implémentés dans les futures versions !
Après avoir généré des résumés avec mise à jour incrémentielle ou fusion hiérarchique, nous créons un fichier json avec un dictionnaire qui mappe les noms de livres à leurs résumés finaux. Si le fichier d'entrée est summaries.json
, alors les résumés finaux extraits seront enregistrés dans summaries_cleaned.json
.
python -m BooookScore .postprocess --input_path {input_path}
--model {model} --api {api} --api_key {api_key}
--input_path
: le chemin d'accès aux données fragmentées (fichier pickle)--model
(facultatif) : quel modèle utiliser si vous souhaitez qu'un LLM supprime les artefacts récapitulatifs--api
(facultatif) : quelle API utiliser, prend actuellement en charge openai
, anthropic
, together
--api_key
(facultatif) : le chemin d'accès au fichier txt stockant votre clé API OpenAI--remove_artifacts
(facultatif) : si spécifié, il demandera à un modèle de langage de supprimer les artefacts de la fusion (il faut également spécifier model
et api_key
dans ce cas)Exemple d'utilisation (sans suppression d'artefact) :
python -m BooookScore .postprocess --input_path summaries.json
Exemple d'utilisation (avec suppression d'artefacts) :
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}
Les résumés d'entrée doivent être stockés dans un fichier json qui mappe les noms de livres aux résumés finaux des livres.
--summ_path
: le chemin vers tous les résumés (doit préciser s'il n'y a pas encore d'annotations)--annot_path
: le chemin vers les annotations générées par le modèle--model
: quel modèle utiliser--api
: quelle API utiliser, prend actuellement en charge openai
, anthropic
, together
--api_key
: le chemin vers le fichier txt stockant votre clé API--v2
(facultatif) : s'il est spécifié, il générera des annotations à l'aide du code et de l'invite v2, qui utilise le traitement par lots de phrases au lieu d'évaluer phrase par phrase (contribution de @IlyaGusev !)--batch_size
(facultatif) : taille du lot à utiliser si vous utilisez la v2Exemple d'utilisation ( 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
Exemple d'utilisation (v2 BooookScore avec regroupement de phrases) :
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