🚀 long-t5-tglobal-xl + BookSum
本項目基於long-t5-tglobal-xl
模型在kmfoda/booksum
數據集上微調而來,能夠對長文本進行總結,為你提供類似SparkNotes的各主題摘要。它在學術和敘述性文本上泛化能力較好,XL版本在人工評估中能生成更優質的摘要。
🚀 快速開始
安裝依賴
安裝或更新transformers
庫:
pip install -U transformers
文本總結示例
使用pipeline
進行文本總結:
import torch
from transformers import pipeline
summarizer = pipeline(
"summarization",
"pszemraj/long-t5-tglobal-xl-16384-book-summary",
device=0 if torch.cuda.is_available() else -1,
)
long_text = "Here is a lot of text I don't want to read. Replace me"
result = summarizer(long_text)
print(result[0]["summary_text"])
⚠️ 重要提示
根據此討論,我們發現long-t5
模型版本 >= 4.23.0 存在問題。請使用pip install transformers==4.22.0
以確保該模型性能良好。
簡單概念驗證
以下是對著名的海豹突擊隊複製粘貼文本的總結:
In this chapter, the monster explains how he intends to exact revenge on "the little b****" who insulted him. He tells the kiddo that he is a highly trained and experienced killer who will use his arsenal of weapons--including his access to the internet--to exact justice on the little brat.
雖然這是一個粗糙的例子,但你可以將這段複製粘貼文本輸入其他總結模型,看看理解能力的差異(即使它甚至不是“長”文本!)。
✨ 主要特性
- 能夠對長文本進行總結,生成類似SparkNotes的各主題摘要。
- 在學術和敘述性文本上有較好的泛化能力。
- XL版本在人工評估中能生成更優質的摘要。
📦 安裝指南
安裝transformers
庫
pip install -U transformers
安裝bitsandbytes
和accelerate
庫(用於LLM.int8量化)
pip install -U transformers bitsandbytes accelerate
安裝textsum
包(可選)
pip install textsum
💻 使用示例
基礎用法
import torch
from transformers import pipeline
summarizer = pipeline(
"summarization",
"pszemraj/long-t5-tglobal-xl-16384-book-summary",
device=0 if torch.cuda.is_available() else -1,
)
long_text = "Here is a lot of text I don't want to read. Replace me"
result = summarizer(long_text)
print(result[0]["summary_text"])
高級用法
調整參數
在調用summarizer
時傳遞其他與波束搜索文本生成相關的參數,以獲得更高質量的結果。
LLM.int8量化
通過此PR,long-t5
模型現在支持LLM.int8量化。
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained(
"pszemraj/long-t5-tglobal-xl-16384-book-summary"
)
model = AutoModelForSeq2SeqLM.from_pretrained(
"pszemraj/long-t5-tglobal-xl-16384-book-summary",
load_in_8bit=True,
device_map="auto",
)
使用textsum
包
from textsum.summarize import Summarizer
summarizer = Summarizer(
model_name_or_path="pszemraj/long-t5-tglobal-xl-16384-book-summary"
)
long_string = "This is a long string of text that will be summarized."
out_str = summarizer.summarize_string(long_string)
print(f"summary: {out_str}")
📚 詳細文檔
預期用途和限制
雖然該模型似乎提高了事實一致性,但不要將總結視為萬無一失的,對於看起來奇怪的內容要進行檢查。特別是否定陳述(即模型說:“這個東西沒有[屬性]”,而實際上應該說“這個東西有很多[屬性]”)。你通常可以通過將特定陳述與周圍句子的含義進行比較來檢查。
訓練和評估數據
使用HuggingFace上的kmfoda/booksum
數據集,閱讀原始論文。
- 初始微調:出於內存原因,僅使用輸入標記為12288或更少且輸出標記為1024或更少的輸入文本(即,在訓練前丟棄更長的行)。經過快速分析,該數據集中12288 - 16384範圍內的總結佔少數。此外,初始訓練將訓練集和驗證集合並,並對它們進行整體訓練,以增加功能數據集的大小。因此,對驗證集結果要持保留態度;主要指標應該(始終)是測試集。
- 最終微調階段:使用標準的16384輸入/1024輸出約定,保留標準的輸入/輸出長度(並截斷較長的序列)。這似乎對損失/性能影響不大。
評估結果
將使用模型評估器計算並公佈官方結果。由於訓練方法的原因,驗證集上的性能看起來比測試集上的結果要好。該模型在評估集上取得以下結果:
-
eval_loss: 1.2756
-
eval_rouge1: 41.8013
-
eval_rouge2: 12.0895
-
eval_rougeL: 21.6007
-
eval_rougeLsum: 39.5382
-
eval_gen_len: 387.2945
-
eval_runtime: 13908.4995
-
eval_samples_per_second: 0.107
-
eval_steps_per_second: 0.027
***** predict/test metrics (initial) *****
predict_gen_len = 506.4368
predict_loss = 2.028
predict_rouge1 = 36.8815
predict_rouge2 = 8.0625
predict_rougeL = 17.6161
predict_rougeLsum = 34.9068
predict_runtime = 2:04:14.37
predict_samples = 1431
predict_samples_per_second = 0.192
predict_steps_per_second = 0.048
常見問題解答
如何在CPU上運行推理?
暫未提供相關詳細說明。
如何對非常長(30k + 標記)的文檔進行批量推理?
請參閱我的Hugging Face空間文檔總結代碼中的summarize.py
。你也可以使用相同的代碼將文檔拆分為4096等批次,並使用模型對它們進行迭代。這在CUDA內存有限的情況下很有用。
如何進一步微調模型?
請參閱使用腳本進行訓練和總結腳本。
是否有更簡單的運行方法?
可以使用textsum包,它提供了易於使用的接口,可將總結模型應用於任意長度的文本文檔。目前實現的接口包括Python API、CLI和可共享的演示應用程序。
訓練過程
更新
相關時,將在此處發佈此模型/模型卡的更新。該模型似乎已基本收斂;如果使用BookSum
數據集可以進行更新/改進,此倉庫將進行更新。
訓練超參數
訓練期間使用以下超參數:
- learning_rate: 0.0006
- train_batch_size: 1
- eval_batch_size: 1
- seed: 10350
- distributed_type: multi-GPU
- num_devices: 4
- gradient_accumulation_steps: 32
- total_train_batch_size: 128
- total_eval_batch_size: 4
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
- lr_scheduler_type: constant
- num_epochs: 1.0
框架版本
- Transformers 4.25.0.dev0
- Pytorch 1.13.0+cu117
- Datasets 2.6.1
- Tokenizers 0.13.1
📄 許可證
本項目使用以下許可證: