本讲主要简述以下几个方面:
- Finish word2vec
- How could we capture this essence more effectively? word2vec 如何更有效
- What does word2vec capture? word2vec 真正捕捉到了什么
- How can we analyze word vectors?
1. 复习:word2vec的主要思路
- 遍历整个语料库中的每个词
- 我们用这个词来预测给定窗口(window)大小内的上下文单词 (context word) 。即通过中心词去预测上下文,给定一个中心词汇,预测某个单词在它上下文中出现的概率。
p ( o ∣ c ) = e x p ( u o T v c ) ∑ w = 1 V e x p ( u w T v c ) p(o|c)=\frac{exp(u_{o}^{T}v_{c})}{\sum_{w=1}^{V}exp(u_{w}^{T}v_{c})} p(o∣c)=∑w=1Vexp(uwTvc)exp(uoTvc) - 由此计算出损失函数,在每个窗口中计算梯度做SGD
2. 提高训练效率的方法: 负采样
在计算损失函数时,对|V|
的求和计算量是非常大的,因此需要找到更加高效的训练方法——负采样,negative sampling。
具体做法是,对每个正例(中心词语及上下文中的一个词语)采样几个负例(中心词语和其他随机词语),训练binary logistic regression(也就是二分类器)。
因此 skip-gram采取了一些小技巧,我们只对可以配对的训练一些二元逻辑回归(???这是)。
此时的损失函数为:
sigmoid 的特性是,sigmoid 关于原点中心对称,是奇函数:
σ
(
−
x
)
=
1
−
σ
(
x
)
\sigma (-x)=1-\sigma (x)
σ(−x)=1−σ(x)
3. What does word2vec capture?
当我们在训练这些词向量的时候,实际发生了什么?
word2vec 在优化的过程中,会开始聚类。例如在对向量进行主成分分析(PCA)可视化,可以卡相似的词语会聚集。
对于一个语料库,
巴拉巴拉
奇异值分解:
现在取出U的头两列并且画出它们(即做一个二维可视化)
对称窗口 和 非对称窗口?
- 限制高频词的频次(例如the,与很多名词共现,但它并没有给我们带来很多信息,此时无论出现了多少次,都可以定为一个阈值,例如100次),或者干脆停用词
- 根据与中央词的距离衰减词频权重,不平等地计算词的出现次数,例如靠近中心词的词每出现一次计数为1,如果词出现在五步距离于中心词的地方,那么记为0.5
- 用皮尔逊相关系数代替词频
针对相似词可以聚类
#基于窗口的共现矩阵
对于上述现象(相近的词有相似的上下文,相近的词距离很近),会有直观的思考:为什么会发生这样的情况?是语言的原因吗?
奇异值分解的问题:
总结了各种算法的优缺点
skip-gram 在下游任务中有更好的性能。
–
还可以做的是组合这些方法,glove,基本上会遍历所有可能共现的词对。P是共现矩阵。
??? 为什么后面一对减法是距离呢??f()可以衡量甚至减少这些频繁共现的事件。uv说的是外部向量和内部向量?这是啥?
U是包含所有词的向量,因此对于skip-gram有内部和外部向量, u和v就是列中向量和行中的向量。
GloVe 还是要继续看一下
在glove中,相同的词也会聚在一起,但是对于多义词,应该是在向量空间怎样存在的呢?然后讲了一篇文章,稀疏向量。
如何评估word vectors?
有两种方法:Intrinsic(内部) vs extrinsic(外部)
Intrinsic(内部)
针对特定的任务或中间环节的子任务评价。专门设计单独的试验,由人工标注词语或句子相似度,与模型结果对比。
优点:速度快,直接计算即可。同时可帮助理解整个系统,比如某个超参数是如何影响相似度的。
如果内部评价方法和实际问题关联不大(实体识别,机器翻译)的话,很难说内部评价是否真的对模型表现的提升有帮助
extrinsic(外部)
针对实际任务评价。比如将词向量应用到翻译系统上看看翻译效果会不会有提升。
缺点:耗时较长。
如果有多个子系统的话,要用控制变量法来确定某个子系统是否真的能提高系统性能
Intrinsic(内部)word vector evaluation 内部向量评价方法
之前讲Wrod2Vec时我们提到过类比推理,这就是一个常用的内部评价方法。如果a对应b能类比到c对应d,那么它们的词向量之间应该有 $x_{b} -x_{a}\approxx_{d} -x_{c}$ 的关系。
在不同大小的语料上,训练不同维度的词向量,在语义和语法数据集上的结果如下:
其中Sem.是语义类比推理的准确率,Syn.是语法类比推理(例如形容词的比较级和最高级)的准确率,Tot.是总的表现。可以看出GloVe的效果显著地更好。另外,高纬度并不一定好。而数据量越多越好。
之前提到过通过内部评价方法,我们可以了解超参数对模型的影响。下面就是一些GloVe通过类比推理评价,得到的结果:
- 词向量维度在300左右时表现较好(图a),再提升维度表现只有微弱的提升,甚至下降。
- 对称的窗口(图b)要比不对称的窗口(图c,只考虑中心词左边的单词)表现略好。???这里的英文
- 对GloVe来说,窗口大小为8比较合适。
实际上很难比较glove 和 skip-gram 模型,非常不同的训练方式。一个是一次计算一个窗口,一个是先计算所有的计数,再处理计数
很不幸,和其他深度学习模型一样,数据集的大小和质量对结果都有着巨大的影响。维基百科是一个质量很好的语料库,因此用维基百科训练的结果要好于用Gigaword5训练的结果。但是质量不够的时候,可以用数量来凑,可以看出图中使用42B tokens的训练效果是最好的。
另一个常用的内部评价方法是相关系数评价法(Correlation Evaluation),首先让人类对一些单词的相似度打分,然后再通过词向量计算这些单词的相似度,最后计算两个相似度之间的相关系数。如果人类打分足够准确,那么词向量计算出的相似度和人类打分相关系数越高代表模型表现越好。下图是GloVe的结果和一些人类打分的斯皮尔曼相关系数(Spearman rank correlation),同样可以看出GloVe的表现很好。
外部评价方法
参考链接