1、如何使用神经网络训练条件概率?
在word2vec的四种网络结构中,它们的关键就是对条件概率函数p(w|Context(w))或者p(Context(w)|w)的构造。
对于word2vec中基于Hierarchical Softmax的CBOW模型,优化的目标函数形如:
而基于 Hierarchical Softmax的Skip-gram模型,优化目标函数形如:
以下就以基于Hierarchical Softmax的CBOW模型来介绍word2vec是如何训练条件概率的。(其他的模型都大同小异)
以参考文献的例子为例:假设有一句话”大家喜欢吃好吃的苹果”,这里进行分词后得到”大家”、”喜欢”、”吃”、”好吃”、”的”、”苹果”六个词。假设求”吃”这个词在”大家”、”喜欢”、”好吃”、”的”为上下文的条件概率,假设”吃”这个词是在下图huffman树中的节点R,根节点对应的词向量名为A,根节点右边子节点对应的词向量为B,假设”大家”、”喜欢”、”好吃”、”的”这四个词的词向量之和为C,则:
其中 σ 是指Sigmoid函数。
如果”吃”代表的是S那个节点,则有:
在word2vec中计算条件概率p(wi|Contexti)的方法是利用神经网络的能量函数,它定义了一个简单的能量函数:
A可以认为是某个单词的词向量,C是这个单词上下文词向量之和,可以认为C就是上下文,(A⋅C)代表两个向量的内积。
则词A在上下文词向量C下的概率为:
如上式所示,其中V表示语料库中的总词数,则要求A这个词在上下文C中出现的概率,就必须把语料库中的所有的词都遍历一边,这是非常耗时的。所有就把语料库分为两类,分别称为G类和H类,则有:
即A在上下文C中出现的概率是等于A在上下文C,并且为G类条件下的出现的概率乘以C条件下G类词的概率。其中:
即不用关心这两类用什么表示,只要用一个F=H-G的类词向量就可以计算 P(G|C) 了,所以很节省时间。又有:
因此可以将上式继续二分,知道最后只有一个单词为止。
总的来说,p(wi|Contexi)可以用以下的公式计算: