В этом репозитории размещен официальный выпуск кода и данных для нашей статьи ICLR 2024 BooookScore : систематическое исследование объемного реферирования в эпоху LLM». Там 4 О?
Если вы считаете BooookScore полезным, укажите:
@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}
}
Кроме того, если вас интересует оценка достоверности реферирования на всю книгу, ознакомьтесь с нашей последующей работой: БАСНИ: Оценка достоверности и выбор содержания при реферировании на всю книгу (бумага | репозиторий)!
Некоторые TODO для будущих обновлений приведены в конце этого README. Мы также приветствуем вклады с открытым исходным кодом?
2024/09/03
Добавлена ссылка на форму Google для запроса набора данных BooookScore .2024/04/01
BooookScore теперь доступен в виде пакета Python!2024/02/27
Теперь у нас есть BooookScore v2, версия, которая группирует предложения при получении сгенерированных моделью аннотаций для сводок. Спасибо @IlyaGusev за это!2023/10/10
Первоначальный выпуск данных: все сводки, аннотации GPT-4 и аннотации, сделанные пользователем.Если вы заинтересованы в получении копии набора данных BooookScore , заполните эту форму. Обратите внимание, что мы можем передать набор данных только академическим лабораториям.
pip install BooookScore
Перед запуском сценария фрагментации вам необходимо иметь файл Pickle , содержащий словарь, где ключи — это имена книг, а значения — полные тексты книг. Пример см. в data/example_all_books.pkl
. Когда этот файл будет готов, выполните следующую команду, чтобы разбить данные:
python -m BooookScore .chunk --chunk_size {chunk_size}
--input_path {input_path} --output_path {output_path}
--chunk_size
: желаемый размер фрагмента (каждый фрагмент не будет превышать этот предел)--input_path
: должен быть установлен путь к файлу рассола, описанному выше.--output_path
: где сохранить фрагментированные данные (файл рассола)--include_empty_lines
(необязательно): если указано, не удаляет пустые строки, которые могут существовать во входных текстахПример использования:
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
: путь к фрагментированным данным (файл рассола)--summ_path
: путь для сохранения сгенерированных сводок--model
: имя используемой модели, должно поддерживаться используемым API.--api
: какой API использовать, в настоящее время поддерживает openai
, anthropic
together
--api_key
: путь к текстовому файлу, в котором хранится ваш ключ API.--method
: используемый метод суммирования, «inc» для постепенного обновления, «hier» для иерархического слияния--chunk_size
: желаемый размер каждого фрагмента текста должен соответствовать вашим данным в book_path
max_context_len
: максимальное контекстное окно модели.max_summary_len
: максимальное количество токенов, которое может иметь сводка.Пример использования (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
Пример использования (Клод 3 Опус):
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
Пример использования (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
Инкрементное обновление сохраняет прогресс каждые 10 блоков. Иерархическое слияние сохраняет прогресс в каждой книге. Улучшенные контрольные точки (а также структура данных) для иерархического слияния будут реализованы в будущих версиях!
После создания сводок с пошаговым обновлением или иерархическим объединением мы создаем файл JSON со словарем, который сопоставляет названия книг с их окончательными сводками. Если входным файлом является summaries.json
, то извлеченные окончательные сводки будут сохранены в summaries_cleaned.json
.
python -m BooookScore .postprocess --input_path {input_path}
--model {model} --api {api} --api_key {api_key}
--input_path
: путь к фрагментированным данным (файл рассола)--model
(необязательно): какую модель использовать, если вы хотите, чтобы LLM удалял артефакты сводки--api
(необязательно): какой API использовать, в настоящее время поддерживает openai
, anthropic
together
--api_key
(необязательно): путь к текстовому файлу, в котором хранится ваш ключ API OpenAI.--remove_artifacts
(необязательно): если указано, он попросит языковую модель удалить артефакты от слияния (в этом случае также необходимо указать model
и api_key
)Пример использования (без удаления артефактов):
python -m BooookScore .postprocess --input_path summaries.json
Пример использования (с удалением артефактов):
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}
Входные сводки должны храниться в файле JSON, который сопоставляет названия книг с окончательными описаниями книг.
--summ_path
: путь ко всем сводкам (необходимо указать, если аннотаций еще нет)--annot_path
: путь к аннотациям, созданным моделью--model
: какую модель использовать--api
: какой API использовать, в настоящее время поддерживает openai
, anthropic
together
--api_key
: путь к текстовому файлу, в котором хранится ваш ключ API.--v2
(необязательно): если указано, он будет генерировать аннотации с использованием кода версии 2 и подсказки, которая использует пакетирование предложений вместо оценки предложения за предложением (предоставлен @IlyaGusev!)--batch_size
(необязательно): размер пакета, который будет использоваться при использовании версии 2.Пример использования (оригинальный BooookScore ):
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
Пример использования (версия 2 BooookScore с группировкой предложений):
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