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。得到句子的分布式表示之后可以将这个向量用于文本分类、信息检索、机器翻译等。如果能将一个句子准确地表示成向量,那就可以用这个向量来做各种任务。
NLP论文 -《Distributed Representations of Sentences and Documents》-句子和文档的分布式表示学习(一)

1.1 句子分布式表示方法——两类句子分布式表示模型

1.1.1 基于统计的句子分布式表示

(1)Bag-of-words(是一类方法的总称)

算法:

  1. 构建一个词表,词表中每个元素都是一个词;
  2. 对于一句话s,统计词表中每个词在s中出现的次数;
  3. 根据词表中每个词在s中出现的次数,构造一个词表大小的向量;

如果看过一些书籍,应该不会对这个词感到陌生,这个词就是词袋模型。词袋模型把所有的词直接放进一个袋子中,词的词序信息被丢弃了,只知道这句话有哪些词而不知道词的顺序,这就是词袋模型。

下图展示了一个比较简单的词袋模型,比如说构建一个词表,词表中的每个元素都是一个词,对于一个话s,统计词表中每个词在s中出现的次数,根据出现的次数构造一个词向量,向量中每一个词代表向量中每一个元素对应的词在句子s中出现的次数。
NLP论文 -《Distributed Representations of Sentences and Documents》-句子和文档的分布式表示学习(一)
如图中表示"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)加权平均法

算法

  1. 构建词表,词表中每个元素都是词;
  2. 使用词向量学习方法(skip-gram等)学习每个词的词向量表示;
  3. 对句子s中的每个词(w1,w2,...,wnw_1,w_2,...,w_n)对应的词向量(e1,e2,...,ene_1,e_2,...,e_n)加权平均,结果为句子s的分布式表示:es=1ni=1neie_s=\frac{1}{n}\sum_{i=1}^ne_i
(2)深度学习模型

算法

  1. 构建词表,词表中每个元素都是词;
  2. 使用词向量表示方法(skip-gram等)学习每个词的词向量表示;
  3. 将句子s中的每个向量作为输入送到深度神经网络模型(CNN or RNN),然后通过监督学习,学习每个句子的分布式表示。

举个例子,如下图所示。现在有一个句子"I miss you !",根据词向量表示方法学习每个词的词向量表示,然后放进深度学习模型中进行参数调整,通过有监督学习获得文档的词向量表示方法,最后用于具体任务。
NLP论文 -《Distributed Representations of Sentences and Documents》-句子和文档的分布式表示学习(一)

2、句子分布式表示相关方法

3、前期知识储备

  • 熟悉词向量的相关知识;
    • 了解词向量矩阵,以及词向量学习到的语法以及语义信息的含义,参考论文《Efficient Estimation of Word Representations in Vector Space》
  • 了解使用语言模型训练词向量的方法;
    • 了解通过语言模型来训练词向量的模型,参考论文《A Neural Probabilistic Language Model》
      NLP论文 -《Distributed Representations of Sentences and Documents》-句子和文档的分布式表示学习(一)

相关文章: