word2vec原理_一篇浅显易懂的word2vec原理讲解

1125e906a52e825382d9692f06686f8c.png

1. 引言

在自然语言处理任务中,文本向量化往往是任务中必不可少的基础工作,因此如何更好地将文本向量化就显得尤为重要。词是自然语言文本中最小的语义单元,自然语言文本是由词序列构成的,因此如果能够完成对词的向量化,那么文本向量化的任务也就迎刃而解了。

词袋模型(bag of words)是最早的以词为基本处理单元的文本向量化方法,词袋模型通过先构建一个包含语料库中所有词的词典,然后根据词典完成对每个词的向量化,进而完成文本向量化。例1给出了词袋模型的词项量化和文本向量化的流程。

例1 给定一个包含两个文本的语料库,文本内容分别如下:

1)John likes to watch movies, Mary likes too.

2)John also likes to watch football games.

通过这两个文本构建如表1的词典:

a8349585ab4b9fc91bdb4bb66765cd00.png
表1 基于语料库构建的词典

通过表1的词典,就可以将所有的词向量化了,每个词的向量长度都是词典的大小,然后向量中元素全是0, 除了一个位置的元素是1,这个位置是词在词典中的index。以watch为例,watch在词典中的index是4,那么watch的向量中第四个位置是1,其余都是0,这种表示方法称为one-hot向量表示,如下:

watch = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]

完成对所有词的向量化之后,就可以得出两个文本的向量化结果,每个文本的向量长度都是词典的大小,向量中的每个位置的元素代表词典中该位置的词在文本中出现的次数。以文本1为例,John出现了1次,likes出现了2次,football出现了0次等等,结果如下:

文本1 = [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

词袋模型的几个问题:

  • 维度灾难:如果词典中有很多个词,那么每个词都是一个维度很高的向量
  • 未保留词序:只将文本看成是一袋子词
  • 语义鸿沟:通过向量表示无法体现两个词是否为同义词

为了解决词袋模型的问题,通过语言模型构建词向量的方式出现了。

2. 统计语言模型与神经网络语言模型

自然语言中,一个句子是由多个词语按顺序组合构成。简单地说,统计语言模型就是计算这个组合出现的概率。

假设有一个句子

,该句子含有
个词,分别是
,符号
表示词序列(
),则该句子(词语按顺序组合成这个句子)的概率为

利用贝叶斯公式,

可以被进一步拆解为

那么问题就由计算概率

变成了计算概率
,其中

关于

的计算,本文介绍n-gram模型和神经网络模型两种方式,本节介绍n-gram模型,神经网络模型在下一节介绍。

n-gram语言模型

利用贝叶斯公式,有

再根据大数定律,用频数代替频率,有

公式

表示词
出现的概率和它前面所有的词
有关。 表示
在语料库中出现的次数,当i很大时,计算
是非常耗时间的。n-gram模型假设一个词的出现只与它前面的固定数目的词有关系,相当于做了一个n-1阶的Markov的假设,认为一个词的出现只与它前面n-1个词相关,即

通过n-gram模型的简化之后,计算

的复杂度大大减小了。

神经网络语言模型

除了用n-gram模型计算概率

,还可以使用神经网络模型计算
,这个神经网络的输入是词序列,输出是概率
,如图1所示。

ff413a0039a1ae24de5b71c4a8c92d0e.png
图1 神经网络语言模型

图1的神经网络模型包含三层,第一层是输入层

,然后经过非线性变换tanh到达第二层,最后经过非线性变换softmax输出结果。公式如下:

在求解神经网络语言模型的时候,存储在表

中的词向量是我们想要的,模型输出的最终结果
反而不是我们想要的,所以说词向量是神经网络语言模型的副产物。

3. word2vec(CBOW和Skip-Gram)

神经网络语言模型包含两个非线性层,求解起来复杂度很高,于是出现了两种更高效的神经网络模型CBOW和Skip-Gram。

CBOW

CBOW 是 Continuous Bag-of-Words 的缩写,与神经网络语言模型不同的是,CBOW去掉了最耗时的非线性隐藏层。

c1fdfcacb7302ab7d4a9de3a7036687b.png
图2 CBOW

从图中可以看出,CBOW模型预测的是

,由于图中目标词
前后只取了各两个词,所以窗口的总大小是2。假设目标词
前后各取k个词,即窗口的大小是k,那么CBOW模型预测的将是

输入层到隐藏层

以图2为例,输入层是四个词的one-hot向量表示,分别为

(维度都为V x 1,V是模型的训练本文中所有词的个数),记输入层到隐藏层的权重矩阵为
(维度为V x d,d是认为给定的词向量维度),隐藏层的向量为
(维度为d x 1),那么

其实这里就是一个简单地求和平均。

隐藏层到输出层

记隐藏层到输出层的权重矩阵为

(维度为d x V),输出层的向量为
(维度为V x 1),那么

注意,输出层的向量

与输入层的向量为
虽然维度是一样的,但是
并不是one-hot向量,并且向量
中的每个元素都是有意义的。例如,我们假设训练样本只有一句话“I like to eat apple”,此刻我们正在使用 I、like、eat、apple 四个词来预测 to ,输出层的结果如图3所示。

3eff59fc79379c87445a2757c9a02098.png
图3 向量y的例子

向量y中的每个元素表示我用 I、like、eat、apple 四个词预测出来的词是当元素对应的词的概率,比如是like的概率为0.05,是to的概率是0.80。由于我们想让模型预测出来的词是to,那么我们就要尽量让to的概率尽可能的大,所以我们目标是最大化函数

有了最大化的目标函数,我们接下来要做的就是求解这个目标函数,首先求

,然后求梯度,再梯度下降,具体细节在此省略,因为这种方法涉及到softmax层,softmax每次计算都要遍历整个词表,代价十分昂贵,所以实现的时候我们不用这种方法,而是用第4节中的层次softmax和负采样。

Skip-Gram

Skip-Gram的模型图与CBOW恰好相反,如图4所示。

19b7ca4b9df593a4e49293e97e38291c.png
图4 Skip-Gram

从图中可以看出,Skip-Gram模型预测的是

,由于图中词
前后只取了各两个词,所以窗口的总大小是2。假设词
前后各取k个词,即窗口的大小是k,那么Skip-Gram模型预测的将是
.

输入层到隐藏层

以图2为例,输入层是词的one-hot向量表示,分别为

(维度都为V x 1,V是模型的训练本文中所有词的个数),记输入层到隐藏层的权重矩阵为
(维度为V x d,d是认为给定的词向量维度),隐藏层的向量为
(维度为d x 1),那么

隐藏层到输出层

记隐藏层到输出层的权重矩阵为

(维度为d x V),输出层的向量为
(维度为V x 1),那么

注意,输出层的向量

与输入层的向量为
虽然维度是一样的,但是
并不是one-hot向量,并且向量
中的每个元素都是有意义的。具体的例子见CBOW中的图3,Skip-Gram里我们目标是最大化函数

有了最大化的目标函数,我们接下来要做的就是求解这个目标函数,首先求

,然后求梯度,再梯度下降,具体细节在此省略,因为这种方法涉及到softmax层,softmax每次计算都要遍历整个词表,代价十分昂贵,所以实现的时候我们不用这种方法,而是用第4节中的层次softmax和负采样。

4. 层次softmax和负采样

由于第3节中的softmax层非常昂贵,每次计算的复杂度为

,所以我们用层次softmax或者负采样来替换掉输出层,降低复杂度。

层次softmax

首先,层次softmax是一棵huffman树,树的叶子节点是训练文本中所有的词,非叶子节点都是一个逻辑回归二分类器,每个逻辑回归分类器的参数都不同,分别用

表示。假定分类器的输入是向量
,记逻辑回归分类器输出的结果
,将向量
传递给节点的左孩子的概率为
,否则传递给节点的右孩子的概率是
。重复这个传递的流程直到叶子节点。

以图3中的例子为基础,更改之后的模型如图5.1和图5.2所示。

77e6361d34fcaa3240569b17fce3b6ef.png
图5.1 基于层次softmax的CBOW

77e6361d34fcaa3240569b17fce3b6ef.png
图5.2 基于层次softmax的Skip-Gram

从图5.1和图5.2可以看出,我们就是将隐藏层的向量

直接传给了一个层次softmax,层次softmax的复杂度为
。层次softmax采样到每个词的概率分别如下:

采样到 I 的概率

采样到 eat 的概率

采样到 to 的概率

采样到 like 的概率

采样到 apple 的概率

对于图5.1的CBOW模型或图5.2的Skip-Gram模型,如果我们要预测的词是 to ,那么我们就要让

尽量大一点,所以现在我们的任务转化为了训练
个逻辑回归分类器。CBOW模型和Skip-Gram模型训练的目标函数与之前形式一样,为

负采样

负采样实际上是采样负例来帮助训练的手段,其目的与层次softmax一样,是用来提升模型的训练速度。我们知道,模型对正例的预测概率是越大越好,模型对负例的预测概率是越小越好。由于正例的数量少,很容易保证每个正例的预测概率尽可能大,而负例的数量特别多,所以负采样的思路就是根据某种负采样的策略随机挑选一些负例,然后保证挑选的这部分负例的预测概率尽可能小。所以,负采样策略是对模型的效果影响很大,word2vec常用的负采样策略有均匀负采样、按词频率采样等等。

CBOW

以“I like to eat apple”为例子,假设窗口的大小是2,即我们会用 I to 来预测 like,所以在这里我们就认为(I,like)和(to,like)都是正例,而(I,apple)、(to,apple)就是负例,因为(I,apple)、(to,apple)不会出现在正例中。那么,对于给定的正样本(Context(w),w)和采样出的负样本(NEG(w),w),有

这里的

是词w的向量表示,
表示隐藏层的输出向量(详见第3节中)

我们需要最大化的目标函数为

简单来说,上述目标函数的含义就是让正例的概率更大,负例的概率更小

Skip-Gram

以“I like to eat apple”为例子,假设窗口的大小是2,即我们会用 like 来预测 I to,所以在这里我们就认为(like,I)和(like,to)都是正例,而(like,apple)就是负例,因为(like,apple)不会出现在正例中。那么,对于给定的正样本(w,context(w))和采样出的负样本(w,NEG(w)),有

我们需要最大化的目标函数为

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值