Word Vectors and Word Senses
1 Word2vec
Word2vec的作用
word2vec的作用就是学习词向量的一个方法
word2vec的主要思想
- 对语料库的每个单词进行迭代
- 使用词向量预测上下文单词
- 更新词向量来让预测更加的准确
Word2vec的参数和计算
- 每行代表一个单词的词向量,点乘后得到的分数通过softmax映射为概率分布,我们得到的概率分布式是在该中心词的基础上的上下文中的单词的概率分布,(注意:该分布与上下文所在的位置是没有关系的(应该都是P(o|c),所以在每个位置的预测是一样的)
- 我们希望模型对上下文中(相当频繁)出现的所有单词给出一个合理的高概率估计。
- the、and 、that、of 这样的停用词,是每一个单词点乘后得到的较大概率的单词。
优化:梯度下降
梯度下降:每次使用全部样本更新
复杂梯度下降:每次知识用单个样本进行更新
mini-batch具有以下优点:
- 通过平均值,减少梯度估计的噪音
- 在GPU上并行化运算,加快运算速度
存在问题:
只更新U、V中确定的某几行。
分母中对语料库中所有的单词都进行求点乘,代价太大,所以采用负采样的方法。
负采样
1、为对中心词向量和外围词向量的点乘进行sigmoid计算,把softmax变成sigmoid。
2、选取了K个负样本,负样本为窗口之外的样本。对于窗口中的每个词u,计算uovc的sigmoid,计算负样本和中心词的点乘ujvc,求sigmoid。最大化uovc,最小化ujvc,得出目标函数如下所示。
2 共现矩阵
两个选择:
窗口和全文档
窗口:和word2vec类似
文档:给出普遍的话题,导致潜在语义分析。
共现矩阵的例子如下,其中窗口大小设置为1
共现矩阵存在的问题:
随着语料库的大小的增大,向量的大小会增长。
非常高维,需要许多存储空间。
子序列分类问题模型有非常稀疏的问题。
模型不健壮
解决方案:
使用低维度的向量。如何降维呢?
采用奇异值分解,把所有信息量都浓缩在一个小的维度向量中。
基于计数的模型和直接预测的模型比较:
计数模型:
训练速度快
有效的利用数据
主要用来获取单词的相似度
对于出现次数多的单词基于重视
直接预测:
与语料库大小有关
数据使用不高效
提高其他任务的性能
能捕捉到复杂的语义模式
共现概率的比值可以对意义成分进行编码。
如何获得共现概率的比率呢?
glove模型Combining the best of both worlds GloVe