文章目录
一:前言
博主的导师让博主研究一下人机对话,上周花了一周的时间研究了一下word2vec。下面以这篇博客来总结一下博主对word2vec的理解。如果有错误的地方,欢迎大家在评论区进行批评指正。
word2vec是谷歌于2013年发布的用于计算词向量的工具,其可以很好的度量词之间的相似性,引起了工业界和学术界的广泛关注,目前也是计算词向量的重要方法。我们需要注意一点的是word2vec不是一个模型,而是计算词向量的方法,具体计算的时候可以使用不同的模型,在本篇博客中,我们主要介绍两种具体的模型,skip-gram和cbow。
本篇博客首先回顾一下统计语言学模型,接着介绍skip-gram模型和cbow模型,最后对模型训练过程中使用的负采样进行详细的解释。
二:语言学模型
在深入word2vec具体模型之前,我们先来简单回顾一下自然语言处理中的一个基本问题,如何去计算一个文本序列在某个语料中出现的概率?这个问题在很多的nlp问题中基本问题,如果在机器翻译的问题中,我们已经知道了目标语句中翻译结果的前面部分,如果选择后面的几个词?在文本的生成过程中,如何根据已经有的文本生成下一句话?等等。为了弄清楚这里面的规律,统计语言模型给出了这类问题的一个基本框架,给定一段文本序列:
(2.1) S = w 1 , w 2 , . . . , w T S=w_1,w2,...,w_T \tag{2.1} S=w1,w2,...,wT(2.1)
其概率可以表示为T个词的联合概率或者条件概率的乘积:
(2.2) P ( S ) = P ( w 1 , w 2 , . . . , w T ) = ∏ p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 , w 2 ) ⋯ p ( w T ∣ w 1 , w 2 , . . . w T − 1 ) = ∏ k = 1 T p ( w k ∣ w 1 , w 2 , . . . , w k − 1 ) P(S) = P(w_1,w_2,...,w_T)=\prod{p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)\cdots p(w_T|w_1,w_2,...w_{T-1})} = \prod_{k=1}^T{p(w_k|w_1,w_2,...,w_{k-1})} \tag{2.2} P(S)=P(w1,w2,...,wT)=∏p(w1)p(w2∣w1)p(w3∣w1,w2)⋯p(wT∣w1,w2,...wT−1)=k=1∏Tp(wk∣w1,w2,...,wk−1)(2.2)
那么现在问题就变成了,给定 w 1 , w 2 , . . . , w k − 1 w_1,w_2,...,w_{k-1} w1,w2,...,wk−1,计算 w k w_k wk的出现的概率。即: p ( w k ∣ w 1 , w 2 , . . . w k − 1 ) p(w_k|w_1,w_2,...w_{k-1}) p(wk∣w1,w2,...wk−1),由于这个模型的参数空间是非常大的,难以求解,并且在比较长的一句话中,距离预测词的距离越远的词对预测的贡献越小,我们更多的是采用其简化的版本,即N-gram模型。即有:
(2.3) p ( w k ∣ w 1 , w 2 , . . . w k − 1 ) ≈ p ( w k ∣ w k − n + 1 ) , … , w k − 1 ) p(w_k|w_1,w_2,...w_{k-1}) \approx p(w_k|w_{k-n+1)},\dots ,w_{k-1}) \tag{2.3} p(wk∣w1,w2,...wk−1)≈p(wk∣wk−n+1),…,wk−1)(2.3)
常见的模型有 b i g r a m ( N = 2 ) bigram(N=2) bigram(N=2)和 t r i g r a m ( N = 3 ) trigram(N=3) trigram(N=3)等模型,这些模型可以使用 M L E MLE MLE (maximum likelihood estimation)进行求解。
以上简单回顾了统计语言模型的基本表示方法,下面我们来看看word2vec两种具体的实现模型。
三:skip-gram
skip-gram 翻译成中文的叫跳字模型,模型的目标是通过一个词来预测该词附近的词(上下文),比如一个句子“The quick brown fox jumps over lazy dog”,如果我们选定中心词‘fox’,来预测该词附近的两个词,模型的任务就是在输入“fox”的时候,输出“quick”,“brown”,“jumps”和“over”,模型如下图所示,我们可以看出这是一个非常简单的浅层神经网络。
skip-gram 模型的训练目标是寻找有效词的表示来预测一句话或者一个文本中一个词的附近的词。由第二节的语言学模型我们可以将其使用数学符号来表示。给定一个序列 S = w 1 , w 2 , . . . , w T S=w_1,w2,...,w_T S=w1,w2,...,wT,最大化联合概率分布,这里假设 p ( w t + j ∣ w t ) p(w_{t+j}|w_t) p(wt+j∣wt)之间是相互独立的:
(3.1) ∏ t = 1 T ∏ − c ⩽ j ⩽ , j = ̸ 0 p ( w t + j ∣ w t ) \prod_{t=1}^T{ \prod_{-c\leqslant j\leqslant ,j =\not 0}{p(w_{t+j}|w_t)}} \tag{3.1} t=1∏T−c⩽j⩽,j≠