简介
word2vec 是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效
工具,采用的模型有 CBOW( Continuous Bag-Of-Words,即连续的词袋模型) 和 Skip-Gram 两种。 word2vec 代码链接为: https://code.google.com/p/word2vec/,
遵循 Apache License 2.0 开源协议,是一种对商业应用友好的许可,当然需要充
分尊重原作者的著作权。
word2vec 通过训练,可以把对文本内容的处理简化为 K 维向量空间中的向量
运算,而向量空间上的相似度可以用来表示文本语义上的相似度。因此, word2vec
输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分
析等等。使用word2vec处理后的词可以对它们做向量的加减乘除操作等。这样将词的表示进行量化,更易计算它们之间的相似度。
使用谷歌开源的Word2vec训练文本后可以得到每个词的向量值。也可以调用相应的包进行短语训练,或者使用多种计算相似度的方法。
Word2vec使用的词向量
Distributed representation 最早由 Hinton 在 1986 年提出[8]。 其基本思想是
通过训练将每个词映射成 K 维实数向量( K 一般为模型中的超参数), 通过词之
间的距离(比如 cosine 相似度、欧氏距离等) 来判断它们之间的语义相似度。 而 word2vec 使用的就是这种 Distributed representation 的词向量表示方式。
前身
NNLM
NNLM 是 Neural Network Language Model 的缩写,即神经网络语言模型。
NNLM采用的是 Distributed Representation,即每个词被表示为一个浮点向量。
目标是要学到一个好的模型:
�(��, ��−1 ,… , ��−n+2, ��−�+1) = �(��|�1 �−1)
需要满足的约束为:
�(��, ��−1 ,… , ��−n+2, ��−�+1) > 0
∑ �(i, ��−1 , … , ��−n+2, ��−�+1) = 1
向量中的
第 i 个元素表示概率�(�� = �|�1 �−1)。 训练的目标依然是最大似然加正则项, 即:
Max Likelihood = max 1/�*∑� ����(��, ��−1 , … , ��−n+2, ��−�+1; θ) + �(θ)
其中θ为参数, �(θ)为正则项,输出层采用 softmax 函数:
�(��|��−1 ,… , ��−n+2, ��−�+1) =e^(�*��)/∑� (�^��)
其中��是每个输出词 i 的未归一化 log 概率,计算如下:
� = � + �� + �tanh(� + ��)
其中 b, W, U, d 和 H 都是参数, �为输入,需要主要的是,一般的神经网
络输入是不需要优化,而在这里, � = (�(��−1), �(��−2), … , �(��−�+1)),也是
需要优化的参数。在图中, 如果下层原始输入 x 不直接连到输出的话,可令 b=0,
W=0。
Log-linear
Log-linear 也是 Word2vec 所用模型的前身。 Log-linear 模型有以下成分组成:
1. 一个输入集合 X;
2. 一个标注集合 Y, Y 是有限的;
3. 一个正整数 K 指定模型中向量的维数;
4. 一个映射函数 f: X Y ´ ® K ,即将任意的( x, y)对映射到一个 K 维
实数向量;
5. 一个 K 维的实数参数向量v Î K 。
对任意的 x, y,模型定义的条件概率为:
P(y|x,v) =e^v*f(x,y)/ åe^(v*f(x,y’))
模型
CBOW
CBOW 是 Continuous Bag-of-Words Model 的缩写,是一种与前向 NNLM 类似
的模型,不同点在于 CBOW 去掉了最耗时的非线性隐层且所有词共享隐层。 如
下图所示。 可以看出, CBOW 模型是预测 P(wt|wt-k,wt-(k-1)…,wt-1,wt+1,wt+2…,wt+k)。