【问题标题】:how to use bert for long sentences? [duplicate]如何在长句中使用bert? [复制]
【发布时间】:2020-12-19 14:09:01
【问题描述】:
我正在尝试将给定文本分类为新闻、点击诱饵或其他。我的训练课文很长。distribution of lengths is shown here.
现在,问题是我应该修剪中间的文本并使其长度为 512 个标记吗?但是,我什至有大约 10,000 字的文档,所以我不会因为截断而失去要点吗?或者,我应该将我的文本拆分为 512 长度的子文本。如果是这样,那么一个文本的子文本可能与另一个文本的子文本相似,但标签会不同。它不会变成嘈杂的数据吗?或者,我应该在这里使用双向 LSTM 并填充到 max_len 吗?
【问题讨论】:
标签:
deep-learning
nlp
bert-language-model
【解决方案1】:
您的类似问题的答案可以在论文here中找到。
如果您将文本分类为新闻或点击诱饵,为什么您认为同一文档的各个块会有不同的标签?您可以将文本分块并遵循如何Fine-Tune BERT for Text Classification? 中提出的截断方法的想法。作者表明,头+尾截断可提供高精度。感谢Github页面和文档,我多次使用它并获得了很好的效果。
您可以选择带有标志的截断方法 --trunc_medium 有以下选项:
- -2 表示仅头部(保留前 512 个标记),
- -1 表示仅尾部(保留最后 512 个标记),
- 0 表示 head-half + tail-half(例如:head256+tail256),
- 其他自然数 k 表示 head-k + tail-rest(例如:head-k + tail-(512-k))。
然后,您可以将块的结果汇集起来,为您拥有的长文本创建汇集嵌入。
在这里,我还将继续讨论使用 BERT 对 Big BIRD 进行长文本分类的最先进方法(请参阅 article)。来自 Google 的研究人员建立在 Longformers 和 Extended Transformers Construction 的想法之上。基本上,他们提出将 Longformers 和 Randomized Attention 的想法结合起来,将对序列长度的二次依赖性降低到线性。您甚至可以尝试 10000 字的文本。然而,这种方法很有趣,它需要具有更多层的架构。
请检查stackoverflow question。