课程目标
- 简单回顾词向量和词向量模型word2vec
- 优化基础
- 通过计数,我们能更有效的抓住这一本质吗
- 词向量的glove模型
- 评估词向量
- 词的含义
本人也是刚入门,有些地方因为不是很理解翻译的不好,希望大家积极指正!!!
一、word2vec的复习
迭代语料库中的每个单词
使用词向量预测周围的单词
向量是行向量的形式。U*v4是外围词向量和中心词向量的乘积。在计算乘积的softmax。
简单的说word2vec就是把意思相近的单词放在空间中相近的地方。
二、优化:梯度下降
J(θ)为希望最小化的代价函数。往负梯度方向更新参数,不断重复。
更新方程:
存在问题:
J(θ)是关于整个语料库所有窗口的函数,求梯度代价很大。
解决方案:SGD随机梯度下降。随机选取窗口进行梯度更新。
但是在每个窗口中,最多有2m+1个单词,所以梯度非常稀疏。
解决方案:
只更新U、V中确定的某几行。
skip-gram中的负采样。
分母中对语料库中所有的单词都进行求点乘,代价太大,所以采用负采样的方法。
负采样:
1、为对中心词向量和外围词向量的点乘进行sigmoid计算,把softmax变成sigmoid。
2、选取了K个负样本,负样本为窗口之外的样本。对于窗口中的每个词u,计算uo*vc的sigmoid,计算负样本和中心词的点乘uj*vc,求sigmoid。最大化uo*vc,最小化uj*vc,得出目标函数如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/1d5596f3bfaff89fbeee847ebb763423.png)
三、共现矩阵
两个选择:
窗口和全文档
窗口:和word2vec类似
文档:给出普遍的话题,导致潜在语义分析。
共现矩阵的例子如下,其中窗口大小设置为1
共现矩阵存在的问题:
随着语料库的大小的增大,向量的大小会增长。
非常高维,需要许多存储空间。
子序列分类问题模型有非常稀疏的问题。
模型不健壮
解决方案:
使用低维度的向量。如何降维呢?
采用奇异值分解,把所有信息量都浓缩在一个小的维度向量中。
基于计数的模型和直接预测的模型比较:
计数模型:
训练速度快
有效的利用数据
主要用来获取单词的相似度
对于出现次数多的单词基于重视
直接预测:
与语料库大小有关
数据使用不高效
提高其他任务的性能
能捕捉到复杂的语义模式
共现概率的比值可以对意义成分进行编码。
如何获得共现概率的比率呢?
glove模型Combining the best of both worlds GloVe
四、如何评估一个词向量?(不懂啥意思)
就像语义分析中的两个方面:内在和外在
内在:
在一个特殊的子任务上评估结果
更快的训练
帮助理解其他系统
除非与实际任务建立了相关性,否则不清楚是否真的有用
外在:
在一个真正的任务上评估
可能会花很长一段时间计算准确度
不清楚子系统是问题所在,还是它的交互作用,还是其他子系统
如果用另一个子系统替换一个子系统可以提高精确度——>获胜!
内在词向量评估
词向量类比:使用余弦cos计算两个词向量的相似度。
问题:相同的单词有不同的含义。
怎么办?
使用加权求不同含义的和。
比如pike这个单词,有多个不同的含义,计算公式如下图所示。f为权重。
外在单词向量评估:
该类中的后续任务。
一个例子:命名体识别:识别出名字,组织和位置等。词向量表示的好效果就好。