Repositori ini menampung rilis kode dan data resmi untuk makalah ICLR 2024 kami, BooookScore : Eksplorasi sistematis ringkasan sepanjang buku di era LLM. Ada 4 O?
Jika menurut Anda BooookScore berguna, harap kutip:
@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}
}
Selain itu, jika Anda tertarik dengan evaluasi kesetiaan dalam ringkasan sepanjang buku, lihatlah karya lanjutan kami: FABEL: Mengevaluasi kesetiaan dan pemilihan konten dalam ringkasan sepanjang buku (kertas | repo)!
Beberapa TODO untuk pembaruan di masa mendatang ada di akhir README ini. Kami juga menyambut kontribusi sumber terbuka?
2024/09/03
Menambahkan tautan formulir Google untuk meminta kumpulan data BooookScore .2024/04/01
BooookScore sekarang tersedia sebagai paket Python!2024/02/27
Sekarang kami memiliki BooookScore v2, versi yang mengelompokkan kalimat saat memperoleh anotasi yang dihasilkan model untuk ringkasan. Kudos to @IlyaGusev untuk mengimplementasikan ini!2023/10/10
Rilis data awal: semua ringkasan, anotasi GPT-4, dan anotasi manusia.Jika Anda tertarik untuk mendapatkan salinan dataset BooookScore , silakan isi formulir ini. Perlu diperhatikan bahwa kami hanya dapat merilis kumpulan data ke laboratorium akademis.
pip install BooookScore
Sebelum menjalankan skrip chunking, Anda harus memiliki file acar yang berisi kamus, dengan kunci adalah nama buku dan nilai adalah teks lengkap dari buku tersebut. Lihat data/example_all_books.pkl
untuk contohnya. Setelah Anda menyiapkan file ini, jalankan perintah berikut untuk memotong data:
python -m BooookScore .chunk --chunk_size {chunk_size}
--input_path {input_path} --output_path {output_path}
--chunk_size
: ukuran bongkahan yang Anda inginkan (setiap bongkahan tidak akan melebihi batas ini)--input_path
: harus disetel ke jalur penyimpanan file acar yang dijelaskan di atas--output_path
: tempat menyimpan data yang dipotong (file acar)--include_empty_lines
(opsional): jika ditentukan, tidak menghapus baris kosong yang mungkin ada di teks inputContoh penggunaan:
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
: jalur ke data yang dipotong (file acar)--summ_path
: jalur untuk menyimpan ringkasan yang dihasilkan--model
: nama model yang akan digunakan, harus didukung oleh API yang Anda gunakan--api
: API mana yang akan digunakan, saat ini mendukung openai
, anthropic
, together
--api_key
: jalur ke file txt yang menyimpan kunci API Anda--method
: metode peringkasan yang digunakan, "inc" untuk pembaruan bertahap, "hier" untuk penggabungan hierarki--chunk_size
: ukuran setiap potongan teks yang diinginkan, harus konsisten dengan data Anda di book_path
max_context_len
: jendela konteks maksimum modelmax_summary_len
: jumlah maksimum token yang dapat dimiliki suatu ringkasanContoh penggunaan (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
Contoh penggunaan (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
Contoh penggunaan (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
Pembaruan bertahap menghemat kemajuan setiap 10 bagian. Penggabungan hierarki menghemat kemajuan setiap buku. Peningkatan pos pemeriksaan (dan juga struktur data) untuk penggabungan hierarki akan diterapkan di versi mendatang!
Setelah membuat ringkasan dengan pembaruan bertahap atau penggabungan hierarki, kami membuat file json dengan kamus yang memetakan nama buku ke ringkasan akhirnya. Jika file inputnya adalah summaries.json
, ringkasan akhir yang diekstraksi akan disimpan ke summaries_cleaned.json
.
python -m BooookScore .postprocess --input_path {input_path}
--model {model} --api {api} --api_key {api_key}
--input_path
: jalur ke data yang dipotong (file acar)--model
(opsional): model mana yang digunakan jika Anda ingin LLM menghapus artefak ringkasan--api
(opsional): API mana yang akan digunakan, saat ini mendukung openai
, anthropic
, together
--api_key
(opsional): jalur ke file txt yang menyimpan kunci API OpenAI Anda--remove_artifacts
(opsional): jika ditentukan, ia akan meminta model bahasa menghapus artefak dari penggabungan (dalam hal ini juga harus menentukan model
dan api_key
)Contoh penggunaan (tanpa penghapusan artefak):
python -m BooookScore .postprocess --input_path summaries.json
Contoh penggunaan (dengan penghapusan artefak):
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}
Ringkasan masukan harus disimpan dalam file json yang memetakan dari nama buku hingga ringkasan buku akhir.
--summ_path
: jalur ke semua ringkasan (harus ditentukan jika belum ada anotasi)--annot_path
: jalur menuju anotasi yang dihasilkan model--model
: model mana yang akan digunakan--api
: API mana yang akan digunakan, saat ini mendukung openai
, anthropic
, together
--api_key
: jalur ke file txt yang menyimpan kunci API Anda--v2
(opsional): jika ditentukan, ini akan menghasilkan anotasi menggunakan kode dan prompt v2, yang menggunakan pengelompokan kalimat alih-alih mengevaluasi kalimat demi kalimat (dikontribusikan oleh @IlyaGusev!)--batch_size
(opsional): ukuran batch yang akan digunakan jika menggunakan v2Contoh penggunaan ( BooookScore asli):
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
Contoh penggunaan (v2 BooookScore dengan kumpulan kalimat):
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