51

我们知道 BERT 的最大长度限制为 tokens = 512,那么如果一篇文章的长度远大于 512,比如 text 中有 10000 个 token,那么如何使用 BERT?

4

9 回答 9

32

你基本上有三个选择:

  1. 您将较长的文本剪掉,只使用前 512 个令牌。最初的 BERT 实现(可能还有其他实现)会自动截断较长的序列。对于大多数情况,此选项就足够了。
  2. 您可以将文本拆分为多个子文本,对每个子文本进行分类并将结果组合在一起(例如,选择为大多数子文本预测的类)。这个选项显然更昂贵。
  3. 您甚至可以将每个潜文本的输出标记(如选项 2 中)提供给另一个网络(但您将无法微调),如本讨论中所述。

我建议尝试选项 1,并且仅当这还不足以考虑其他选项时。

于 2019-10-31T12:10:49.617 回答
19

本文比较了几种不同的策略:How to Fine-Tune BERT for Text Classification?. 在 IMDb 电影评论数据集上,他们实际上发现剪掉文本的中间(而不是截断开头或结尾)效果最好!它甚至优于更复杂的“分层”方法,包括将文章分成块然后重新组合结果。

作为另一个轶事,我在这里将 BERT 应用于 Wikipedia Personal Attacks 数据集,发现简单的截断效果很好,以至于我没有动力尝试其他方法 :)

于 2020-01-16T22:26:47.543 回答
10

除了对数据进行分块并将其传递给 BERT 之外,还可以检查以下新方法。

长文档分析有新的研究。正如您向 Bert 询问的那样,最近 ALLEN NLP ( https://arxiv.org/abs/2004.05150 ) 提供了一个类似的预训练变压器Longformer。查看此链接以获取该论文。

相关工作部分还提到了一些以前关于长序列的工作。谷歌他们。我建议至少通过 Transformer XL ( https://arxiv.org/abs/1901.02860 )。据我所知,它是长序列的初始模型之一,因此在进入“Longformers”之前将其用作基础会很好。

于 2020-04-24T09:13:25.613 回答
8

您可以利用 HuggingFace Transformers 库,其中包括以下适用于长文本(超过 512 个标记)的 Transformer 列表:

  • Reformer:将 Transformer 的建模能力与可以在长序列上有效执行的架构相结合。
  • Longformer:具有随序列长度线性缩放的注意力机制,可以轻松处理数千个或更长的文档。

最近提出的其他八种高效 Transformer 模型包括 Sparse Transformers (Child et al.,2019)、Linformer (Wang et al., 2020)、Sinkhorn Transformers (Tay et al., 2020b)、Performers (Choromanski et al., 2020b)、合成器(Tay 等人,2020a)、线性变压器(Katharopoulos 等人,2020)和 BigBird(Zaheeret 等人,2020)。

来自 Google Research 和 DeepMind 的作者的论文试图根据 Long-Range Arena “聚合指标”对这些 Transformer 进行比较:

Transformers 的性能、速度和内存占用

他们还表明,在分类任务方面,Longformer 的性能优于 Reformer

于 2020-11-21T21:27:09.930 回答
5

我最近(2021 年 4 月)发表了一篇关于此主题的论文,您可以在 arXiv ( https://arxiv.org/abs/2104.07225 ) 上找到该论文。

在那里,表 1 允许回顾以前解决问题的方法,整个手稿是关于长文本分类并提出一种称为文本指南的新方法。这种新方法声称可以提高论文( https://arxiv.org/abs/1905.05583 )中使用的幼稚和半幼稚文本选择方法的性能,该方法在该问题的先前答案之一中提到。

关于您的选择的长话短说:

  1. 计算成本低:使用幼稚/半幼稚的方法来选择原始文本实例的一部分。示例包括选择前 n 个标记,或从原始文本实例的开头和结尾编译一个新的文本实例。

  2. 中高计算成本:使用最近的转换器模型(如 Longformer),其令牌限制为 4096 而不是 512。在某些情况下,这将允许覆盖整个文本实例,修改后的注意力机制降低了计算成本,并且

  3. 高计算成本:将文本实例划分为适合 BERT 等模型的块,每个实例的“标准”令牌限制为 512 个,分别在每个部分上部署模型,加入生成的向量表示。

现在,在我最近发表的论文中,提出了一种称为文本指南的新方法。文本指南是一种文本选择方法,与幼稚或半幼稚的截断方法相比,它可以提高性能。作为一种文本选择方法,Text Guide 不会干扰语言模型,因此它可用于提高具有“标准”令牌限制(对于转换器模型为 512)或“扩展”限制(例如 4096)的模型的性能对于 Longformer 模型)。总结:文本指南是一种低计算成本的方法,它比朴素和半朴素的截断方法提高了性能。如果文本实例超出了为长文本分类(如 Longformer(4096 个标记)而专门开发的模型的限制),它也可以提高它们的性能。

于 2021-04-16T10:24:13.223 回答
4

主要有两种方法:

  • 完全连接“短”BERT(最多包含 512 个令牌)
  • 构建真正的长 BERT(CogLTX、Blockwise BERT、Longformer、Big Bird)

我在这篇文章中恢复了一些典型的 BERT 长文本论文:https ://lethienhoablog.wordpress.com/2020/11/19/paper-dissected-and-recap-4-which-bert-for-long-text/

您可以在那里概览所有方法。

于 2020-11-19T17:50:31.597 回答
1

防御神经假新闻的论文中使用了一种方法 ( https://arxiv.org/abs/1905.12616 )

他们的生成模型产生了 1024 个令牌的输出,他们希望将 BERT 用于人类和机器生成。他们扩展了 BERT 使用的序列长度,只需初始化 512 个嵌入并在他们在数据集上微调 BERT 的同时训练它们。

于 2020-08-29T11:15:57.403 回答
0

一个相对简单的方法是改变输入。例如,您可以截断输入或单独分类输入的多个部分并聚合结果。但是,您可能会以这种方式丢失一些有用的信息。

在长文本上应用 Bert 的主要障碍是注意力需要O(n^2)n输入标记进行操作。一些较新的方法试图巧妙地改变 Bert 的架构并使其兼容更长的文本。例如,Longformer 将注意力范围限制为一个固定值,因此每个标记只与一组附近的标记相关。该表(Longformer 2020,Iz Beltagy 等人)展示了一组基于注意力的长文本分类模型:

在此处输入图像描述

LTR 方法从左到右按块处理输入,适用于自回归应用程序。稀疏方法主要O(n)通过避免完整的二次注意矩阵计算来减少计算顺序。

于 2021-06-13T15:36:27.987 回答
0

在将 BERT 模型下载到内核中时,您可以在配置中使用 max_position_embeddings 参数。使用此参数,您可以选择 512、1024、2048 作为最大序列长度

max_position_embeddings (int, optional, defaults to 512) – 该模型可能使用的最大序列长度。通常将此设置为较大的值以防万一(例如,512 或 1024 或 2048)。

https://huggingface.co/transformers/model_doc/bert.html

于 2021-06-06T14:04:01.667 回答