关于Word2Vec的简单理解
Word2vec中有两个方法,第一个方法是CBOW用上下文预测当前词,第二个方法是Skip-gram用当前词预测上下文。两个方法都有三层的神经网络
如图,左边是CBOW框架,输入是词的上下文,中间层是对每个词向量求合,第三层是输出的预测词。右边是Skip-gram框架,输入是当前词,中间层相当于输入层的投影,输出层是预测的当前词的上下文。
基于Hierarchical Softmax的CBOW
以“我喜欢看巴西足球世界杯”这句话为例。如图,输入的是上下文的初始化词向量,中间层对输入的词向量做累加,输出层是用整个文章分出来的词做词频统计构建的huffman树,以预测的词作为叶子节点,以各词出现的次数作为权值。
假设我要预测的词是“足球”,上下文是“巴西”和“世界杯”,初始化向量再求合最后进入huffman树,根据huffman树确定足球的huffman编码为1001,于是足球的从根节点到叶子节点的路径确定了,二叉树每经过一个节点都会选择是走向“1”或是走向“0”,这就相当于一个二分类问题,于是涉及到sigmoid函数对输入的值转变为“0”或“1”,每一个经过的节点都有一个sigmoid函数,根据sigmoid函数的计算公式得到在每个节点分为“0”的概率为
分为“1”则是1减这个值,其中θ是函数的参数,假如词向量是10维,则每个sigmoid函数的参数有10个
经过所有的节点得到的概率再求积得到最后的如图的目标函数,也是这个样子
然后对目标函数用梯度上升优化算法进行优化,也就是目标函数对θ求偏导,找到概率最大的值相对应的参数θ。
然而x和θ从公式中来看是相对称的,于是目标函数对x求偏导就可以更新最开始初始化的词向量
对每一个词都进行训练于是就得到了词预测的模型。
其实我只是个小白只懂大概的思路,涉及到的计算还不太会。n(≧▽≦)n