Este repositorio alberga el código oficial y la publicación de datos de nuestro artículo ICLR 2024, BooookScore : una exploración sistemática del resumen de la extensión de un libro en la era de los LLM. ¿Hay 4 O?
Si encuentra útil BooookScore , 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}
}
Además, si está interesado en la evaluación de la fidelidad en el resumen de la extensión de un libro, consulte nuestro trabajo de seguimiento: FÁBULAS: Evaluación de la fidelidad y selección de contenido en el resumen de la extensión de un libro (artículo | repositorio).
Algunas tareas pendientes para futuras actualizaciones se encuentran al final de este README. ¿También damos la bienvenida a las contribuciones de código abierto?
2024/09/03
Se agregó un enlace de formulario de Google para solicitar el conjunto de datos BooookScore .2024/04/01
BooookScore ahora está disponible como paquete Python!2024/02/27
Ahora tenemos BooookScore v2, una versión que agrupa oraciones al obtener anotaciones generadas por modelos para resúmenes. ¡Felicitaciones a @IlyaGusev por implementar esto!2023/10/10
Publicación de datos inicial: todos los resúmenes, anotaciones GPT-4 y anotaciones humanas.Si está interesado en obtener una copia del conjunto de datos BooookScore , complete este formulario. Tenga en cuenta que solo podemos publicar el conjunto de datos en laboratorios académicos.
pip install BooookScore
Antes de ejecutar el script de fragmentación, necesita tener un archivo pickle que contenga un diccionario, donde las claves son los nombres de los libros y los valores son los textos completos de los libros. Consulte data/example_all_books.pkl
para ver un ejemplo. Una vez que tenga este archivo listo, ejecute el siguiente comando para fragmentar los datos:
python -m BooookScore .chunk --chunk_size {chunk_size}
--input_path {input_path} --output_path {output_path}
--chunk_size
: el tamaño de fragmento que deseas (cada fragmento no excederá este límite)--input_path
: debe establecerse en la ruta que almacena el archivo pickle descrito anteriormente--output_path
: dónde guardar los datos fragmentados (archivo pickle)--include_empty_lines
(opcional): si se especifica, no elimina las líneas vacías que puedan existir en los textos de entradaUso de ejemplo:
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
: la ruta a los datos fragmentados (archivo pickle)--summ_path
: la ruta para guardar los resúmenes generados--model
: nombre del modelo a usar, debe ser compatible con la API que estás usando--api
: qué API usar, actualmente admite openai
, anthropic
, together
--api_key
: la ruta al archivo txt que almacena su clave API--method
: el método de resumen a utilizar, "inc" para actualización incremental, "hier" para fusión jerárquica--chunk_size
: el tamaño deseado de cada fragmento de texto, debe ser coherente con sus datos en book_path
max_context_len
: la ventana de contexto máxima del modelomax_summary_len
: la cantidad máxima de tokens que puede tener un resumenUso de ejemplo (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
Ejemplo 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
Ejemplo 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
La actualización incremental guarda el progreso cada 10 fragmentos. La fusión jerárquica guarda el progreso de cada libro. ¡En futuras versiones se implementarán puntos de control mejorados (y también una estructura de datos) para la fusión jerárquica!
Después de generar resúmenes con actualización incremental o fusión jerárquica, creamos un archivo json con un diccionario que asigna los nombres de los libros a sus resúmenes finales. Si el archivo de entrada es summaries.json
, los resúmenes finales extraídos se guardarán en summaries_cleaned.json
.
python -m BooookScore .postprocess --input_path {input_path}
--model {model} --api {api} --api_key {api_key}
--input_path
: la ruta a los datos fragmentados (archivo pickle)--model
(opcional): qué modelo usar si desea que un LLM elimine los artefactos de resumen--api
(opcional): qué API usar, actualmente admite openai
, anthropic
, together
--api_key
(opcional): la ruta al archivo txt que almacena su clave API de OpenAI--remove_artifacts
(opcional): si se especifica, le pedirá a un modelo de lenguaje que elimine los artefactos de la fusión (también debe especificar model
y api_key
en este caso)Uso de ejemplo (sin eliminación de artefactos):
python -m BooookScore .postprocess --input_path summaries.json
Uso de ejemplo (con eliminación de artefactos):
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}
Los resúmenes de entrada deben almacenarse en un archivo json que asigne desde los nombres de los libros hasta los resúmenes finales de los libros.
--summ_path
: la ruta a todos los resúmenes (debe especificarse si aún no hay anotaciones)--annot_path
: la ruta a las anotaciones generadas por el modelo--model
: qué modelo usar--api
: qué API usar, actualmente admite openai
, anthropic
, together
--api_key
: la ruta al archivo txt que almacena su clave API--v2
(opcional): si se especifica, generará anotaciones usando el código v2 y el mensaje, que utiliza procesamiento por lotes de oraciones en lugar de evaluar oración por oración (contribuido por @IlyaGusev).--batch_size
(opcional): tamaño de lote a usar si se usa v2Uso de ejemplo ( 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
Uso de ejemplo (v2 BooookScore con procesamiento por lotes de oraciones):
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