深度学习 word2vec (二)

来源:互联网 发布:矩阵 w什么意思 编辑:程序博客网 时间:2024/05/14 11:05

在看 word2vec 的资料的时候,经常会被叫去看那几篇论文,而那几篇论文也没有系统地说明 word2vec 的具体原理和算法,这样看资料就没有得到应有的效果。
为了节省看无用资料的时间,就整理了一个笔记,希望能帮助各位尽快理word2vec的基本原理,避免浪费时间。

一 、CBOW 加层次的网络结构与使用说明
Word2vec 总共有两种类型, 每种类型有两个策略, 总共 4 种。 这里先说最常用的一种。
这种的网络结构如下图。
这里写图片描述

其中第一层,也就是最上面的那一层可以称为输入层。输入的是若干个词的词向量(词向量的意思就是把一个词表示成一个向量的形式表达,后面会介绍) 。中间那个层可以成为隐层,是输入的若干个词向量的累加和,注意是向量的累加和,结果是一个向量。

第三层是方框里面的那个二叉树, 可以称之为输出层, 隐层的那个节点要跟输出层的那个二叉树的所有非叶节点链接的, 线太多画不过来了。 第三层的这个二叉树是一个霍夫曼树,每个非叶节点也是一个向量,但是这个向量不代表某个词,代表某一类别的词;每个叶子节点代表一个词向量,为了简单只用一个 w 表示,没有下标。另外要注意的是,输入的几个词向量其实跟这个霍夫曼树中的某几个叶子节点是一样的, 当然输入的那几个词跟它们最终输出的到的那个词未必是同一个词, 而且基本不会是同一个词, 只是这几个词跟输出的那个词往往有语义上的关系。

还有要注意的是, 这个霍夫曼树的所有叶子节点就代表了语料库里面的所有词, 而且是每个叶子节点对应一个词,不重复。

这个网络结构的功能是为了完成一个的事情——判断一句话是否是自然语言。 怎么判断呢?使用的是概率,就是计算一下这句话的“一列词的组合”的概率的连乘(联合概率)是多少,如果比较低,那么就可以认为不是一句自然语言,如果概率高,就是一句正常的话。这个其实也是语言模型的目标。前面说的“一列词的组合”其实包括了一个词跟它的上下文的联合起来的概率,一种普通的情况就是每一个词跟它前面所有的词的组合的概率的连乘,这个后面介绍。

对于上面的那个网络结构来说,网络训练完成后,假如给定一句话 s,这句话由词
w1,w2,w3,…,wT 组成,就可以利用计算这句话是自然语言的概率了,计算的公式是下面的公式
这里写图片描述

其中的 Context 表示的是该词的上下文,也就是这个词的前面和后面各若干个词,这个“若干” (后面简称 c)一般是随机的,也就是一般会从 1 到 5 之间的一个随机数;每个q(xj|contextj)代表的意义是前后的 c 个词分别是那几个的情况下,出现该词的概率。举个例子就是: “大家 喜欢 吃 好吃 的 苹果”这句话总共 6 个词,假设对“吃”这个词来说 c随机抽到 2,则“吃”这个词的 context 是“大家” 、 “喜欢” 、 “好吃”和“的” ,总共四个词,这四个词的顺序可以乱,这是 word2vec 的一个特点。

计算q(xj|contextj)的时候都要用到上面的那个网络,具体计算的方法用例子说明,假设就是计算“吃”这个词的在“大家” 、 “喜欢” 、 “好吃”和“的”这四个词作为上下文的条件概率,又假设“吃”这个词在霍夫曼树中是最右边那一个叶子节点(在下面的图中的节点 R) ,那么从根节点到到达它就有两个非叶节点,根节点对应的词向量命名为 A,根节点的右孩子节点对应的词向量命名为 B,另外再假设“大家” 、 “喜欢” 、 “好吃”和“的”这四个词的词向量的和为 C,则
这里写图片描述

这里写图片描述
符号为sigmoid公式。

要注意的是,如果“吃”这个词在非叶节点 B 的左孩子节点(假设称为 E)的右边的那个叶子节点(在下面的图中的节点 S) ,也就是在图中右边的三个叶子的中间那个,则有
这里写图片描述

上面的那句话的每个词都计算q(xj|contextj)后连乘起来得到联合概率,这个概率如果大于某个阈值,就认为是正常的话;否则就认为不是自然语言,要排除掉。
对于这个神经网络的描述索然无味, 因为主角也不是这个概率, 这个神经网络最重要的是输出层的那个霍夫曼树的叶子节点上的那些向量, 那些向量被称为词向量, 词向量就是另外一篇博文里面介绍的,是个好东西。
怎么得到这些词向量更加是一个重要的过程, 也是 word2vec 这整个算法最重要的东西,后面会认真介绍。

二.优化目标与解问题

2.1 从霍夫曼树到条件概率的计算
前面已经提过语言模型的目标就是判断一句话是否是正常的, 至于怎么判断则需要计算很多条件概率如q(xj|contextj),然后还要把这些条件概率连乘起来得到联合概率。这样就带来了问题了——怎么去计算q(xj|contextj),有很多办法的,后面的章节会介绍。这里的word2vec 的计算这个条件概率的方法是利用神经网络的能量函数,因为在能量模型中,能量函数的功能是把神经网络的状态转化为概率表示,这在另外一篇博文 RBM 里面有提到,具体要看 hinton 的论文来了解了。能量模型有个特别大的好处,就是能拟合所有的指数族的分布。那么,如果认为这些条件概率是符合某个指数族的分布的话,是可以用能量模型去拟合的。总之 word2vec 就认为q(xj|contextj)这个条件概率可以用能量模型来表示了。
既然是能量模型,那么就需要能量函数,word2vec 定义了一个非常简单的能量函数
E(A,C) = −(B ∙ D)
其中 A 可以认为是某个词的词向量,C 是这个词的上下文的词向量的和(向量的和) ,基本上就可以认为 C 代表 Context;中间的点号表示两个向量的内积。

0 0