本文是看了论文《Distributed Representations of Words and Phrases and their Compositionality》的学习笔记。
话不多说。
贴上cbow 和skip-gram的示意图,一个是以context预测word,一个是word预测上下文。
听同学说业界主要用skip-gram加上negative sampling这一套。论文里面也主要涉及到skip-gram
skip-gram的优化目标。要是word预测context的概率最大。
再贴上Hierarchical Softmax的公式,看起来复杂其实,就是树形结构,选择左右根据sigmoid的值。但是为什么说它是 “多个logistic regression”(有人有好的解释的话,感激不尽),这点笔者还是没找到能够说服自己的答案。只能浅显的理解为,word有了,context中的word也就有了,所以树结构中每次向左向右看做一次分类,目标词所在的类别相当于逻辑回归中的正确类别。
有朋友问为什么要用而且能用Hierarchical Softmax,我的回答是要用是因为可以降低复杂度,能用我感觉是因为这种结构能够使概率加起来为1吧。我们的目标是使得p(context | word)的概率最大,我们只是换了一种方式定义这个概率。但是目标没变。
接下来就是负采样了。
感谢linger,懒得去论文中截图了。 全是盗的她的图。
http://blog.csdn.NET/lingerlanlan/article/details/38048335
Negative-Sampling(NEG)基于skip-gram模型,但实际上是优化另一个目标函数,Mikolov说NEG是从NCE(Noise Contrastive Estimation)简化而来,用于提高训练速度,也可以改善词向量的质量。相比于分层Softmax,NEG使用的方式是随机负采样,而不是Huffman树。
负采样换了一个目标函数。
函数前半部分表示一个正样本,后半部分是若干个负样本。
怎样理解负采样,目标函数的形式为何长这样,建议去看看下面的解释。
http://qiancy.com/2016/08/24/word2vec-negative-sampling/?utm_source=tuicool&utm_medium=referral
接下来介绍论文中提到的两个训练过程中的trick。
高频词二次抽样
the vector representations of frequent words do not change significantly
after training on several million examples.
经过很多次迭代训练之后,再次更新的时候高频词的向量不应该改变太大。
To counter the imbalance between the rare and frequent words, we used a simple subsampling approach:
each word wi in the training set is discarded with probability computed by the formula
为了平衡低频词和高频词,使用了一种二次抽样的方法。对于每个词语,如果由以下公式算出的概率少某个值,则丢弃。
其中,t是一个设定的阈值,f是词频。
希望大家批评指正,希望大家批评指正,希望大家批评指正。