目录
-
复习
word2vec主要思想
- 遍历整个语料库中的每个单词
- 预测每个单词(窗口的中心词)的上下文词汇
- 在每个窗口进行随机梯度下降法(SGD)
词向量的随机梯度
在每个窗口,只有最多2m+1个单词,非常稀疏。
我们也可以只更新实际出现过的词向量。
解决方案:每次更新只更新W矩阵中的少数列,或者为每个词语建立到词向量的哈希映射。
-
近似:skip-gram模型和负采样
词表V的量级非常大,以至于下式的分母很难计算:
因此需要负采样来实现skip-gram模型,主要思路是训练一对正例(中心词和在它上下文窗口中的词)与一些负例(中心词与随机词配对)的二元逻辑回归。
论文:《单词和短语的分布表示以及它们的语义合成性》(Mikolov et al. 2013)
整个目标函数:
其中k是负采样的个数,使用sigmoid函数:
然后我们最大化两个词同时发生概率的对数。那么这个目标函数就是要最大化中心词与上下文的相关概率,最小化与其他词语的概率。
明确的符号:
为每个窗口取k个负样本,然后最小化这些随机词出现在中心词附近的概率。
从简单的一元模型分布U(w)中采样获取观测这些词大致出现的频率,然后基于频率去采样,避免频繁采样到那些经常出现的词,取其频率指数为3/4的值:
CBOW模型
连续词袋模型(CBOW)的主要思想:通过中心词周围的词来预测中心词。而skip-gram模型是通过中心词来预测上下文中的词。
word2vec通过在空间中把相似的词放在附近来改进目标函数
总结word2vec
word2vec将窗口视作训练单位,每个窗口或者几个窗口都要进行一次参数更新。要知道,很多词串出现的频次是很高的。能不能遍历一遍语料,迅速得到结果呢?
早在word2vec之前,就已经出现了很多得到词向量的方法,这些方法是基于统计共现矩阵的方法。如果在窗口级别上统计词性和语义共现,可以得到相似的词。如果在文档级别上统计,则会得到相似的文档(潜在语义分析LSA)。
-
其他方法
基于窗口的共现矩阵
设窗口长度为1(通常有5到10个窗口),假设有一个对称的窗口(不在意在中心词左边或右边),且已有语料库。
例如:
I like deep learning.
I like NLP.
I enjoy flying.
对于该语料库的基于窗口的共现矩阵为:
存在的问题:
- 如果词典有一个新单词,那么词向量就会发生变化
- 这个向量的维度会非常高
- 在训练机器学习模型时会存在稀疏性问题
解决方法:低维向量
并不只是存储所有共同出现的次数,每个单独的数字还存储重要的信息,即用25到1000的低维稠密向量来储存重要信息。如何降维呢?
奇异值分解SVD
对共现矩阵X进行奇异值分解,其中是与原来共现矩阵最相似的秩k。
在python中,已有语料库和共现矩阵X:
取出U的头两列并且画出它们:
改进
- 限制高频词的频次,或者干脆停用词
- 根据与中央词的距离衰减词频权重
- 用皮尔逊相关系数代替词频
SVD的问题
- 计算复杂度高:对n×m的矩阵是
- 不方便处理新词或新文档
- 与其他深度学习模型训练套路不同
基于计数vs基于窗口或直接预测
-
综合两者优势:GloVe
目标函数:
这里的是两个词共现的频次,f是一个max函数:
优点是训练快,可以拓展到大规模语料,也适用于小规模语料和小向量。
如何处理两组向量u和v
最终从所有的向量u和v(列向量)得到矩阵U和V,两者本质上都捕获了共现的计数,事实证明把它们相加效果是最好的:
-
评测词向量
两种方法:Intrinsic(内部) vs extrinsic(外部)
Intrinsic:专门设计单独的试验,由人工标注词语或句子相似度,与模型结果对比。好处是是计算速度快,但不知道对实际应用有无帮助。有人花了几年时间提高了在某个数据集上的分数,当将其词向量用于真实任务时并没有多少提高效果。
Extrinsic:通过对外部实际应用的效果提升来体现。耗时较长,不能排除是否是新的词向量与旧系统的某种契合度产生。需要至少两个子系统同时证明。这类评测中,往往会用预训练的向量在外部任务的语料上重新训练。
词向量的内部评估
单词向量类比:
语义和句法类比是通过这些向量中的余弦距离捕捉到的。
Glove可视化
公司-CEO:
形容词-比较级-最高级:
更有趣的配对:
类比评测
在不同大小的语料上,训练不同维度的词向量,在语义和语法数据集上的结果如下:
GloVe的效果显著地更好。另外,高维度并不一定好。而数据量越多越好。
超参数
窗口是否对称(还是只考虑前面的单词),向量维度,窗口大小:
大约300维,窗口大小8的对称窗口效果挺好的。
对GloVe来讲,迭代次数越多越小,效果很稳定:
维基百科语料上得到的效果比新闻语料要好:
另一个词向量内部评估的数据集
人工标注词语相似度(WordSim353):
和Sweden最近的词(余弦相似度):
词向量距离及其与人类判断的相关性:
词向量的外部评估
命名实体识别:
GloVe效果依然更好,但从数据上来看只好那么一点点。
视频中还谈了谈一些适合word vector的任务,比如单词分类。有些不太适合的任务,比如情感分析。