这几天把第三课推掉了,又到了写博客的时间,好开心,有木有
这一课主要讲了两大部分:第一大部分讲得是如何建立Object function并且如何找到optimum point;第二大部分讲的是如何评测生成的VSM的优劣。主要讲的是这两大部分,其中穿插了一些小的知识点,会在下面详细写出。
老样子,先写出Video/Slide的pipeline: Refresher: word2vec model -> Gradient Descent -> Stochastic Gradient Descent -> Skip-gram model and CBWM -> Intrinsic evaluation -> Extrinsic evaluation -> Ambiguity -> softmax and cross entropy error -> training word vectors or not?
Video/Slide
- Refresher: word2vec model
这一部分主要介绍了word2vec model的cost function
就是这个东东啦,其中T代表着windows的个数,c代表着context的wide。
最右边的p使用softmax计算
w_o就是上式左边的那个w_t+j,w_I就是上式右边的w_t。
我们习惯上把所有参数全部塞到一个长长长长的vector里面这个vector我们称它为theta,这样的话上式中的cost function里的参数就得有 2d*V个了(d是每个单词向量的长度,V是单词的个数,由于输入输出单词向量表示法不一样所以是二倍的)
- Gradient Descent
现在我们有了cost function就得想办法找到optimum point啦!当然最简单也是最容易想到的就是Gradient Descent,也就是对cost function的theta向量求导得到最佳下降梯度,然后用原theta减去这个梯度乘以step就得到更新后的向量了。这种方法每次找到的方向很精确,每次都能往最陡的坡度走,但是有一个问题,观察上面的公式一,我们的cost function是对所有windows进行相加,而每求一个梯度都得把所有的windows求一遍和,如果dataset小的话没什么问题,但是如果对于很大的dataset那么没步进一步的cost是很大的。所以SGD闪亮登场!
- Stochastic Gradient Descent
SGD不再对整个windows的和求梯度,而是对一个window求梯度之后就立即更新theta。
这个方法灰常好啊,收敛快呀,但是每一次更新都是针对这一个window里的单词更新的,这就意味着,一次更新最多更新2c - 1 个单词的参数,也就是 (2c-1)*d个参数。这样的话就不必每次更新整个参数矩阵,仅仅更新window的单词在参数矩阵中对应的列就好了。这样的话可以很大的提高计算效率,和存储效率。
- Skip-gram model and CBWM
解决了Gradient Descent的Cost大的问题,现在问题又来了(- -),上面第二个公式可以看到求概率P的时候使用到了softmax它的分母是对所有的words求和,我们的vocabulary通常是很大的,计算一次很痛苦的有木有,这个咋办呢?办法总是有的,我们观察上面的softmax的公式,可以发现,我们的目的就是让正确的word脱颖而出。那么这样的话我们取整个单词表的词就没必要了嘛,只要让正确的word的值大,其他随机的word和center
word组合的值小不是一样的嘛。于是skip-gram和negative sampling组合的方式应运而生!首先我们定义了一个noise distribution用来随机选取随机的word。
其中sigma函数是sigmod函数,这很好理解目的是要两个向量靠得更近方向更一致,那么sigmod函数中两个向量靠得越近值就越大,反之越小。
CBWM类似Skip-gram的逆运算在之前的博文中也有写就不再赘述了。
其中有一个要注意的是最终我们得到了L和L‘的参数矩阵,相当于得到了这个co-occurance矩阵里单词的信息,怎么处理这两个矩阵呢?一种办法是直接相加L_final = L + L',另一种方法是把两个矩阵连接起来,这样的结果就综合了输入矩阵和输入矩阵的信息。
- Intrinsic Evaluation
Intrinsic evaluation 是对VSM的一个简单迅速的评估。这种评估方法不放到整个系统中评估,而仅仅是评估一个subtask进行评估。评估过程很快,可以很好的理解这个系统。但是不知道放到实际的系统中是否也表现的很好。Intrinsic evaluation的第一种评估是Syntactic评估,这种评估方法问题比较少;第二种是semantic评估,存在一词多义的 问题,还有corpus的数据比较旧的问题,这两个问题都会影响评估结果。Glove word vector是至今Intrinsic evaluation才是结果最好的model,Asymmetric context只评估左边window的单词效果不好。More training time and more data对评估结果很有帮助。
- Extrinsic Evaluation
Extrinsic evaluation就是把VSM放到实际的任务中进行评估,花费时间较长,如果效果不好的话也不清楚是VSM的问题还是其他模块的问题或者是interaction的问题。有一个简单的办法确认是不是VSM的问题,把这个subsystem用其他的subsystem替换如果精度提高那就换上!
- Ambiguity
如果一个单词有很多个意思怎么办?如果你简单的就当作一个mean vector来处理那就会相当于把两个不同意思的向量进行向量相加,这显然是不准确的。解决方法在Notes讲得很详细,这里摘抄如下:
1. Gather fixed size context windows of all occurrences of the word(for instance, 5 before and 5 after)
2. Each context is represented by a weighted average of the context words’ vectors (using idf-weighting)
3. Apply spherical k-means to cluster these context representations.
4. Finally, each word occurrence is re-labeled to its associated cluster and is used to train the word representation for that cluster.
简单的说就是使用k-means聚类将如同的context先聚类出来,再给每个certriod赋相应的word,再把相应的context归给这个word,最后再用我们之前的普通训练方法训练。这就解决了一次多义的问题。
2. Each context is represented by a weighted average of the context words’ vectors (using idf-weighting)
3. Apply spherical k-means to cluster these context representations.
4. Finally, each word occurrence is re-labeled to its associated cluster and is used to train the word representation for that cluster.
- Softmax and cross entropy error
- training word vectors or not?
Paper -> Glove: Global Vectors for word representation
Paper -> Improving Word Representations via Global Context and Multiple Word Prototypes
版权声明:本文为博主原创文章,未经博主允许不得转载。