专栏介绍:本栏目为 “2021秋季中国科学院大学胡玥老师的自然语言处理” 课程记录,不仅仅是课程笔记噢~ 如果感兴趣的话,就和我一起入门NLP吧🥰
1.序列生成问题概述
序列生成任务是NLP中的常见的重要任务之一,应用非常广泛,例如机器翻译‚自动文摘、机器阅读理解、对话生成 、自动生成字幕等多项任务。
- 序列:包含一系列标识符的有序列表,表示为y=(y1,y2…yT) yt ϵ v 其中,yt是离散的值, V代表输出序列标识词典,Y可以是任意长序列 ,T代表序列长度。
- 自回归序列生成: 用历史序列信息来预测序列中的下一个值的生成
- 条件序列生成:根据输入的内容X生成一串特定的序列Y
- 🍓本节讨论范围:X和Y均为文本序列 的有条件序列生成模型
深度学习中建模序列生成问题方法:
- 构建一个联合的神经网络,以端到端的方式将一个序列化数据映射成另一个序列化数据。简称 Sequence-toSequence Generation (Seq2Seq)模型。主流的Seq2Seq模型通常基于Encoder-Decoder框架实现。
🍓Seq2Seq模型:
- Encoder:将输入序列进行编码形成后继处理需要的输入表示形式
- 生成式模型Decoder:根据编码端形成的输入表示和先前时刻产生成的输出tokens,生成当前输出token ( 编码端和解码端有各自词表,二者可相同或不同 。解码端需处理集外词OOV,一般用UNK 代替)
- 选择式模型Decoder:根据编码端形成的输入表示和先前时刻产生成的输出tokens,从输入端选择一个token作为输出 token ( 解码端和编码端词表相同)
- 选择-生成式模型Decoder:根据编码端形成的输入表示和先前时刻产生成的输出tokens,生成或从输入端选择当前输出token ( 编码端和解码端有各自词表,二者可相同或不同 。解码端需处理集外词OOV,一般用UNK 代替,该方法可有效的处理输出端的OOV 问题)
Encoder和Decoder具体使用什么模型都是由研究者自己确定。比如:CNN/RNN/BiRNN/GRU/LSTM/transformer等。很明显本次实验机器翻译任务是生成式decoder。
2.生成式-序列生成模型
基于RNN结构生成模型
这种模型结构会存在曝光(Exposure Bias)偏差问题(会在本篇博客的最后一小节解释)
RNN+Attention 架构生成模型
对于普通的RNN生成模型对不同的输出 Yi 中间语义表示C是相同的,实际应该:在翻译“杰瑞”的时候,体现出英文单词对于翻译当前中文单词不同的影响程度,比如(Tom,0.3)(Chase,0.2) (Jerry,0.5)。于是可以加入attention机制来解决这个问题。
例如:◼ BiLSTM + Attention 模型结构
- 编码器采用双向RNN,解码器采用单向RNN
- 输入:X(源语句子)
- 输出:Y(目标语句子)
🍑Transformer 架构生成模型
这一部分内容较多,并且很重要,可以单独看这篇博客:【一起入门NLP】中科院自然语言处理第14课-Transfomer以及Transfomer架构生成模型
3.选择式-序列生成模型
🍑编码-解码架构模型的问题:
- 在预测输出端词表的大小是固定的,输出 toke 是输出词表中概率最大的。这样就无法解决输出词表需按输入情况动态变化的问题,如凸包问题,旅行商问题。
指针网络
模型结构
- 输入:X序列 (x1, x2, x3, x4)
- 输出:从输入序列中选出的序列( x1,x4,x2,x1, )
指针网络应用
- 指针网络在 NLP 领域有广泛的用途,如文本摘要,阅读理解等从输入序列选输出序列的一系列复制类型的任务。
- 指针网络也适合用于解决OOV(out of vocabulary)类问题
4.选择-生成式序列生成模型
🍑指针网络的问题
- 输出直接从输入中选择,输出词表与输入词表相同,无法处理输出需要产生输出词表以外词的情况。
- 改进思路:将指针网和编码解码生成网结合,构建可生成可选择的指针生成器网络
指针生成器网络(Pointer-generator network)
- 基本思想:将编码-解码+注意力模型和指针网结合,生成既可产生也可选择的输出。
- 特点:Yi 既可以从输入端X 的标识词典中产生也可以从输出端Y 的标识词典中产生,这样既可以生成高质量的摘要,也可以处理原文中的未登录词(OOV)。
模型结构
- Sequence-to-sequence attentional model
- pointer-generator network
- Coverage mechanism
🍑Coverage mechanism
- 目的就是希望各个时刻attention分布不同 ,避免重复
- 方法:引入一个coverage向量 Ct, 其值为当前解码时刻 t 之前的所有注意力分布之和。
- 每次在计算attention时,需要考虑之前的attention分布。
coverage向量表示过往时刻的所有注意力机制的累加,其告诉模型,输入中哪些部分是已经被注意力关注过的,哪些没有。为了使得模型不过多地关注已经关注过的区域,所以将coverge向量作为下一步的注意力的构成部分,这样下一步生成的注意力分布就会有意识地减少已经关注过的区域的概率。
拷贝网络( Copy-Network )
🍑传统 seq2seq存在的问题:
- 高度的依赖词的的表征,当遇到OOV(Outof-vocabulary)会出现表达不准确。而在实际应用中,有些场合仅仅需对该生僻词逐字保留即可。
如:对话
hello, my name is Tony Jebara.
hi,Tony Jebara.
Copy-Net 通过 Copy mechanism可以将输入序列中的词拷贝到输出序列中,较好的处理 OOV 问题 (测试-文本摘要)
5.序列生成模型评价指标
正确率 (precision, P)
- 测试结果中正确切分的个数占系统所有输出结果的比例。P=n/N
召回率(Recall ratio, R)
- 测试结果中正确结果的个数占标准答案总数的比例。R=n/M
🍑BLEU
BLEU(Bilingual Evaluation Understudy)是衡量模型生成序列与参考序列之间的N元词组(N-Gram)的重合度,最早用来评价机器翻译模型的质量,目前也广泛应用在各种序列生成任务中。
1. 基本思想
- 假设模型生成一个候选(Candidate)序列𝐱,真实数据中存在一组参考(Reference)序列 𝒔(𝟏), … , 𝒔(𝒌) ,生成序列与参考译文相比较,越接近,生成序列的正确率越高。
2.实现方法
- 统计同时出现在生成序列和参考序列中 的 n 元词的个数,最后把匹配到的n 元词的数目除以生成序列单词数目,得到评测结果( 𝒏 元组集合的精度)
3. BLEU修正
为什么要修正?
修正方法
其中𝒄𝒘(𝐱)是𝒏元组𝒘在候选序列𝐱中出现的次数,C𝒘(𝒔𝒌)是𝒏元组𝒘在参考序列𝒔𝒌中出现的次数。例中修正后的一元文法精确度为 p1(x)= 2/7 。
4.长度惩罚
由于精度只衡量生成序列中的 N 元组合是否在参考序列中出现,生成序列越短,其精度会越高,因此可以引入长度惩罚因子 (Brevity Penalty)。如果候选序列的长度短于参考序列,就对其进行惩罚 。
𝒍𝒙为候选序列𝐱的长度, 𝒍𝒔为参考序列的最短长度。
5.定义
BLEU 是通过计算不同长度的 N 元组合的精度,并进行几何加权平均而得到。
其中𝜶𝒏为不同 N元组合的权重,一般设为𝟏/𝑵。BLEU取值范围是 [0, 1],越大表明生成的质量越好。但是 🍓BLEU只计算精度,而不关心召回率🍓(即参考序列里的 N元组合是否在生成序列中出现)
🍑ROUGE
- recall-oriented understudy for gisting evaluation :最早应用于文本摘要领域,和bleu值相似,但是rouge计算的是召回率而不是精度。
6.序列生成模型存在问题
1️⃣曝光偏差问题(Exposure Bias)
-
在自回归生成模型中,第𝒕步的输入为模型生成的前缀序列y(t-1)。而在训练时,我们使用的前缀是训练集中真实的数据𝒚𝟏:(𝒕−𝟏),而不是模型生成的y(t-1)。这种学习方式也成为Teacher Forcing。
-
模型生成的分布与真实的数据分布并不严格一致。一旦在预测前缀y(t-1)的过程中存在错误,会导致错误传播,使得后续生成的序列也会偏离真实分布。这个问题成为曝光偏差(Exposure Bias)。
🍓解决办法:Scheduled Sampling
- 在训练过程中,混合使用真实数据和模型生成数据 。令𝜖 ∈ [0,1]为一个控制替换率的超参数,在每一步,以𝜖的概率使用真实数据,以1 − 𝜖的概率使用模型前一步生成的数据。
- 一开始赋予𝜖较大的值,随着训练次数的增加逐渐减小𝜖的取值。
2️⃣训练-评价目标不一致的问题
- 序列生成模型一般采用和任务相关的指标来进行评价,比如BLEU、GOUGE等,而训练时使用最大似然估计,这导致训练目标和评价方法不一致。而这些评价指标一般都是不可微的,无法直接使用基于梯度的方法来进行优化。
🍓解决办法:可采用强化学习的策略进行模型训练
序列生成问题的实验-机器翻译-可以参考这篇博客,NLP作业四:RNN+Attention实现Seq2Seq中英文机器翻译(Pytorch)【代码+报告】