英文

long-t5-tglobal-base-16384 + BookSum

摘要长文本并获取类似SparkNotes的任意主题摘要!

  • 相当合理地概括学术和叙述性文本。
  • 关于ASR的一个简单示例/用例是 here
  • Colab中的示例笔记本(点击上面的图标)。

调皮的概念证明

以下是 infamous navy seals copypasta 的摘要:

叙述者告诉我们他已经从海军海豹突击队毕业,并参与了许多秘密突袭。他还是整个美国军队中最好的狙击手之一。他承诺在他们再次见面时会“用精确的方式消灭你们”。

目录

  • 模型描述
  • 在Python中的使用方法
  • 预期用途和限制
  • 训练和评估数据
  • 常见问题解答
    • 如何分批对超长(30k+标记)文档进行推理?
    • 如何进一步微调?
    • 是否有更简单的运行方法?
  • 训练过程
    • 更新:
    • 训练超参数
    • 框架版本
  • 引用信息

模型描述

在kmfoda/booksum数据集上对 google/long-t5-tglobal-base 进行微调的版本:

  • 从基本模型到V100/A100 GPU上的30+轮微调
  • 训练使用16384个字符输入/1024个最大输出

在这里阅读郭等人的论文: LongT5: Efficient Text-To-Text Transformer for Long Sequences

在Python中的使用方法

安装/更新transformers:pip install -U transformers

使用pipeline对文本进行摘要:

import torch
from transformers import pipeline

summarizer = pipeline(
    "summarization",
    "pszemraj/long-t5-tglobal-base-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时传入 other parameters related to beam search textgen 以获得更高质量的结果。

预期用途和限制

  • 当前检查点相当收敛,但如果可以进一步改进,将进行更新。
    • 与在相同数据集上训练的 LED-base (API gen参数相同)的性能进行比较。
  • 虽然该模型似乎改善了事实的一致性,但不要认为摘要是万无一失的,请检查看起来奇怪的内容。

训练和评估数据

在HuggingFace上的kmfoda/booksum数据集上,详情请阅读 the original paper here 。过长的LongT5标记摘要被过滤掉,以防止模型学习生成“部分”摘要。

常见问题解答

如何分批对超长(30k+标记)文档进行推理?

请参阅 the code for my hf space Document Summarization 中的summarize.py :)

您还可以使用相同的代码将文档拆分成4096等批次,然后使用模型运行这些批次。这在CUDA内存有限的情况下非常有用。

如何进一步微调?

请参阅 train with a script the summarization scripts

此模型最初在Google Colab上使用 longformer training notebook 的大幅修改版本进行调优。您可以尝试这种可替代的路线,以便在不使用命令行的情况下微调模型。

是否有更简单的运行方法?

出于这个原因,我创建了一个名为 textsum 的Python包工具。您可以使用它加载模型并在几行代码中摘要事物。

pip install textsum

在Python中使用此模型,请使用textsum:

from textsum.summarize import Summarizer

summarizer = Summarizer(
    model_name_or_path="pszemraj/long-t5-tglobal-base-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}")

该包提供了用于将摘要模型应用于任意长度的文本文档的易于使用的接口。当前实现的接口包括Python API、CLI和可共享的演示应用程序。

有关详细信息、解释和文档,请参阅README(上面的链接)或 wiki

训练过程

更新:

  • 2022年7月22日:更新到相当收敛的检查点
  • 2022年7月3日:添加了一个具有数轮额外常规训练的新版本,更具性能

训练超参数

注意:此模型的早期检查点是在训练过程中使用“较小”的数据集子集进行训练的,因为该数据集被筛选出1024个字符的摘要。随后对其进行了调整,变为1024个标记,然后进行了10多个轮次的进一步训练。

在最近一次训练中使用了以下超参数*:

  • 学习率:0.0005
  • 训练批量大小:1
  • 评估批量大小:1
  • 种子:42
  • 分布式类型:多GPU
  • 梯度累积步数:128
  • 总训练批次大小:128
  • 优化器:Adam,beta=(0.9,0.999),epsilon=1e-08
  • 学习率调度程序类型:余弦
  • 学习率调度程序预热比例:0.01
  • 轮次数:2

* 之前的训练会话使用了类似的参数;由于训练时间较长,需要多个会话。

框架版本

  • Transformers 4.20.1
  • Pytorch 1.10.0+cu113
  • Datasets 2.3.2
  • Tokenizers 0.12.1

引用信息

如果您在工作中发现pszemraj/long-t5-tglobal-base-16384-book-summary对您有用,请考虑引用此模型:)

@misc {peter_szemraj_2022,
    author       = { {Peter Szemraj} },
    title        = { long-t5-tglobal-base-16384-book-summary (Revision 4b12bce) },
    year         = 2022,
    url          = { https://huggingface.co/pszemraj/long-t5-tglobal-base-16384-book-summary },
    doi          = { 10.57967/hf/0100 },
    publisher    = { Hugging Face }
}