Bert 如何解决长文本问题?

举例: 在阅读理解问题中,article 常常长达1000+, 而Bert 对于这个量级的表示并不支持, 诸位有没有什么好的解决办法, 除了分段来做?或者提一提如何分段来做。感谢诸位大佬。

-------------------------------------------------

这是个好问题,可以看下Amazon今年EMNLP的这篇文章:Multi-passage BERT

主要思路是global norm + passage rank + sliding window

实验做的很扎实,从ablation study看这几个trick都很有用。

如果不想切passages就上XLNet吧。



作者:斤木
链接:https://www.zhihu.com/question/327450789/answer/867657576
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

----------------------------------------------------

作者:猪猪侠和狗子
链接:https://www.zhihu.com/question/327450789/answer/1024153978
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

这个问题现在的解决方法是用Sliding Window(划窗),主要见于诸阅读理解任务(如Stanford的SQuAD)。Sliding Window即把文档分成有重叠的若干段,然后每一段都当作独立的文档送入BERT进行处理。最后再对于这些独立文档得到的结果进行整合。

Sliding Window可以只用在Training中。因为Test之时不需要Back Propagation,亦不需要large batchsize,因而总有手段将长文本塞进显存中(如torch.nograd, batchsize=1)。

至于具体实现可以参考原始BERT的run_squad:https://github.com/google-research/bert/blob/master/run_squad.py

PyTorch的版本暂时只找到这个半成品,基本上是对着tf的实现逐句翻译过来的:https://github.com/huggingface/transformers/blob/master/templates/adding_a_new_example_script/utils_xxx.py

P.S.

这个问题现只问及对于长文本(long-text)的处理。此外还有一个常见的问题是多文档(multi-document,案例如各种open domain QA),现在的主要思路是Retrieval + BERT。即先用retrieval选一些相关的document,之后当作阅读理解的问题来做。

详尽内容可以参考一下HotpotQA Leaderboard的前13名:HotpotQA Homepage。此外最近Google的新作的REALM也值得一观,其所展现的End-to-End暴力美学实在令人叹为观止。有钱就是好啊。

发布了460 篇原创文章 · 获赞 696 · 访问量 146万+

猜你喜欢

转载自blog.csdn.net/weixin_42137700/article/details/104388097