以前已经看过很多次Skip-gram模型,负取样方法,但是真正用的时候,对其中的原理仍然是一知半解,最近又阅读了一下‘Distributed Representations of Words and Phrases and their Compositionality’这篇文章,想把自己看懂的地方记录下来。可能部分内容有网络的引用,因为完全是比较粗糙的自己记笔记,就不一一列出了。
Skip-gram模型
Skip-gram 模型是给定一个当前词word,去预测其上下文context。训练的目标就是去找到word的表示,该表示对于预测其上下文是有用的。它的目标函数是:
基本的函数定义其概率是采用softmax函数:
补充:softmax函数多用于多分类问题和神经网络中,能将一些参数,数据映射为(0-1)区间的概率输出。
Hierarchical Softmax优化
因为概率的分母需要遍历整个word集合,这个计算代价是非常大的。hierarchical softmax采用了一个二叉树(详见我的另一篇博客)的表示形式,W个词作为叶子节点,对于每个节点,明确地表示两个相对子节点的概率,采用随机游走(详见我的另一篇博客)的形式定义词的概率,概率的形式转变为:
举例说明,采用哈夫曼树的形式来构建二叉树,如下图所示:
其中从根节点到达叶子的过程中,每一次分支都相当于一次二分类的过程,目标函数转变为:
其中n(w,j)是根节点到达w路径上的第j个节点,L(w)是路径的长度,ch(n)是n的任意一个固定的孩子,所以,目标函数可以解释为,因为经过L(w)-1次的二分类,所以概率是每一次二分类概率的乘积,[[]]里面的判断部分,如果正确二分类则为1,否则0。如果到达w的路径上的第j+1个节点与路径上节点第j个节点的任意子节点相同,有点绕呀!就是路径上的下一个节点是不是当前路径节点的子节点。算法复杂度变为了log(W)
Negative Sampling
负取样方法真的是大名鼎鼎的,看过的好多篇论文都是采用这个方法进行优化的呀。自己理解它的主要思想就是让正例最大化,负例最小化,将二者的差值变大。目标函数如下:
其中第一项是正例,可以理解为确实是互为上下文的关系,第二项是负例,表示取k个负例,它的取样方法Pn(w)为unigram取样,即为(word的次数/总数),这里采用的是3/4,就是分子乘以3/4次幂,E代表取服从该分布的均值。
觉得自己好像已经理解了这几个模型,但是我的表述应该不清楚,希望大家也都能理解,还是推荐大家阅读算法出处的英文论文,会更通透!