如何使用Bert进行长文本分类?

时间:2019-10-31 03:34:11

标签: nlp text-classification bert-language-model

我们知道bert的令牌最大长度限制为512,因此,如果acticle的长度远大于512,例如文本中的10000个令牌 怎样使用bert?

9 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:6)

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

对于长文档分析有新的研究。正如您要求的Bert一样,ALLEN NLP(https://arxiv.org/abs/2004.05150)最近也提供了类似的预训练变压器“ Longform”。查看此链接以获取论文。

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

答案 2 :(得分:2)

您基本上有三个选择:

  1. 您删除了较长的文本,仅使用了前512个令牌。原始的BERT实现(可能还有其他实现)会自动截断更长的序列。在大多数情况下,此选项就足够了。
  2. 您可以将文本拆分为多个子文本,对每个子文本进行分类,然后将结果重新组合在一起(例如,选择大多数子文本中已预测的类)。此选项显然更昂贵。
  3. 您甚至可以按照this discussion中的描述,将每个子文本的输出令牌(如选项2中所述)馈送到另一个网络(但您将无法进行微调)。

我建议尝试选项1,但前提是该选项不足以考虑其他选项。

答案 3 :(得分:2)

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

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

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

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

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

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

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

答案 4 :(得分:0)

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

他们的生成模型产生了1024个令牌的输出,他们希望将BERT用于人与机器的世代。他们通过初始化512个以上的嵌入并对它们进行微调以对BERT进行调整,从而扩展了BERT使用的序列长度。

答案 5 :(得分:0)

主要有两种方法:

  • 总共串联“短” 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/

您可以在那里查看所有方法的概述。

答案 6 :(得分:0)

您可以从HuggingFace Transformers库中利用该库,该库包括以下适用于长文本(超过512个令牌)的Transformers列表:

  • Reformer:将Transformer的建模能力与可以在长序列上高效执行的体系结构相结合。
  • Longformer:具有一种注意力机制,该机制可随序列长度线性缩放,从而使处理成千上万个令牌或更长令牌的文档变得容易。

最近提出的另外八种有效的Transformer模型包括:稀疏变压器(Child等,2019),Linformer(Wang等,2020),Sinkhorn变压器(Tay等,2020b),Performers(Choromanski等, 2020b),合成器(Tay等,2020a),线性变压器(Katharopoulos等,2020)和BigBird(Zaheeret等,2020)。

Google Research和DeepMind作者的paper试图根据“远程竞技场”的“汇总指标”对这些变形金刚进行比较:

Performance, speed, and memory footprint of the Transformers

他们还建议, 与分类程序相比,Longformers的性能要优于Reformer

答案 7 :(得分:0)

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

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

here

答案 8 :(得分:0)

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

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

enter image description here

LTR 方法从左到右以块的形式处理输入,适用于自回归应用程序。稀疏方法主要通过避免完全二次注意力将计算顺序降低到 O(n) 矩阵计算。