Dieses Repository beherbergt den offiziellen Code und die Datenveröffentlichung für unser ICLR 2024-Papier, BooookScore : Eine systematische Untersuchung der buchlangen Zusammenfassung im Zeitalter der LLMs. Es gibt 4 O's?
Wenn Sie BooookScore nützlich finden, geben Sie bitte Folgendes an:
@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}
}
Wenn Sie sich außerdem für die Bewertung der Treue bei Zusammenfassungen in Buchlänge interessieren, schauen Sie sich unsere Folgearbeit an: FABELN: Bewertung der Treue und Inhaltsauswahl bei Zusammenfassungen in Buchlänge (Papier | Repo)!
Einige TODOs für zukünftige Updates finden Sie am Ende dieser README-Datei. Wir freuen uns auch über Open-Source-Beiträge ?
2024/09/03
Es wurde ein Google-Formularlink zum Anfordern des BooookScore Datensatzes hinzugefügt.2024/04/01
BooookScore ist jetzt als Python-Paket verfügbar!2024/02/27
Wir haben jetzt BooookScore v2, eine Version, die Sätze stapelt, wenn modellgenerierte Anmerkungen für Zusammenfassungen abgerufen werden. Ein großes Lob an @IlyaGusev für die Umsetzung!2023/10/10
Erste Datenveröffentlichung: alle Zusammenfassungen, GPT-4-Anmerkungen und menschliche Anmerkungen.Wenn Sie Interesse an einer Kopie des BooookScore Datensatzes haben, füllen Sie bitte dieses Formular aus. Beachten Sie, dass wir den Datensatz nur an akademische Labore weitergeben können.
pip install BooookScore
Bevor Sie das Chunking-Skript ausführen, benötigen Sie eine Pickle- Datei mit einem Wörterbuch, in dem Schlüssel Buchnamen und Werte Volltexte der Bücher sind. Ein Beispiel finden Sie unter data/example_all_books.pkl
. Sobald Sie diese Datei fertig haben, führen Sie den folgenden Befehl aus, um die Daten aufzuteilen:
python -m BooookScore .chunk --chunk_size {chunk_size}
--input_path {input_path} --output_path {output_path}
--chunk_size
: Ihre gewünschte Blockgröße (jeder Block wird dieses Limit nicht überschreiten)--input_path
: sollte auf den Pfad gesetzt werden, in dem die oben beschriebene Pickle-Datei gespeichert ist--output_path
: Wo sollen die Chunk-Daten (Pickle-Datei) gespeichert werden?--include_empty_lines
(optional): Wenn angegeben, werden die Leerzeilen, die möglicherweise in den Eingabetexten vorhanden sind, nicht entferntBeispielverwendung:
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
: der Pfad zu den Chunked-Daten (Pickle-Datei)--summ_path
: der Pfad zum Speichern der generierten Zusammenfassungen--model
: Name des zu verwendenden Modells, muss von der von Ihnen verwendeten API unterstützt werden--api
: Welche API verwendet werden soll, unterstützt derzeit openai
und anthropic
together
--api_key
: Der Pfad zur TXT-Datei, in der Ihr API-Schlüssel gespeichert ist--method
: die zu verwendende Zusammenfassungsmethode, „inc“ für inkrementelle Aktualisierung, „hier“ für hierarchisches Zusammenführen--chunk_size
: Die gewünschte Größe jedes Textblocks muss mit Ihren Daten in book_path
übereinstimmenmax_context_len
: das maximale Kontextfenster des Modellsmax_summary_len
: Die maximale Anzahl an Token, die eine Zusammenfassung haben kannBeispielverwendung (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
Beispielverwendung (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
Beispielanwendung (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
Durch die inkrementelle Aktualisierung wird der Fortschritt alle 10 Blöcke gespeichert. Die hierarchische Zusammenführung erspart den Fortschritt bei jedem Buch. Verbessertes Checkpointing (und auch Datenstruktur) für die hierarchische Zusammenführung werden in zukünftigen Versionen implementiert!
Nachdem wir Zusammenfassungen mit inkrementeller Aktualisierung oder hierarchischer Zusammenführung erstellt haben, erstellen wir eine JSON-Datei mit einem Wörterbuch, das Buchnamen ihren endgültigen Zusammenfassungen zuordnet. Wenn die Eingabedatei summaries.json
lautet, werden die extrahierten endgültigen Zusammenfassungen in summaries_cleaned.json
gespeichert.
python -m BooookScore .postprocess --input_path {input_path}
--model {model} --api {api} --api_key {api_key}
--input_path
: der Pfad zu den Chunked-Daten (Pickle-Datei)--model
(optional): welches Modell verwendet werden soll, wenn ein LLM Zusammenfassungsartefakte entfernen soll--api
(optional): welche API verwendet werden soll, unterstützt derzeit openai
und anthropic
together
--api_key
(optional): der Pfad zur TXT-Datei, in der Ihr OpenAI-API-Schlüssel gespeichert ist--remove_artifacts
(optional): Wenn angegeben, wird ein Sprachmodell aufgefordert, Artefakte aus der Zusammenführung zu entfernen (in diesem Fall müssen auch model
und api_key
angegeben werden).Beispielverwendung (ohne Artefaktentfernung):
python -m BooookScore .postprocess --input_path summaries.json
Beispielverwendung (mit Artefaktentfernung):
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}
Die Eingabezusammenfassungen müssen in einer JSON-Datei gespeichert werden, die die Buchnamen den endgültigen Buchzusammenfassungen zuordnet.
--summ_path
: der Pfad zu allen Zusammenfassungen (muss angegeben werden, wenn noch keine Anmerkungen vorhanden sind)--annot_path
: der Pfad zu modellgenerierten Anmerkungen--model
: welches Modell verwendet werden soll--api
: Welche API verwendet werden soll, unterstützt derzeit openai
und anthropic
together
--api_key
: Der Pfad zur TXT-Datei, in der Ihr API-Schlüssel gespeichert ist--v2
(optional): Wenn angegeben, werden Anmerkungen mithilfe von Code und Eingabeaufforderung der Version 2 generiert, die Satzstapelung verwendet, anstatt Satz für Satz auszuwerten (beigetragen von @IlyaGusev!)--batch_size
(optional): zu verwendende Batchgröße bei Verwendung von v2Beispielverwendung (ursprünglicher 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
Beispielverwendung (v2 BooookScore mit Satzstapelung):
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