点击上方“MLNLP”,选择“星标”公众号
重磅干货,第一时间送达
作者丨徐啸
专栏| 自然语言处理学习之旅
https://zhuanlan.zhihu.com/p/85739175

本文结构

  • 1. 基线模型
    • 1.1. 词袋模型
      • 1.1.1. 基于统计的词袋模型
      • 1.1.2. 基于词向量的词袋模型
      • 1.1.3. 词袋模型的根本问题
    • 1.2. PV-DM / PV-DBOW 模型
    • 1.3. 基于 RNN/CNN 的模型
  • 2. 无监督模型
  • 3. 监督模型
  • 4. 多任务学习
  • 5. Reference

1. 基线模型

1.1. 词袋模型
1.1.1. 基于统计的词袋模型
在词向量技术未出现前,句子表征一般采用基于统计的词袋模型。
以 “I like you and you like me.” 和 “I love you and you love me.” 为例,词表为 {I, like, you, and, me, love},词表大小为 6。
  • 在基于 One-hot 的词袋模型中,两句的向量表示分别为:  
    • 在基于词频 / TF-IDF 的词袋模型中,向量中的每个元素不再仅是 0 1,而是更换为词频 / TF-IDF,以词频为例,上例的表示为:  
      • Term Frequency–Inverse Document Frequency (TF-IDF) 是一种用于信息检索与数据挖掘的常用加权技术。
      • 其中 TF 意为词频 Term Frequency,指单词在文档中的出现频率;IDF 意为 逆文本频率指数 Inverse Document Frequency ,指单词在语料库的所有文档中出现的频率的倒数。
      • TF-IDF 认为词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降
此外,为了引入语序信息,还通过在词表中增加 n-grams 项对词表进行扩展,但是这样会使得词表更大向量也会更加的稀疏
上述方法存在于高维、稀疏、离散的表示以及词袋模型弱化语序的问题,效果不佳。
1.1.2. 基于词向量的词袋模型
这类模型也被称为 
word-wise
 模型,基于词向量进行提取、组合,形成高阶特征。

最常见的方法是将一句话中的每个词的词向量求平均,作为句子表征。例如:Word2Vec, GloVe, FastText 等。
这样的模型能为许多下游任务提供强的基线,具有简单高效的优点。
很快,人们意识到简单求均值的方法过于粗糙,便提出了很多加权求平均的方法,例如以词频、TF-IDF 等为权重。
SIF加权平均词向量
A Simple but Tough-to-Beat Baseline for Sentence Embeddings ICLR 2017
该模型以平滑倒词频 (smooth inverse frequency, SIF) 作为权重进行加权平均得到句子向量,即认为频率越低的词在在句子中的重要性更大。最后令每个句子向量都减去其在,所有句子向量组成的矩阵的第一个主成分(principal component)上的投影,即抹去所有句子的共有信息,增大每个句子向量之间的距离
Power Mean 均值模型
Concatenated Power Mean Word Embeddings as Universal Cross-Lingual Sentence Representations arXiv 2018
本模型通过引入“幂均值” (Power Mean) 来改进加权平均的方法,幂均值公式如下:
记句子
,
为每个词的词向量
    • 时即为直接求平均的模型, 
      实际上指的是 max /min 操作,即对每个维度求取所有单词中的最大/最小值作为这一维度的值
模型将不同 p 值得到的不同的句子向量拼接起来作为句子表征,保留了不同 p 值得到的不同的信息。
此外,除了拼接不同的 p 值的向量,模型还拼接不同 word embedding 算法得到的向量。
从上图中的实验结果中可以看出,这确实如作者所言,是一个 hard-to-beat 的 baseline。
1.1.3. 词袋模型的根本问题
词袋模型存在两个主要的缺点:忽略词序和语法。
由于词袋模型缺失了语序信息,在对语序较为敏感的下游任务中效果不佳,如情感分析 sentiment analysis:
I like this movie because it doesn't have an overhead history. Positive

I don't like this movie because it has an overhead history. Negative.
don’t 的位置不同,决定了这两句话的情感取向是一正一负的,但在词袋模型中,这两句话得到的句子表征确实一致的。
1.2. PV-DM / PV-DBOW 模型
Distributed Representations of Sentences and Documents ICML 2014
word2vec 的作者 mikolov 将 CBOW 和 Skip-gram 这两个 word embedding 的训练方法应用到 sentence embedding 中。
PV-DM 的全称是 Distributed Memory Model of Paragraph Vectors。与 CBOW 类似,也是通过上下文预测下一个词。但在输入层处维护了一个文档 ID 映射到一个向量的表格,目的是将当前文档的向量以及上下文向量联合输入模型,并让模型预测下一个词,训练结束后,对于现有的文档,便可以直接通过查表的方式快速得到该文档的向量,而对于新的一篇文档,那么则需要将已有的表格添加相应的列,然后重新走一遍训练流程,只不过此时固定好其他的参数,只调整表格即可,收敛后便可以得到新文档对应的向量了。
PV-DBOW 的全称则是 Distributed Bag of Words version of Paragraph Vector。和 Skip-gram 类似,通过文档来预测文档内的词。训练时随机采样一些文本片段,然后再从这个片段中采样一个词令 PV-DBOW 模型来预测这个词,借助这一分类任务作为训练方法。
两个模型的优点是它们不仅能获取句子向量,也能获取文档级别向量,弱点在于:为了获取新文档的向量,需要重新训练一遍流程,并且由于模型主要是针对文档向量预测词向量的过程进行建模,其实很难去表征词语之间的更丰富的语义结构,所以这两种获取文档向量的方法都未能大规模应用开来。
1.3. 基于 RNN/CNN 的模型
自然而然的,我们可以利用 RNN (LSTM/GRU等) 来克服词袋向量的语序问题,以最后一个隐状态作为整个句子的 Embedding,或者对每一时间步的隐状态进行平均、max/min或者加权平均。
基于 RNN 的 Sentence Embedding 往往用于特定的有监督任务中,缺乏可扩展性/迁移性(transferrable),即使在某个task中可以效果不错,也需要在新的任务中需要重新训练,但是由于 RNN 本身难以并行训练的缺陷,开销较大。
A Convolutional Neural Network for Modelling Sentences ACL 2014
Kalchbrenner 提出的 TextCNN 将 CNN 成功应用到 NLP 中。TextCNN 使用卷积核提取局部特征,利用 CNN 可以提取句子中类似 n-gram 的局部信息,并通过整合不同大小的 n-gram 特征作为整个句子的表示。
网络结构简单,参数数目少,计算量少,训练速度快,通过引入已经训练好的词向量依旧有很不错的效果。
TextCNN 的一个缺点是需要人工指定卷积核的尺寸,而这个超参数对结果的影响很大。

2. 无监督模型

Skip-Thought Vectors NIPS 2015
借鉴 Skip-gram 的思想,Skip-thoughts 直接在句子间进行预测,也就是将 Skip-gram 中以词为基本单位,替换成了以句子为基本单位。具体做法就是选定一个窗口,遍历其中的句子,然后分别利用当前句子去预测和输出它的上一句和下一句。这里的 Decoder 可以看作是以 Encoder 输出为条件的神经语言模型。不过和普通框架不一样的是,Skip-thoughts 有两个 Decoder。
此外,由于 Skip-thoughts 模型的词表规模往往是远小于现实中的词表,为了让模型能够对任意句子进行编码,受论文 Exploiting similarities among languages for machine translation 的启发,训练 word2vec 与 Skip-thoughts 的 encoder 端的词向量矩阵之间的线性映射模型,如果待编码的句子中的某个词不属于 Skip-thoughts 词表,则首先在 word2vec 词表中进行查询得到对应的 word2vec 词向量,再通过线性模型映射为 Skip-thoughts 模型的 encoder 对应空间的词向量。
An efficient framework for learning sentence representations ICLR 2018
Google Brain的 Logeswaran 等人认为 Skip-thoughts 的效率太低,且无法在大规模语料上很好的训练。他们提出了一种简单且有效用于学习句子表示的框架 Quick-thoughts —— 将生成任务改为分类任务
训练时,输入一个句子以及其候选句子集合,集合中包含一个与句子出现在同一上下文窗口中的句子作为正例,其余不出现在同一上下文窗口中,记为负例。将这些句子输入模型,让模型判断这些句子对是否是同一个上下文窗口中。模型的 Encoder 有两个如上图所示,分别是 ,测试时,给定待编码句子  ,通过该模型得到的句子表示是句子编码器和候选句子编码器的连接 。
有趣的是,模型使用的分类器非常简单,其输入为向量内积,即  ,如上图所示,计算出四个句子的句子向量并分别算出向量内积后,输入到 softmax 层进行分类。这是为了引导模型着重训练句子编码器,从而获得更好的句子向量。

3. 有监督模型

Deep Unordered Composition Rivals Syntactic Methods for Text Classification ACL 2015
论文首先提出了 NBOW (Neural Bag-of-Words) 模型,即直接将文本中所有词向量的平均值作为文本的表示,然后输入到 softmax 层进行文本分类。
随后讨论了 Recursive neural networks (RecNNs) 这类基于句法结构进行句子表征的方法,尽管在有些情况下有非常好的效果,但是其不适合长文本以及不规范文本 (如口语) 并且十分依赖于句法树的准确性,训练时间很长,效果一般
于是,在 NBOW 的基础上提出了Deep Averaging Networks (DAN) ,通过增加多个隐藏层来增加网络的深度,训练速度快,效果不错,但是模型显然没有考虑单词之间的顺序,缺陷难以避免。
A Structured Self-attentive Sentence Embedding ICLR 2017
本文不再使用一维向量作为句子表征,而是使用二维矩阵作为句子表征,以解决句子被压缩成一维向量时的信息损失,并且为此对损失函数加以改进。
假设模型的输入是一个含有 n 个 Token 的句子,LSTM 的隐层维度为 h,那么经过 BiLSTM 得到  
 ,再如上图右侧的所示,通过简单前馈神经网络生成 self-attention 权重:
其中 
,从而得到句子中每个单词的权重。但如此得到的 
  还是一种一维向量的句子表征。作者认为该向量表示通常集中在句子中的特定组成上,就像一个相关的词或短语的特殊集合,只会反映在句子语义的一个方面或一种组成
然而,特别是对于长句,一个句子可以有多种组成来共同组成整个句子的整体语义。所以我们需要执行多次 attention,于是将  
 升级为矩阵  
 ,公式变为
于是最终的句子向量也就变为了 
 即
二维句子表征

Supervised Learning of Universal Sentence Representations from Natural Language Inference Data EMNLP 2017
InferSent 认为从 NLI (Natural Language Inference NLI) 是一个理解任务,涉及推理句子间的语义关系) 数据集中训练得到的句向量也适合迁移到其他 NLP 任务中。例如将训练好的模型当做特征提取器,以此来获得一个句子的向量表示,再将这个句子的表示应用在新的分类任务上,来评估句子向量的优劣。框架结构如下图所示:
这个框架最底层是一个 Encoder,也就是最终要获取的句子向量提取器,输入是一对句子,分别是前提 premise 与假设 hypothesis,然后将得到的句子向量通过一些向量操作后得到句子对的混合语义特征,最后接上全连接层并做数据集上的三分类任务 (entailment 蕴含, contradiction 矛盾, neutral 中性) 。
论文对比了7种不同的句子编码器,主要包括 RNN 与 CNN,其中 RNN 包括取LSTM/GRU最后一个隐状态,BiGRU,BiLSTM的 mean/max pooling 以及 self-attention,公式如下。取得效果最优的是 BiLSTM+maxpooling 作为编码器。


InferSent 模型的成功,使学界开始探索通过不同的监督任务丰富并增强句子表征,提升其在下游任务中的效果。

4. 多任务学习

Universal Sentence Encoder EMNLP 2018
Google 于 2018 年初发布的通用句子编码器,综合利用无监督训练数据和有监督训练数据,进行多任务训练,从而学习一个通用的句子编码器。无监督训练数据包括问答(QA)、维基百科和网页新闻等,有监督训练数据为SNLI。多任务模型设计如下图所示,其中灰色的 encoder 为共享参数的句子编码器。SNLI 上的训练模型与Facebook 推出的 InferSent 类似。共享编码器使得模型训练时间大大减少,同时还能保证各类迁移学习任务的性能,力求为尽可能多的应用提供一种通用的句子编码器。
论文对比了 DAN 和 Transfomer 这两种编码器。Transformer 模型在大部分任务上的表现都优于简单的 DAN 模型,并且处理短句子时只稍慢一些。DAN模型也能具有很不错的表现,并且相较于Transformer模型,当句子较长时训练时间和内存的开销都更小。
Learning General Purpose Distributed Sentence Representations via Large Scale Multi-task Learning ICLR 2018
微软在论文中提出了利用四种不同的监督任务联合学习句子的表征,这四种任务分别是:Natural Language Inference, Skip-thougts, Neural Machine Translation 以及 Constituency Parsing。
作者认为,通用的句子表征应该通过侧重点不同的任务来联合学习到,而不是只有一个特定任务来学习句子表征。所以模型将同时在多个任务多个数据源上进行训练,并且共享句子表征
实验的具体做法是,先用联合学习的方法在上述四个任务上进行训练,训练结束后,将联合学习的模型作为特征提取器提取句子表征,然后直接接上全连接层作为分类器,并且同时冻结特征提取器中的参数,然后在新的分类任务上训练分类器。作者发现很多任务上简单分类器都要超过当时的最好结果,并且他们还发现联合训练中不同的任务对于句子表征中的不同方面有不同的贡献。

Reference

https://zhuanlan.zhihu.com/p/50443871
https://github.com/imhuay/Algorithm_Interview_Notes-Chinese/blob/master
https://www.cnblogs.com/llhthinker/p/10335164.html
推荐阅读:
继续阅读
阅读原文