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短语。
思考:Bag-of-words的缺点,并思考如何改进。
(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是一种功能强大、不可或缺的特征工程工具。
1.1.2 基于深度学习的句子分布式表示
(1)加权平均法
算法:
- 构建词表,词表中每个元素都是词;
- 使用词向量学习方法(skip-gram等)学习每个词的词向量表示;
- 对句子s中的每个词()对应的词向量()加权平均,结果为句子s的分布式表示:
(2)深度学习模型
算法:
- 构建词表,词表中每个元素都是词;
- 使用词向量表示方法(skip-gram等)学习每个词的词向量表示;
- 将句子s中的每个向量作为输入送到深度神经网络模型(CNN or RNN),然后通过监督学习,学习每个句子的分布式表示。
举个例子,如下图所示。现在有一个句子"I miss you !",根据词向量表示方法学习每个词的词向量表示,然后放进深度学习模型中进行参数调整,通过有监督学习获得文档的词向量表示方法,最后用于具体任务。
2、句子分布式表示相关方法
3、前期知识储备
- 熟悉词向量的相关知识;
- 了解词向量矩阵,以及词向量学习到的语法以及语义信息的含义,参考论文《Efficient Estimation of Word Representations in Vector Space》
- 了解使用语言模型训练词向量的方法;
- 了解通过语言模型来训练词向量的模型,参考论文《A Neural Probabilistic Language Model》
- 了解通过语言模型来训练词向量的模型,参考论文《A Neural Probabilistic Language Model》