Distributed Representations of Sentences and Documents(句子和文档的分布式表示学习)
- 作者:Quoc Le and Tomas Mikolov
- 单位:Google
- 发布会议及时间:ICML 2014
第一课时:论文导读
1、句子分布式表示简介
句子分布式表示:句子的分布式表示就是将一个话或者一段话(这里将句子和文档同等看待,文档相当于较长的句子)用固定长度的向量表示。
意义:如果能够用一个向量精准地表示一句话,那么可以直接用这个向量用于文本分类、信息检索、机器翻译等等各个领域。
比如下图中的这句话"The dog is running on the grass",把这句话表示成一个300维的向量,这个向量包含了这个句子的一些信息,可以用这个向量来做一些任务。字符的向量表示为char embedding,词的向量表示为word embedding,句子的向量表示叫sentence embedding。得到句子的分布式表示之后可以将这个向量用于文本分类、信息检索、机器翻译等。如果能将一个句子准确地表示成向量,那就可以用这个向量来做各种任务。

1.1 句子分布式表示方法——两类句子分布式表示模型
1.1.1 基于统计的句子分布式表示
(1)Bag-of-words(是一类方法的总称)
算法:
- 构建一个词表,词表中每个元素都是一个词;
- 对于一句话s,统计词表中每个词在s中出现的次数;
- 根据词表中每个词在s中出现的次数,构造一个词表大小的向量;
如果看过一些书籍,应该不会对这个词感到陌生,这个词就是词袋模型。词袋模型把所有的词直接放进一个袋子中,词的词序信息被丢弃了,只知道这句话有哪些词而不知道词的顺序,这就是词袋模型。
下图展示了一个比较简单的词袋模型,比如说构建一个词表,词表中的每个元素都是一个词,对于一个话s,统计词表中每个词在s中出现的次数,根据出现的次数构造一个词向量,向量中每一个词代表向量中每一个元素对应的词在句子s中出现的次数。

如图中表示"The dog is running on the grass",假设数据集只有这一句话,根据这一句话来构造词典,词典中有"the",“dog”,“is”,“running”,“on”,“grass”。统计每个词出现的次数,最后形成的向量就是[2,1,1,1,1,1]。在真实场景中,语料肯定是特别大的,所以统计的词特别多。如果将所有在语料中出现的词全部统计,得到的词表会非常大的,可能会达到几十万甚至上百万,这取决于语料大小。如果词表特别大,对于之后的处理会造成不好的影响,我们不需要那么大的词表。而且词表中大部分词都不会出现,根据“二八定律”,相当于80%篇幅的语料,可能只用了20%的词。所以只需要统计出最常出现的词就可以了,所以一般在大的语料上构建词典的时候,首先需要统计所有词和每个词出现的频率,然后取出现频率最高的一部分词。如果词表取一万、三万等,就统计出现频率最高的前三万个词,然后将这三万个词设置成词典。然后统计每个句子中词出现的次数,得到一个三万维是向量。这个向量是稀疏的,而且会特别长。对于这个问题,可以使用降维操作将该向量降维为一个更小的向量,这时候这个向量就可以用来表示句子s。
对于Bag-of-n-gram,词表中的元素可以为词也可以为n-gram短语。
(2)Bag-of-n-grams
n-grams是从一个句子中提取的N个(或更少)连续单词的集合。这一概念中的“单词”也可以替换为“字符”。
举一个简单的例子,考虑句子"The cat sat on the mat",这句话可以被分解为以下二元语法(2-grams)的集合。
{“The”,“The cat”,“cat”,“cat sat”,“sat”,“sat on”,“on”,“on the”,“the”,“the mat”,“mat”}
这样的集合叫做二元语法袋(bag-of-2-grams),这里袋这一术语指的是,处理的是标记组成的集合,而不是一个列表或者序列,即标记没有特定的顺序,这一系类分词方法叫做词袋(bag-of-words)。
词袋是一种不保存顺序的分词方法(生成的标记组成一个集合,而不是一个序列,舍弃了句子的总体结构),因此它往往被用于浅层的语言处理模型,而不是深度学习模型。
提取n-gram是一种特征工程,深度学习不需要这种死板而又不稳定的方法,并将其替换为分层特征学习。需要记住,在使用轻量级的浅层文本处理模型时(比如逻辑回归和随机森林),n-grams是一种功能强大、不可或缺的特征工程工具。
Bag-of-words模型缺点:
- 因为是词袋模型,所以丢失了词之前的位置信息;
- 句向量只是单纯地利用了统计信息,而没有得到语义信息,或者只得到很少的语义信息。
Bag-of-n-grams模型缺点:
- 因为使用了n-gram,所以保留了位置信息,但是n-gram不会太大,最多是4-gram,所以只保留很少的位置信息。
- N-gram同样没有学习到语义信息。
1.1.2 基于深度学习的句子分布式表示
(1)加权平均法
算法:
- 构建词表,词表中每个元素都是词;
- 使用词向量学习方法(skip-gram等)学习每个词的词向量表示;
- 对句子s中的每个词( w 1 , w 2 , . . . , w n w_1,w_2,...,w_n w1,w2,...,wn)对应的词向量( e 1 , e 2 , . . . , e n e_1,e_2,...,e_n e1,e2,...,en)加权平均,结果为句子s的分布式表示: e s = 1 n ∑ i = 1 n e i e_s=\frac{1}{n}\sum_{i=1}^ne_i es=n1i=1∑nei
缺点:对所有的词向量进行平均,丢失了词之前的顺序信息以及词与词之间的关系信息。
(2)深度学习模型
算法:
- 构建词表,词表中每个元素都是词;
- 使用词向量表示方法(skip-gram等)学习每个词的词向量表示;
- 将句子s中的每个向量作为输入送到深度神经网络模型(CNN or RNN),然后通过监督学习,学习每个句子的分布式表示。
举个例子,如下图所示。现在有一个句子"I miss you !",根据词向量表示方法学习每个词的词向量表示,然后放进深度学习模型中进行参数调整,通过有监督学习获得文档的词向量表示方法,最后用于具体任务。
缺点:只能使用标注数据训练每个句子的句向量,这样训练得到的向量都是任务导向的,不具有通用性。

2、基于语言模型的词向量训练
语言模型:语言模型可以给出每个句子是句子的概率: P ( s ) = ∏ i = 1 T P ( w i ) P(s)=\prod _{i=1}^TP(w_i) P(s)=i=1∏TP(wi)而每个词的概率定义成n-gram形式,即每个词出现只与前n-1个词有关: P ( w t ) = P ( w t ∣ w t − n + 1 t − 1 ) P(w_t)=P(w_t|w_{t-n+1}^{t-1}) P(wt)=P(wt∣wt−n+1t−1)评价语言模型好坏的指标困惑度(perplexity): P P ( s ) = 1 P ( s ) T PP(s)=\sqrt[T]{\frac{1}{P(s)}} PP(s)=TP(s)1 P P ( s ) = e − 1 T ∑ i = 1 T l o g P ( w i ) PP(s)=e^{-\frac{1}{T}\sum_{i=1}^TlogP(w_i)} PP(s)=e−T1∑i=1TlogP(wi)
算法:
- 对于每个词随机初始化一个词向量;
- 取得一句话连续的n-1个词,将这n-1个词对应的词向量连接(concatenate)在一起形成网络e;
- 将e作为输入,送入到一个单隐层神经网络,隐层的激活函数为tanh,输出层的神经元个数为词表大小;
优点:就像原文中提到的,即训练出一组词向量,又得到一个语言模型。其次是不需要标注数据,可以使用很大的数据集。
论文:《A Neural Probabilistic Language Model》

观看上图,统计词表,词表中每个词初始化一个向量,取一句话连续的n-1个词,将这n-1个词对应的词向量连接在一起,比如每个词向量为100维,将三个词向量连接在一起得到一个300维的词向量。将该向量传入一个激活函数为tanh的全连接神经网络,再连接一个softmax的输出层。softmax对输出进行分类,词表中有多少个词,就会有多少个分类结果。最后得到了第t个词在前t-1个词条件下的概率,这是一个无监督模型,通过梯度下降训练整个端对端模型。
3、论文提出改进后的模型
3.1 分布式句向量训练模型

算法:
- 类似于前面提到的基于语言模型的词向量训练模型,这里的句向量训练模型也是利用前几个词预测后一个词;
- 不同的是,这里将每句话映射成一个句向量,联合预测后一个词出现的概率。
这样就学习到每个词的词向量和每句话的句向量。
训练阶段:
通过训练集构建词表,并随机初始化词向量矩阵w和训练集的句向量矩阵D。设置n-gram,文中为窗口大小,然后利用句向量训练模型训练矩阵模型的所有参数,包括词向量矩阵和句向量矩阵;
最后将学习到的句向量用于分类器预测句子的类别概率;
测试阶段:
固定词向量矩阵W和模型的其它参数,重新构建句向量矩阵D并随机初始化,然后利用梯度下降训练矩阵D,从而得到测试集每个句子的句向量。
将学习到的测试集的句向量用于训练句向量训练好的模型进行类别预测。
3.2 无序句向量训练模型
文本还提出了一种Bag-of-words,即忽略词序信息的模型。

算法:
每个句子通过随机初始化句向量矩阵映射成一个句向量,然后通过句向量每次随机预测句子中的一个词。
然后将学习到的句向量送到已经训练好的分类器,预测句子的概率。
本文分别使用提出的两种模型训练得到两个句向量,然后将两个句向量合并(concatenate),得到最终的句向量表示。
4、实验和结果
数据集
SST:斯坦福提供的情感分析数据集(0-1之间的情感值),其中训练数据8544条,测试数据2210条,验证数据1101条,其中还包括将所有数据转化为短句共239232条;
IMDB:IMDB的评论数据,其中训练集25000条,12500条正例,12500条负例。测试集25000条,12500条正例,12500条负例。还有50000条未标注数据。
评价方法:SST数据集可以根据情感值分为5类,采用的分类器是Logistic回归,也可以分为两类,评价指标就是预测情感类别的错误率,越低越好。IMDB数据集是一个二分类任务,采用的分类器是单隐层神经网络,评价指标为预测情感类别的错误率,同样越低越好。
实验结果
如下图所示,第二列为二分类结果,第三列为五分类结果,实验结果显示本文提出的句向量方法优于朴素贝叶斯,SVM,词向量平均法以及神经网络方法,在二分类和五分类任务都取得了state-of-the-art的结果。

IMDB的实验结果,句向量模型的结果也取得了state-of-the-art的结果。

5、讨论和总结——讨论论文中存在的问题,总结本阶段所学内容
5.1 论文存在问题
问题1:论文提出的方法是目前主流的句向量表示方法?
论文提出的方法并不是目前主流的句向量表示方法,目前的主流方法是基于神经网络的句向量学习方法,使用预训练的词向量以及神经网络可以得到非常好的句向量表示。
该论文提出的方法在测试过程还需要训练,大大降低了效率
使用基于神经网络的句向量学习方法,当前流行的ELMO,BERT。
是否有其它句向量训练方法
后人提出基于seq2seq模型的句向量训练方法。
5.2 论文主要创新点
- 提出了一种新的无监督的句向量训练方法;
- 可以直接用于下游任务;
- 在论文发表的时候取得了SOFA结果。
5.3 总结
- 背景:词袋模型和深度学习模型的介绍以及它们的缺点;
- 模型:提出了一种有顺序信息的句向量训练模型和一种基于词袋模型的句向量训练模型;
- 实验结果:在两个文本分类数据集SST和IMDB中达到了SOAT的结果。
5.4 参考论文
- Bengio et al.2015. A Neural Probabilistic Language model.
661

被折叠的 条评论
为什么被折叠?



