链接:http://keg.cs.tsinghua.edu.cn/jietang/publications/NIPS20-Ding-et-al-CogLTX.pdf
github:https://github.com/Sleepychord/CogLTX
Abstract
由于bert内存呈现二次增长和时间消耗,使得不能很好的处理长文本;一种自然的方式是对transformer进行操作,如对文本进行滑窗,attention的稀疏化处理(随机,固定窗口,二者结合)等。从人类理解长文本的角度出发,主要分为两部分,首先是关键句子的判断,然后基于关键句进行推理。
Introduction
BERT在问答,文本分类已经有很好的表现,但是bert一般是只能处理512的长度,一个明显的解决方式是sliding window,但是这种方法牺牲了长距离依赖,而transformer的变体很少在bert上获得成功。借鉴人类的做法,本文提出了CogLTX。
Framework
- 数据的处理
CogLTX 的这个基本假设是“对于大多数 NLP 任务,文本中的几个关键句子存储足够和必要的信息来完成任务”。假设长文本 中存在短文本 使得:
不同任务的,形式:
的分割:代码中的buff.py中的split_document_into_blocks是进行切割的操作。
长文本被划分为,,每个块的最大是B=63,当bert的长度是512的时候。是由一些块来组成的。
2. MemRecall
此模块的目标是抽取关键的。我们从图1可以看到对于QA,POS来说,question或者子序列作为query来检索关键的块,而对于分类任务是没有query的,这个相关性是隐含在训练数据中的,具体的实现就是删除某个块,看他的loss移除是否大于某一个阈值 :
3. Training
具体的算法步骤:
- 分块之后的数据首先是进行judge模块,对应4-9行
- reasoner模块,对应9-21行
17-21行会在self._intervention实现。
Experiment
修改代码中的迭代次数,最高的结果是85%
Text classification
Multi-label classification
利用Reuters数据进行了实验,修改了model.py中的ClassificationReasoner,一种是作者写的回归,另外一种是多标签分类:
Conclusion
CogLTX是将bert应用到长文本中,主要包含judge和reasoner两个模块。在阅读理解和文本分类中进行了实验,实验结果显示了此方法的有效性。