word2vec 原理篇

目录

  1. 简介
  2. 词向量和语言模型
  3. word2vec模型与推导
  4. 总结

1. 简介

          随着深度学习在语音识别和图像分类任务上的巨大成功,越来越多的人开始关注深度学习领域。相较于语音识别和图像分类,最初在自然语言处理领域中的深度学习应用效果似乎并不明显。后来深度学习在自然语言处理中出现了第一个应用:训练词嵌入。通过词嵌入的词表示方式,大量的nlp领域的任务都得到了提升。此外,几乎所有的深度学习在自然语言处理中的应用都使用了词嵌入,所以,词嵌入可谓是深度学习应用于自然语言处理的一个核心技术。为了学习词嵌入的训练过程,本文选择了研究word2vec工具包。

         word2vec是由Tomas Mikolov 研究团队创造的一群用来产生词嵌入的模型,目前官方最新的word2vec工具包发布于2013年,为c语言版本,此外还有非官方版本:python版本java版本

         word2vec工具包输入是一个文本文件,称为训练语料,输出是一个词典,词典中包含训练语料中出现的单词以及它们的词嵌入表示。单词的词嵌入表示,就是用一个n维的实数向量来代表一个单词,单词之间的语义关系可以通过词嵌入体现出来,所以,要衡量词嵌入好与不好,可以观察词嵌入可以多大程度体现单词的语义信息。使用word2vec训练词向量的一个基本假设就是分布式假设,分布式假设是说词语的表示反映了它们的上下文,也就是它认为,有相似上下文的单词的语义也是相近的。使用word2vec训练出的词嵌入有两个特点:

  1. 体现了语义相似关系,如计算距离“red”最近的词嵌入,结果就是“white”,“black”等表示颜色的单词。
  2. 体现了语义平移关系,如计算距离“woman”-“man”+“king”最近的词嵌入,结果就是“queen”。

         在介绍word2vec前,先介绍一些基础知识,包括词向量和语言模型。然后介绍word2vec训练词嵌入时可以选择的四种模型,分别介绍它们的模型结构,以及使用梯度更新训练过程的数学推导。

2. 词向量和语言模型

2.1 词向量

        NLP(Natural Language Processing)问题要转化为机器学习的问题,首先就要把单词数学化表示,就是用n维实数向量来代表一个单词,常见的词向量有以下两种:

One-hot Representation

        例如: “话筒”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 …]

              “麦克”表示为 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 …]

One-hot表示使用了单词在词表中的编号信息,编码方式如下:向量长度为词表大小,单词在词表中的编号对应的那一个维度为1,其余为0。

One-hot表示存在两个问题:

1.维度比较大,尤其在用于神经网络的一些算法时,出现“维数灾难”。

2.词汇鸿沟:任意两个词之间都是孤立的,不能体现词和词之间的关系(因为编码过程仅仅使用了它们在词表中的编号信息)。

Distributional Representation

例如: [0.792, −0.177, −0.107, 0.109, 0.542, …],每个维度用一个实数值表示

克服了One-hot表示存在的两个问题:

1.解决了维度大的问题:常见维度50或者100。

2.解决了“词汇鸿沟”问题:可以通过计算向量之间的距离(欧式距离、余弦距离等)来体现词与词的相似性。

这样的词向量称为词嵌入(word-embedding),那么如何训练这样的词向量呢?我们可以通过训练语言模型的同时,得到词向量。接下来本文将介绍语言模型的概念,并介绍几种常见的语言模型。

2.2 语言模型

        语言模型其实就是判断一句话是不是正常人说出来的。用数学符号描述为:

给定一个字符串“$w_{1},w_{2},…,w_{t}$”,计算它是自然语言的概率$p(w_{1},w_{2},…,w_{t})$ ,一个很简单的推论是:$$p(w_{1},w_{2},…,w_{t})=p(w_{1})\cdot p(w_{2}|w_{1})\cdot p(w_{3}|w_{1},w_{2})\cdot …\cdot p(w_{t}|w_{1},w_{2},…,w_{t-1})$$

简单表示为:p(s)=$p(w_{1},w_{2},…,w_{t})$=$\prod_{i=1}^{t}p(w_{i}|Context_{i})$

从上面的公式可以看出,建立语言模型要解决的核心问题就是如何计算$p(w_{i}|Context_{i})$?

N-gram模型

        该模型基于这样一种假设:某个词的出现只与前面N-1个词相关,而与其它任何词都不相关。

        整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。

一个bigram的例子,假设语料库总词数为$13748$:

表2.1 单词词频

表2.2 词序列频度

$$\begin{align}
&P(I\, want\, to\, eat\, Chinese\, food) \\
&=P(I)*P(want|I)*P(to|want)*P(eat|to)*P(Chinese|eat)*P(food|Chinese) \\
&=(3437/13748)*(1087/3437)*(786/1215)*(860/3256)*(19/938)*(120/213)\\
&=0.000154171\\
\end{align}$$

存在的问题:

稀疏问题:假设词表中有10000个词,如果是bigram,那么可能的N-gram就有100000000个,如果是trigram,那么可能的N-gram就有1000000000000个,对于其中的很多词对的组合,在语料库中都没有出现。于是我们的模型只能算可怜兮兮的几个句子,而大部分的句子算得的概率是0。

解决办法:数据平滑(data Smoothing)

NNLM(Neural Network Language Model)

        N-gram模型是基于统计的语言模型,无法得到单词的词嵌入。接下来介绍的语言模型会把词嵌入作为输入(初始的词嵌入是随机值),训练语言模型的同时也在训练词嵌入,最终可以同时得到语言模型和词嵌入。训练语言模型的最经典之作,要数 Bengio 等人在 2001 年发表在 NIPS 上的文章《A Neural Probabilistic Language Model》。现在要看的话,可以看他在 2003 年投到 JMLR 上的同名论文。

zxding_word2vec3

图2.1

Bengio 用了一个三层的神经网络来构建语言模型,同样也是 n-gram 模型(即假设某个词的出现只与前面N-1个词相关,而与其它任何词都不相关)

        图中最下方的 $w_{t-n+1}, …, w_{t-2}, w_{t-1}$ 就是前 $n-1$ 个词。现在需要根据这已知的 $n-1$ 个词预测下一个词 $w_t$。$C(w)$ 表示词 $w$ 所对应的词向量,整个模型中使用的是一套唯一的词向量,存在矩阵 $C$(一个 $|V| \times m$ 的矩阵)中。其中 $|V|$ 表示词表的大小(语料中的总词数),$m$ 表示词向量的维度。$w$ 到 $C(w)$ 的转化就是从矩阵中取出一行。

        网络的第一层(输入层)是将 $C(w_{t-n+1}), …, C(w_{t-2}), C(w_{t-1})$ 这 $n-1$ 个向量首尾相接拼起来,形成一个 $(n-1)m$ 维的向量,下面记为 $x$。

        网络的第二层(隐藏层)就如同普通的神经网络,直接使用 $d+Hx$ 计算得到。$d$ 是一个偏置项。在此之后,使用 $\tanh$ 作为激活函数。

        网络的第三层(输出层)一共有 $|V|$ 个节点,每个节点 $y_i$ 表示 下一个词为 $i$ 的未归一化 log 概率。最后使用 softmax 激活函数将输出值 $y$ 归一化成概率。最终,$y$ 的计算公式为:

$y = b + Wx + U\tanh(d+Hx)$

         现在万事俱备,用随机梯度下降法把这个模型优化出来就可以了,需要注意的是,一般神经网络的输入层只是一个输入值,而在这里,输入层 x 也是参数(存在 C 中),也是需要优化的。优化结束之后,词向量有了,语言模型也有了。

优点:

1.这样得到的语言模型自带平滑,无需传统 n-gram 模型中那些复杂的平滑算法。Bengio 在 APNews 数据集上做的对比实验也表明他的模型效果比精心设计平滑算法的普通 n-gram 算法要好 10% 到 20%。

2.词语间的相似性可以通过词向量体现,例如:语料中S1=“A dog is running in the room”出现了10000,次,S2= “A cat is running in the room”出现了0次,按照n-gram模型的做法,p(S1)肯定远大于p(S2)。而在NNLM中,两者非常接近,因为cat的词向量和dog非常接近,将词向量代入计算得到的结果就很接近。

        其他几种模型如C&W 的 SENNA,M&H 的 HLBL,Mikolov 的 RNNLM,Huang 的语义强化都是在Bengio论文发表后受到启发并进行一定改进的模型,这里不再详述,具体见 http://licstar.net/archives/328

3. word2vec模型与推导

         word2vec也是一种语言模型,在训练语言模型的同时得到词嵌入。word2vec工具包提供了四种可选的训练模型,分别是由两种模型(CBOW,Skip-gram),两种方法(Hierarchical Softmax,Negative Sampling)组合而成:

CBOW+Hierarchical Softmax

CBOW+Negative Sampling

Skip-gram+Hierarchical Softmax

Skip-gram+Negative Sampling

3.1 CBOW与Skip-gram模型

一个实例:窗口长度为2时:

word2vec1

图3.1

两个模型都包含3层:输入层,投影层,输出层。

CBOW模型:已知上下文$w_{t-2},w_{t-1},w_{t+1},w_{t+2}$,预测当前词$w_{t}$。

对于一个样本,做一次预测,具体做法是:将所有的上下文单词的词向量加起来,得到投影层向量$x_{w}$,由$x_{w}$预测当前词出现的概率。

Skip-gram模型:已知当前词$w_{t}$,预测上下文$w_{t-2},w_{t-1},w_{t+1},w_{t+2}$。

对于一个样本,做4次预测,具体做法是:直接使用当前词的词向量作为投影层向量,得到投影层向量$x_{w}$,由$x_{w}$分别预测每个上下文单词出现的概率。

3.2 CBOW模型+Hierarchical Softmax方法

word2vec3

图3.2

1.输入层:包含Context(w)中2c个词的词向量$v(Context(w)_{1}),v(Context(w)_{2}),…,v(Context(w)_{2c})\in R^{m}$,m表示词向量的长度。

2.投影层:将输入层的2c个词向量求和,即$x_{w}=\sum_{i=1}^{2c}v(Context(w)_{i})\in R^{m}$

3.输出层:输出层对应一棵二叉树,它是以词典D中的词作叶子节点,以该词在语料中的频数作为权值构造的一棵Huffman树。这棵树中,叶子节点有N(=|D|)个,分别对应词典D中的词,非叶子节点有N-1个。

对一个样本进行预测的例子:

句子:我,喜欢,观看,巴西,足球,世界杯
w=足球

$d^{w}_{j}(0或1)$:词w的第j-1个huffman编码,定义0为正类,1为负类。

$\theta^{w}_{j}(\in R^{m})$:词w的带权最短路径上第j个非叶子节点向量。

word2vec4

图3.3

正类概率:$\sigma (x^{T}_{w}\theta)=\frac{1}{1+e^{-x^{T}_{w}\theta}}$

负类概率:$1-\sigma (x^{T}_{w}\theta)$

“足球”叶子节点经过4次二分类,每次分类结果对应的概率为:

第一次:$p(d^{w}_{2}|x_{w},\theta^{w}_{1})=1-\sigma (x^{T}_{w}\theta^{w}_{1})$

第二次:$p(d^{w}_{3}|x_{w},\theta^{w}_{2})=1-\sigma (x^{T}_{w}\theta^{w}_{2})$

第三次:$p(d^{w}_{4}|x_{w},\theta^{w}_{3})=1-\sigma (x^{T}_{w}\theta^{w}_{3})$

第四次:$p(d^{w}_{5}|x_{w},\theta^{w}_{4})=1-\sigma (x^{T}_{w}\theta^{w}_{4})$

由Context(“足球”)预测“足球”出现的概率为:

$p(“足球”|Context(“足球”))=\prod_{j=2}^{5}p(d^{w}_{j}|x_{w},\theta^{w}_{j-1})$

于是,对于词典中的每个词w有:$p(w|Context(w))=\prod_{j=2}^{l^{w}}p(d^{w}_{j}|x_{w},\theta^{w}_{j-1})$

其中$l_{w}$表示w的huffman编码长度+1(w的带权路径上的节点数),$$p(d^{w}_{j}|x_{w},\theta^{w}_{j-1})=
\left\{\begin{matrix}
\sigma(x_{w}^{T}\theta^{w}_{j-1}) & ,d^{w}_{j}=0\\
1-\sigma(x_{w}^{T}\theta^{w}_{j-1}) & ,d^{w}_{j}=1
\end{matrix}\right.$$

或者表示为:$p(d^{w}_{j}|x_{w},\theta^{w}_{j-1})=[\sigma(x_{w}^{T}\theta^{w}_{j-1})]^{1-d^{w}_{j}}[1-\sigma(x_{w}^{T}\theta^{w}_{j-1})]^{d^{w}_{j}}$

对每个样本使用极大似然估计,于是模型的目标函数为:

$$\begin{align}
f &=\sum_{w\in C} log \prod_{j=2}^{l_{w}} \left \{  [\sigma(x_{w}^{T}\theta^{w}_{j-1})]^{1-d^{w}_{j}}\cdot [1-\sigma(x_{w}^{T}\theta^{w}_{j-1})]^{d^{w}_{j}}\right \} \\
&= \sum_{w\in C} \sum_{j=2}^{l_{w}} \left \{  ({1-d^{w}_{j}})\cdot log [\sigma(x_{w}^{T}\theta^{w}_{j-1})]+ {d^{w}_{j}}\cdot log[1-\sigma(x_{w}^{T}\theta^{w}_{j-1})]\right \}
\end{align}$$

用随机梯度下降法求解:

令$f(w,j)=({1-d^{w}_{j}})\cdot log [\sigma(x_{w}^{T}\theta^{w}_{j-1})]+ {d^{w}_{j}}\cdot log[1-\sigma(x_{w}^{T}\theta^{w}_{j-1})]$

求出$f(w,j)$关于$\theta^{w}_{j-1}$ 和$x_{w}$的梯度分别为:

$\frac{\partial f(w,j)}{\partial \theta^{w}_{j-1}}=[1-d^{w}_{j}-\sigma(x_{w}^{T}\theta^{w}_{j-1})]\cdot x_{w}$

$\frac{\partial f(w,j)}{\partial x_{w}}=[1-d^{w}_{j}-\sigma(x_{w}^{T}\theta^{w}_{j-1})]\cdot \theta^{w}_{j-1}$

参数更新公式:

$\theta^{w}_{j-1} :=\theta^{w}_{j-1}+\eta \cdot \frac{\partial f(w,j)}{\partial \theta^{w}_{j-1}}$

$v(\widetilde{w}) :=v(\widetilde{w})+\eta \cdot \frac{\partial f(w,j)}{\partial x_{w}}  ,v(\widetilde{w}) \in Context(w)$

这里有两点要说明:

1.由于$x_{w}=\sum_{\widetilde{w}\in Context(w)} v(\widetilde{w})$,可以证明$\frac{\partial f(w,j)}{\partial x_{w}} =\frac{\partial f(w,j)}{\partial v(\widetilde{w})} $

2.参数更新时,要等所有的$\theta^{w}_{j-1}$更新完成,然后更新$v(\widetilde{w})$

3.3 CBOW模型+Negative Sampling方法

word2vec_m1

图3.4

输入层,投影层:同上一个模型。

输出层:输出层共有N(=|D|)个 “参数-节点”对, 每个 节点分别对应词典D中的词,每个参数表示相应节点的分类器的参数。例如:$\theta^{u}$表示单词u的参数,$\sigma (x_{w}^{T}\theta^{u})$表示$x_{w}$被$\theta^{u}$预测为u的概率。

正样本、负样本:已知词w的上下文Context(w),需要预测w,因此,词w就是正样本,其他词都是负样本。然而,负样本非常多,至于怎么取,后面部分统一介绍。

给定一个样本(Context(w),w),假定我们选定的负样本集为NEG(w) $\neq \emptyset $,我们希望最大化:$$g(w)=\prod_{u \in \left\{ w \right\} \cup NEG(w) }p(u|Context(w))$$

其中$p(u|Context(w))=\left\{\begin{matrix}
\sigma (x_{w}^{T}\theta^{u}) & ,u=w \\
1-\sigma (x_{w}^{T}\theta^{u})& ,u \neq w
\end{matrix}\right.$

可以看出,最大化g(w),也就是让正样本概率最大化,负样本概率最小化。

我们定义:$L^{w}(u)=\left\{\begin{matrix}
1& ,u=w \\
0& ,u \neq w
\end{matrix}\right.$

则此模型的目标函数表示为:$$\begin{align}
f &=\sum_{w\in C} log g(w) \\
&= \sum_{w\in C} log \prod_{u \in \left\{ w \right\} \cup NEG(w) } p(u|Context(w)) \\
&= \sum_{w\in C} log \prod_{u \in \left\{ w \right\} \cup NEG(w) } \left \{ \right. [\sigma (x_{w}^{T}\theta^{u})]^{L^{w}(u)} \cdot [1-\sigma (x_{w}^{T}\theta^{u})]^{1-L^{w}(u)} \left. \right \}\\
&= \sum_{w\in C} \sum_{u \in \left\{ w \right\} \cup NEG(w) } \left \{ \right. {L^{w}(u)}\cdot log [\sigma (x_{w}^{T}\theta^{u})] + [1-{L^{w}(u)}]\cdot log [1-\sigma (x_{w}^{T}\theta^{u})] \left. \right \}\\
\end{align}$$

用随机梯度下降法求解:

令$f(w,u)={L^{w}(u)}\cdot log [\sigma (x_{w}^{T}\theta^{u})] + [1-{L^{w}(u)}]\cdot log [1-\sigma (x_{w}^{T}\theta^{u})] $

求出$f(w,u)$关于$\theta^{u}$和$x_{w}$的梯度分别为:

$\frac{\partial f(w,u)}{\partial \theta^{u}}=[L^{w}(u)-\sigma(x_{w}^{T}\theta^{u})]\cdot x_{w}$

$\frac{\partial f(w,u)}{\partial x_{w}}=[L^{w}(u)-\sigma(x_{w}^{T}\theta^{u})]\cdot \theta^{u}$

参数更新公式:

$\theta^{u} :=\theta^{u}+\eta \cdot \frac{\partial f(w,u)}{\partial \theta^{u}}$

$v(\widetilde{w}) :=v(\widetilde{w})+\eta \cdot \frac{\partial f(w,u)}{\partial x_{w}}  ,v(\widetilde{w}) \in Context(w)$

与上一个模型相似,这里有两点要说明:

1.由于$x_{w}=\sum_{\widetilde{w}\in Context(w)} v(\widetilde{w})$,可以证明$\frac{\partial f(w,u)}{\partial x_{w}} =\frac{\partial f(w,u)}{\partial v(\widetilde{w})} $

2.参数更新时,要等所有的$\theta^{u}$更新完成,然后更新$v(\widetilde{w})$

3.4 Skip-gram模型+Hierarchical Softmax方法

word2vec_11

图3.5

输入层:只含当前样本的中心词w的词向量v(w)$\in R^{m}$

投影层:恒等投影,依然是v(w)

输出层:与“CBOW模型+Hierarchical Softmax方法”一样,也是一棵huffman树

首先定义:$p(Context(w)|w)=\prod_{u \in Context(w)} p(u|w)$

p(u|w)的求法类似于之前的“CBOW模型+Hierarchical Softmax方法”中求p(w|Context(w) ),之前是用$x_{w}$来预测w,现在是用v(w)来预测所有的u:$$p(u|w)=\prod_{j=2}^{l^{u}}p(d^{u}_{j}|v(w),\theta^{u}_{j-1})$$

其中,$p(d^{u}_{j}|v(w),\theta^{u}_{j-1})=[\sigma(v(w)^{T}\theta^{u}_{j-1})]^{1-d^{u}_{j}}[1-\sigma(v(w)^{T}\theta^{u}_{j-1})]^{d^{u}_{j}}$

于是模型的目标函数为:$$\begin{align}
f &=\sum _{w \in C } \sum _{u \in Context(w)} \sum_{j=2}^{l^{u}} log \left \{ \right.[\sigma(v(w)^{T}\theta^{u}_{j-1})]^{1-d^{u}_{j}}\cdot [1-\sigma(v(w)^{T}\theta^{u}_{j-1})]^{d^{u}_{j}}\left. \right \} \\
&=\sum _{w \in C } \sum _{u \in Context(w)} \sum_{j=2}^{l^{u}} \left \{ \right. ({1-d^{u}_{j}})\cdot log [\sigma(v(w)^{T}\theta^{u}_{j-1})] + {d^{u}_{j}}\cdot log [1-\sigma(v(w)^{T}\theta^{u}_{j-1})]\left. \right \}
\end{align}$$

用随机梯度下降法求解:

令 $f(w,u,j)=\left \{ \right. ({1-d^{u}_{j}})\cdot log [\sigma(v(w)^{T}\theta^{u}_{j-1})] + {d^{u}_{j}}\cdot log [1-\sigma(v(w)^{T}\theta^{u}_{j-1})]\left. \right \}
$

则$f(w,u,j)$关于$\theta_{j-1}^{u}$和$v(w)$的梯度分别为:

$\frac{\partial f(w,u,j)}{\partial \theta^{u}_{j-1}}=[1-d^{u}_{j}-\sigma(v(w)^{T}\theta^{u}_{j-1})]\cdot v(w)
$

$\frac{\partial f(w,u,j)}{\partial v(w)}=[1-d^{u}_{j}-\sigma(v(w)^{T}\theta^{u}_{j-1})]\cdot \theta^{u}_{j-1}$

参数更新公式:

$\theta^{u}_{j-1} :=\theta^{u}_{j-1}+\eta \cdot \frac{\partial f(w,u,j)}{\partial \theta^{u}_{j-1}}$

$v(w) :=v(w)+\eta \cdot \frac{\partial f(w,u,j)}{\partial v(w)} $

3.5 Skip-gram模型+ Negative Sampling方法

word2vec_21

图3.6

输入层,投影层:同上一个模型。

输出层:与“CBOW模型+Negative Sampling方法”一样,也是N(=|D|)个 “参数-节点”对。

首先定义:$p(Context(w)|w)=\prod_{u \in Context(w)} p(u|w)$

p(u|w)的求法类似于之前的“CBOW模型+Negative Sampling方法”中求p(w|Context(w) ),之前是用$x_{w}$来预测w,现在是用v(w)来预测所有的u:$$p(u|w)=\prod_{z \in \left\{ u \right\} \cup NEG(u) }p(z|w)$$

其中,$p(z|w)=\left\{\begin{matrix}
\sigma (v(w)^{T}\theta^{z}) & ,u=z \\
1-\sigma (v(w)^{T}\theta^{z})& ,u \neq z
\end{matrix}\right.$

于是模型的目标函数为:$$\begin{align}
f &= \sum_{w \in C}\sum_{u \in Context(w)}\sum_{z \in \left \{ u \right \} \cup NEG(u)} log\left \{ [\sigma (v(w)^T\theta^z)]^{L^u(z)} \cdot [1-\sigma (v(w)^T\theta^z)]^{1-L^u(z)} \right \} \\
&=\sum_{w \in C}\sum_{u \in Context(w)}\sum_{z \in \left \{ u \right \} \cup NEG(u)} \left \{ {L^u(z)}\cdot log[\sigma (v(w)^T\theta^z)] + [1-L^u(z)]\cdot log [1-\sigma (v(w)^T\theta^z)] \right \}
\end{align}$$

用随机梯度下降法求解:

令 $f(w,u,z)=\left \{   {L^u(z)}\cdot log[\sigma (v(w)^T\theta^z)] + [1-L^u(z)]\cdot log  [1-\sigma (v(w)^T\theta^z)] \right \} $

则$f(w,u,z)$ 关于$\theta^{z}$ 和$v(w)$的梯度分别为:

$\frac{\partial f(w,u,z)}{\partial \theta^{z}}=[L^{u}(z)-\sigma(v(w)^{T}\theta^{z})]\cdot v(w)$

$\frac{\partial f(w,u,z)}{\partial v(w)}=[L^{u}(z)-\sigma(v(w)^{T}\theta^{z})]\cdot \theta^{z}$

参数更新公式:

$\theta^{z} :=\theta^{z}+\eta \cdot \frac{\partial f(w,u,z)}{\partial \theta^{z}}$

$v(w) :=v(w)+\eta \cdot \frac{\partial f(w,u,z)}{\partial v(w)}$

3.6 Negative Sampling方法

接下来介绍负样本是怎么选取的,见图3.7:

word2vec_21

图3.7

先看上面的线段,其中$I_{1},I_{2},…,I_{n}$为N(=|词典|)个相邻区间,总长度为1,区间$I_{i}$的长度$len(w_{i})$定义如下:$$len(w)=\frac {[counter(w)]^{\frac{3}{4}}}{\sum _{u \in D}[counter(u)]^{\frac{3}{4}}}$$

其中,$counter(w)$表示词w在语料C中出现的次数,加一个3/4次方是为了削弱极端高频词的影响。

再看下面的线段,$m_{i}$为等分点,M>>N,在$m_{0},m_{1},…,m_{M-1}$ 中随机取点$m_{r}$,若$m_{r}$落到了$I_{k}$区间中,则取样本$w_{k}$,用数学方式表示如下:$$Table(r)=w_{k} \ \  \ where \ \ \ m_{r} \in I_{k} ,r=0,1,2,…,M-1 $$

于是,每次随机生成一个数r(0<=r<M) ,则采样的样本为$Table(r)$。

4. 总结

本文主要介绍了word2vec工具包中的四种模型的模型结构及其梯度下降优化算法的详细数学推导过程,下一篇博文将会详细剖析word2vec源码的具体实现。

参考资料:
[1]Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[J]. arXiv preprint arXiv:1301.3781, 2013.
[2]Bengio Y, Ducharme R, Vincent P, et al. A neural probabilistic language model[J]. journal of machine learning research, 2003, 3(Feb): 1137-1155.
[3]Deep Learning in NLP (一)词向量和语言模型
[4]word2vec 中的数学原理详解(一)目录和前言
[5]word2vec使用指导

此条目发表在其他分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注