word2vec简要教程
一、 Word2Vec Tutorial
1.discrete representation(one-hot)的缺点
one-hot vector 不能够表示词之间的相似性,例子如下,motel和hotel是意思相近的两个词,可是两个词的one-hot vector却是正交的。
所以我们考虑使用一种维度较低并且有递推关系的向量来表示词,相似的词具有相似的向量。比如语料库有1W个词,如果用one-hot来表示,那么我们就用1w维的向量来表示它们,但是如果用了word2vec下面这种方法,我们只需要几百维就可以表示所有的词。
2.word2vec的简介
两种算法
1.Skip-grams (SG)
给定某个位置的单词,预测左右两边的词
2.Continuous Bag of Words (CBOW)
从该单词左右两边的词预测中间的词
两种训练的算法(为了加快训练速度)
1.Hierarchical softmax
2.Negative sampling
3. Skip-grams与Continuous Bag of Words (CBOW)
下面是Skip-grams 的演示图,CBOW应该也很容易想出来
$
Figure 1. Skip-grams 的演示图
4.以CBOW为例介绍Hierarchical softmax算法
接下来介绍一下Hierarchical softmax算法
Hierarchical softmax就是以词表中的所有单词,例如维基百科中所有出现的词,以词频为权重来构建哈夫曼树,不懂哈夫曼树的可以百度或者看这篇文章。叶子节点就代表每一个词,而非叶子节点代表了一类词(有点抽象,后面会看到每个词在经过非叶子节点时都做了类似逻辑归回的分类,把词归类于左右子节点可以看做是归于不同类, 如下图中的9结点可以代表关于足球的一类词,14结点代表一种人的状态)。
从根节点出发,到达指定叶子节点的路径是唯一的。Hierarchical Softmax正是利用这条路径来计算指定词的概率,而非用softmax来计算。
Figure 2. 哈弗曼树图 图片来源[1]
图中的叶子节点假如有V个,那么非叶子节点肯定是|V|-1个。以足球为例,从根节点到该叶子节点要经过的路径长度为
每经过一次非叶子结点,就相当于对词进行一次分类,所以从根节点出发,要到达巴西叶子节点,需要经过
整个模型分三层,首先输入层是所有其他附近的词向量,记为
其中d(w,j)=0代表负类, d(w, j)=1代表正类
所以在给定context的情况下输出词为w的概率就相当于从根节点一直被分类到叶子节点的过程。假设window_size为m,用式子表示如下
=
模型对语料中的全部词串计算概率值做连乘得到似然函数,再取对数得到对数似然 L, 假设语料库是有S个句子组成的一个句子序列(顺序不重要),整个语料库有V个词,对数似然函数就会构建成下面的样子
然后我们便可以对上式用最大似然法来求取参数。一般是使用随机梯度下降法来进行参数的更新。具体解法可参考文献[2]. 还有不明白为什么用哈夫曼树算出的结果跟条件概率相同的话,也可以参考文献[2]
5.以CBOW为例介绍Negative sampling
Negative sampling我个人的理解就是对于一篇文章中的词,我们先计算出每个词的词频(词出现的次数/文章的字数),然后将这些词根据词频的大小用一条0-1的线段来表示,词频大的占据的长度就较长,词频小的占据的长度就小。接下来将M个点均匀分布到这条线段上。这时候我们开始生成一个1-M的随机数,假设抽到3,我们就看3对应的位置属于哪一个词,如果是‘足球’,我们就忽略,如果不是那我们就记录下来,定义为负类,一般选5个即可。
接下来就是如何训练了,首先我们把足球上下文的词向量和求出来记为
关于这个式子的随机梯度推导,可以看这篇文章:word2vec 中的数学原理详解(五)基于 Negative Sampling 的模型。
参考文献
[1] 深度学习word2vec笔记之算法篇 falao_beiliu
[2] [Word2Vec学习笔记(四)——Negative Sampling 模型] Kevin_Duan
[3] DL4NLP——词表示模型(三)word2vec(CBOW/Skip-gram)的加速
[4] word2vec 中的数学原理详解 皮果提