长文本模型调研
论文阅读笔记:A Survey on long text modeling with transformers
intro
早期工作:
- 早期工作主要基于RNN、LSTM、GRU->RNN局限性:无法处理长文本中存在的远程依赖关系
近期工作:基于transformer的模型、特别是PLM
- 但是涉及到长文本任务中使用的PLM,大部分工作只是采用相同的方法处理较短的文本,没有考虑到长文本的差异性
目前长文本模型面临的挑战:
-
现有的PLMs对每个输入序列施加长度限制->对长文本进行预处理以适应现有PLM
-
计算效率问题:随着文本长度的增加,对文本进行建模所需的时间和内存消耗呈二次增长
-
长文本包含更多特殊的特征:长文本通常是特定领域的文章,具有复杂的层次结构,所以长文本对于long-term dependency、句子关系、篇章结构的建模需求更高
A formal definition of long text modeling
-
input:将长文本看作一串token序列X = (x1,…,xn)(区别于短文本的情况,可能会有数以千计的tokens,所以对于常规transformer模型来说要编码这么长的文本是很有挑战性的工作)
-
function:因此方法之一是通过预处理函数g(·)将冗长的输入序列转换为较短的序列或者是片段的集合,此外还需要把长文档在建模过程中包含的特殊特征C(一般包括long-term dependency、discourse structure、inter-sentence relations)放入模型一同训练
-
transformer architecture:M ,用于从输入数据捕捉文本信息,并在输入X与输出Y之间进行语义关系映射建模
故长文本模型建模的一般形式为:
Y
=
f
(
g
(
X
)
;
C
,
M
)
Y = f(g(X);C,M)
Y=f(g(X);C,M)
根据输出Y的形式,可将长文本建模任务分为大致两类:
输出Y是一个序列。此任务一般是从长文本中捕捉关键语义信息去生成目标序列,大致有两种实现方法:
- extraction method:用encoder对文本进行编码,随后基于token-level或sentence-level类似问答系统那样去生成输出
- generation method:基于encoder-decoder框架从头输出生成文本,类似文本摘要
输出Y是一个标签。此任务一般来说需要捕获整个文档的关键语言信息来对文本进行准确分类
- 输入X被压缩为一个低维向量,然后将此文档级特征送入分类器输出分类or把该特征与其他文档进行相似性比较。典型应用包括文本分类与文本匹配
对长输入文本的预处理方法
现有Transformer-Based PLMs基本都存在一个能处理的序列长度上限,为了能让长文本顺利通过此PLMs,都需要将输入文本分割为多个部分。一般来说对长文本的预处理方法主要有以下三种:
-
Text truncation:在预定义的最大长度内,将长文本截断成一个相对简短的序列。在实践中,这种策略可以使得文本能被现成的预训练模型处理。但是,文本截断受源文本的前导偏差(lead bias)影响显著,当关键信息被包含在截断长度的片段中时,用截断文本微调后的PLM可作为一个强大而有效的baseline,但是对于信息均匀分布的长文本来说,这样的策略会导致大部分的信息丢失导致性能下降
-
Text chunking:基于局部性原理(长文本中位置相近的文本具有相似的语义)能识别出长文本语义相似的片段进行分组。对于给定的长文本,并不把它看作是一个完整的序列,而是将其分块成一个片段序列,每个小片段的tokens长度都在预训练模型的最大长度之内,小片段的集合等同于原始输入。之后PLM作用于每个chunk来获取局部语义信息,随后再将信息进行整合
-
Designing Chunking Mechanism:分组策略受下游任务的影响显著。
- 一般的分组方法是不重叠地将长文本分割成不重叠的多个固定长度的子片段,但这会导致上下文碎片化&不完整答案。
- 一个较为直接的解决办法是允许分段重叠。
- 也有工作采用了强化学习策略来进行灵活分段。
- 在对长篇文本和特定领域文章进行切块时,也得将其篇章结构纳入考量
-
整合分段信息:一般来说下游任务不同,对分组的整合策略也有所差异
使用max-pooling或mean-pooling来整合每个片段的整体信息([CLS])以获取长文本的整体特征。对应前文提到的两种策略(extraction&generation)
-
extraction需要从每个组块中提取目标序列,随后通过序列拼接或者是答案投票来获得最终输出。
-
generation有很多方式去实现对每个片段的上下文信息进行编码,最简单的方法是对每个片段生成的独立文本进行拼接,这可能会造成重复问题。另外也有方法通过在编码器中编码局部上下文,再在解码器中处理全局依赖,并跨块使用所有tokens。还有方法基于单独页面进行局部预测,并结合解码器区域的隐藏状态进行预测
-
-
局限性:
- PLMs的感受野被限制在一个片段内,导致跨片段的long-term dependency被打破
- 从每个单独片段中提取答案时,很难通过比较每个片段答案的分数来作为最佳结果输出(主要因为每个答案都来自独立的片段,他们之间并无优劣之分)
-
-
Text selection:文本选择的前提条件是基于长文本的显著信息只占据了文章长度的很小一部分,所以可以用少数的重要序列来代表整个文档。一般主流方法是设置一个two-stage pipeline,识别长文本的相关部分并将其整合为一个序列,再用PLM去处理这个concatenating sequence.这个pipeline可以把输入文本表示为一系列的片段,然后选取top k 个相关度最强的片段并由检索器g(·)进行拼接
- 检索器设计:
- 使用无监督方法增强简单截断的效果
- 使用有监督方法来达到额外的性能提升(如使用分层RNN来选取关键句、PLM+chunk、MemRecall)
- 检索器训练:
- 一般来说为了平衡两阶段训练,较为简单的方法是把两个阶段的两个模块单独训练。从有监督和无监督的角度出发,检索器的训练有多种方法。
- 这种分离的两阶段训练可能导致两个模块之间的差异显著,为了解决这个问题,可以使用强化学习来对整个模型进行优化,也可以通过在解码阶段为每个片段分配一个动态权重,基于一致性损失来弥补两阶段差异
- 弊端:所提取文本的质量严重依赖于片段的质量
- 检索器设计:
针对长文本的Transformer架构设计
受计算资源与自注意力模块的二次复杂度的限制,Transformer-based PLMs在长文本处理上的表现并不是很好,所以需要一种新的Transfomer架构应用于长文本,先前也有一些研究从降低transformer的计算效率出发来进行优化,但也有transformer的设计能有效拓展其上下文长度变体来实现对长文本的建模。
Efficient Transformers:
Fixed attention patterns:基于语言的局部性原则,可以使用固定模式来对注意力进行限制,每个token只能根据限制策略关注到少数几个tokens,而非整个序列。
- block-wise attention:将输入序列划分为不重叠块,每个token只能在自己的块内做注意力
- 局部注意力:使用滑窗将query token限制在了一个固定窗口内,将复杂度降低到了O(n)
- dilated attention mechanism:扩张注意力机制,通过在窗口之间设置间隙的方法来扩大感受野
- random attention:一个token与随机的一系列其他tokens做注意力,以增强模型对非局部相互作用的学习能力
- global attention:选取的tokens可以与序列中的所有tokens进行交互(瞬态全局注意力)
Learnable attention pattens:基于文本的可学习注意力模式在捕获全局和局部关系上也很有用,其核心思想是学习根据输入内容为不同的篮子分配tokens。每个query token只能关注同一个篮子中的键。(Reformer、Routing Transformer(using K-means)、Sparse Sinkhorn attention(meta sorting))
Attention Approximation:通过近似地将查询矩阵与密钥矩阵相乘来降低计算开销。此方法主要基于kernel-based approximation,并把softmax用核特征图的线性点积来代替
Efficient Encoder-Decoder Attention:这部分的工作主要是从注意力头冗余的角度出发来进行优化
Recurrent Transformers:
该方法仍保留了全局注意力,在text chunking的基础上,并非独立地处理每个切片,而是把前一个切片的历史信息进行缓存,当后续片段输入模型时,基于缓存的历史信息来缓解上下文碎片问题。
关于“历史信息”:
-
Transformer-XL:把前一个片段的隐藏状态与当前片段级联作为下一层输入
-
Compressive Transformer:将过去特征浓缩成更粗粒度的表示
由于自注意力的单向性,这两种方法对内存的需求都很大
- Memformer:设计了多槽位的存储系统来存储历史信息。提出了记忆交叉注意力和记忆槽注意力来动态地检索和更新记忆
- ERNIE-Doc:通过同层递归增强循环机制,即将当前段和上一段的隐藏状态在下一层的串联传递到下一层,在保持细粒度表示的同时进一步扩展上下文长度。
长文本预训练
现有的PLMs对都是使用短文本进行训练,由于长文本与短文本的特征差异较大,且直接从长文本进行预训练代价较为高昂,所以需要探索针对长文本的预训练方式
-
基于蒙版语言建模(MLM),如Longformer、Big Bird等模型。MLM主要关注token-level语义
-
有方法(HIBERT)通过在长文档中随机掩盖整个句子结合句子预测任务来捕捉句子间关系
-
通过构造GSG(间隙句子生成)任务来对长文本进行建模
-
引入文档感知的片段重排序目标对置换后的片段进行重组
如何增强长文本特殊特征
long-term dependency
-
增强局部注意力:
- 可以通过在局部注意力的基础上补充全局注意力来增强long-term dependency
- Top Down Transformer:将段级Transformer层叠加在具有局部注意力的Transformer层之上,得到段级表示,再对段级输出做交叉注意力来增强tokens的表征能力
- SAPADE:为长文本设计了一个状态空间模型来捕捉long-term dependency,再在此基础上做局部自注意力
-
跨段交互建模:
通过添加额外的模块来实现跨网段的单向或双向信息流
- RCM&RoBERT:把每个片段编码为低维向量,通过循环函数(LSTM、门控函数)在片段之间传递信息
- Recurrent Transformer:对tranformer架构进行修改,将粗粒度与细粒度记忆同时传输到当前窗口
使用能保留过去片段信息的记忆网络
- SSN-DM:通过动态记忆模块提取关键信息,再使用图网络把关键信息与当前片段结合
- CGSN:使用分层全局图来保存及动态更新多层级历史信息
通过将片段级表示堆叠成一个序列,再由一个堆叠在分段transformer顶部或者是插入在每个transformer层的跨段编码器来实现跨窗口的双向交互建模
- SUMMN:多级拆分-再汇总
Inter-sentence Relations
虽然对于现有的transformer模型来说,使用了一个special token [CLS]来表示句子特征,但是这些transformer模型基本都是通过预训练来学习token级别的表示,并不能很好地捕获句间关系
-
基于层次的模型:长文本可自上而下地分层为段落、句子、tokens,可利用这种分层信息来获取句间关系,所以分层级的transformer应运而生。
- 将句际Transformer层堆叠在现成的预训练Transformer编码器上
- 对于transformer encoder-decoder模块,也有方法通过增加交叉注意力来关注语句级的Transformer编码的隐空间状态
-
基于图结构的模型:这种方法通过将长文档建模为图结构,语义单元是节点,复杂关系为边,这样下游任务就转换成了节点分类问题
- 将transformer用做encoder来初始化节点隐藏状态,并在句子层面构建图。再利用一个“lantent topic models"对文档进行多种topic抽取,再把这些topic 表征通过边与句子相连
- 利用具有层次结构的异构图利用单词与篇章级别信息丰富节点表示。利用图神经网络通过聚合邻居的信息来更新节点的隐藏状态,以学习各种跨句关系,并将这些隐藏状态输入到分类器中进行排序或预测置信度分数。
Discourse Structure
-
explicity design models:通过显式设计模型来注入篇章结构信息
对于一篇科学论文,一个完整的篇章结构一般由若干小节(每个小节由若干句子组成)组成,每个小节关注不同的语义主体。基于这个性质,有研究通过关注段落主体,直接显式地对这样的层级结构进行建模以捕捉篇章结构信息
-
Implicitly enhancing models:
通过隐式应用上述性质,有工作通过建立一个额外的分割任务来预测部分的边界来提高长文本归纳的性能,基于这样的部分分割利用语篇结构的归纳偏向性把每个区段将被视为一个单独的区段来提高对模型对篇章结构的归纳能力
长文本建模的几个主要下游应用
文本摘要:
文本摘要是将源文本浓缩成一个简短的文本,同时保留重要细节的应用
存在的主要问题:容易出现内容冗余
长文本问答系统:
长文本问答旨在理解源文档并提取或给定问题的答案
-
该任务的大部分工作遵循先检索后阅读的过程,即首先选择相关证据,然后在简短证据上应用PLM提取跨度或生成答案。
-
对于多跳QA任务,推理过程跨越多篇文章,这些文章串接成一篇长文档。然后,多步推理根据问题迭代检索并更新答案
长文本分类:
文本分类旨在将文本划分为若干预先定义的类别(情感分析、自然语言推理、新闻分类)
-
短文本的分类一般基于PLMs将特殊令牌([CLS])嵌入作为文档表示,并把它送入softmax预测分类标签
-
对于长文本,目前有一个较为有竞争力的baseline是对长文本进行截断后微调BERT来实现
-
除此之外,也有方法通过对更多的tokens进行预处理,使用了高效的注意力、组块和选择机制来增强语义建模。
不过也有工作对不同模型进行了系统评估,认为复杂模型在不同数据集上的表现并不一致,因此需要性能稳健的先进模型。
文本匹配:
文本匹配旨在根据源文本和目标文本之间的相似度来估计源文本和目标文本之间的语义关系(文章推荐、引文推荐)
- 目前有工作基于一种双塔Siamese网络结构来计算两个文档之间的相似度
- 也有方法类似长文本分类将长文本切断提取信息,再通过transformer层将不同段的信息进行聚合
总结
一些局限性:
缺乏针对长文本的高效建模:目前针对长文本的建模有很多不同变体的建模,但是这些方法的性能普遍低于完全自注意力
长文本的PLMs:大多采用MLM
可以使用数据增强等操作来弥补预训练与微调之间的差距
大语言模型(Large Language Models, LLMs)
大语言模型
目前针对LLMs模型的统计:(来源知乎)
1、绝大部分都是Decoder-only的模型结构(GPT-style:decoder-only;T5-style:encoder-decoder)
2、绝大部分都没开源
为什么绝大部分都是Decoder-only:
粘贴自论文Unifying Language Learning Paradigms
从归纳偏置的角度来说,Encoder - Decoder模型用一组不同的参数独立地处理输入和目标。这是稀疏性的一种形式,对于不同的tokens使用不同的参数集。Encoder - Decoder模型还具有连接input tokens和target tokens的交叉注意力组件。
Decoder-only对输入和目标进行级联处理。因此,随着输入/目标在网络中的传播,输入和目标的表示是逐层同时构建的。
Encoder - Decoder模型中的解码器一般只关注完全处理的编码器输入。
且Encoder - Decoder模型的显著特点是,当计算匹配时,Encoder - Decoder模型一般是仅有解码器的模型的2倍参数。
效率高,参数量低;encoder的双向注意力会存在低秩问题,会削弱模型表达能力;encoder对于生成式任务来说引入双向注意力并没有什么好处