词向量-简介

词向量,顾名思义,就是使用向量来表达词。最常见的表达方式就是"one-hot",其向量维度为整个语料库中词的总数,每一维代表语料库中的一个词(出现为1,不出现为0)。假设语料库为:

  • I like deep learning
  • I like NLP
  • I enjoy flying

那么该语料库的字符集为:{I, like, deep, learning, NLP, enjoy, flying},其对应的"one-hot"表达方式为:

  • [1000000] -> I
  • [0100000] -> like
  • [0010000] -> deep
  • [0001000] -> learning
  • [0000100] -> NLP
  • [0000010] -> enjoy
  • [0000001] -> flying

“one-hot”表达方式的最大问题在于其只能表达词本身是否出现,而无法表达词与词之间的关系。为了解决此问题,便有了使用相邻词来表达词本身的方式。

Cooccurrence Matrix

基于窗口的共现矩阵是对词与词相邻关系的最直接表达。还是以上面的语料库为例,假设窗口大小为1(即以每一个词为中心,向左/右延伸长度为1),那对应的共现矩阵为:

由于共现是双向的,所以上述矩阵是对称的。随着语料库变大,该共现矩阵将会变的非常巨大,于是便需要通过SVD(Singular Value Decomposition)进行降维,相关理论在此不进行展开。但共现矩阵还是存在很多问题,如无法处理新词等。

Word2Vec

另外一种基于词相邻关系的表达方式就是word2vec(Mikolov et al. 2013),其主题思想是通过每一个词本身来预测其相邻的词。

回顾一下大部分机器学习模型的训练过程,先设定 Objective Function,然后随机设定初始状态,再通过 Gradient Descent 进行迭代,逐步逼近最优解。word2vec 模型本质上也一样,还是从 Objective Function 入手

第一个 Sigma 表示从头到尾过一遍语料库中的每一个词,第二个 Sigma 表示对于每一个词,过一遍其窗口内的所有词(除自己外)。最后一部分表示基于中心词预测其窗口内上下文的概率。如果基于本文开头的简短语料库,设定窗口大小为1,将 Objective Function 展开就会是这个样子

Objective Funection 的具体形式,可以看出 word2vec 与先前表达方式的本质区别,在这里引用一段英文资料的解释:

Maximize the likelihood of seeing this context given the word over, instead of maximizing the likelihood of co-occurrence counts.

接下来,我们需要弄清楚 p 究竟是什么。首先,我们的目标是得到语料库中每一个词的向量表示方法,所以相应的变量应该是词向量;然后,在上述 Objective Function 中,语料库中每一个词既有可能做为中心词,也有可能做为上下文,为了区分这两种情况,我们会对每一个词分别维护两个向量。

说明:在训练过程中,对每一个词维护两个向量不是必须的。也就是说,做为中心词时使用的向量与做为上下文时使用的向量可以共用一个,但相关试验结果证明,区分这两个向量会得到更好的结果。

继续,我们已经有了两个向量,那么最简单直接的想法就是 Cosine Similarity,但它的结果区间是从-1到1,需要把它转化成0到1的概率区间,于是原论文中使用了 Softmax 函数。

至此,我们完成了最简单版本 word2vec 模型的 Objective Function。接下来是迭代过程,迭代过程相对比较简单,分别两个向量进行求导,然后对语料库中每一个实例进行迭代

关于上述公式中的求导过程,感兴趣的同学可以看看斯坦福的公开课,自己也在纸上演算了一遍:



上述 word2vec 推导只是原论文中最简单的模型,后续我会针对复杂模型单独进行整理分析。

GloVe

上面,我们已经梳理了基于共现矩阵与 word2vec 的词向量表达方式。相比而言,基于共现矩阵的词向量表达方式训练速度快、充分利用了统计信息,主要用于计算词与词的相似度;而word2vec 词向量表达方式训练速度相对较慢,并没有充分利用统计信息,但能表达出更加复杂的信息。GloVe 模型结合了两者的优势,训练速度比 word2vec 更快,其效果与 word2vec 相当,甚至更好一些。其 Objective Function 为:

其中 P 为两个词在原语料库中的共现次数,f 为共现次数与权重的函数关系,Objective Function 的主体思想为:

  • 在最终词向量模型中,任何两个词向量的内积结果应尽量与两个词的共现次数一致。
  • 如果某 word-pair 共现次数较低,应该弱化其对 Objective Function 的影响,避免噪音。
  • 如果某 word-pair 共现次数过高,很有可能 dominate 整体模型的训练过程,应设定影响力上限。

基于上面的思想,便有了下述 f 函数形式:

这个是斯坦福的官方链接,包含了论文以及实现,感兴趣的同学可以试试。

Reference

  • http://cs224d.stanford.edu/syllabus.html 斯坦福的网络公开课,本文算是该课程的学习笔记
  • http://nlp.stanford.edu/projects/glove/ GolVe
  • https://www.youtube.com/watch?v=vkfXBGnDplQ 另外一个很好的视频

你可能感兴趣的:(词向量-简介)