task1的博客讲解了词向量、Word2vec基础知识以及2种基本模型。本篇文章首先对task1的一些补充,后续讲解词向量,并且讲解其优劣,介绍了基于窗口的共现矩阵的方法,引入GloVe。最后介绍了内部和外部词向量评估机制。
目录
task1 补充
Optimization:Gradient Descent
Stochastic Gradient Desent
The skip-gram model with negative samepling
Word2vec总结
task2
Window based co-occurrence matrix
对共现矩阵进行奇异值分解(SVD)
基于词频和直接预测的比较(Countbased vs direct prediction)
GloVe
How to evaluate word vectors?
Word senses and word sense ambiguity
梯度下降法:用来优化损失函数。对值计算梯度,然后沿着负梯度走一小步。其具体意义如下图所示:
公式形式的表达如下:
其中被叫做学习率,是需要我们自己调整的参数之一。
随机梯度下降法。由于是对所有窗口而言的,要更新一次的梯度计算量非常大。所以用随机梯度下降法来重复采样窗口内的词,并每次更新。
如果V量级非常大,则分母的计算量也非常大。因此在word2vec模型中会使用负采样的方法。其具体思想:
•浏览整个语料库的每个单词
•预测每个单词的周围单词
•这样可以一次获取一个的同时出现(co-occurrence)的单词
一个问题:为什么不直接获取同时出现发生的次数呢? 答案:当然是可以的,这样就会有个共现矩阵(co-occurrence matrix )
举例说明:窗口长度1(通常是5-10)对称(不相关的左右语境)在如下示例语料库中统计共现矩阵:
-I like deep learning
-I like NLP
-I enjoy flying
这种方法存在以下问题:
解决办法:降维》》》》如何降?
但是一些功能词(the, he, has)出现太过频繁,对语法(syntax)影响较大,上图所示的效果并不十分理想,需要对进行改进:
SVD存在的问题:
这些基于计数的方法在中小规模语料库中训练很快,可以有效地利用统计信息。受限于捕捉词语相似度,也无法拓展到大规模语料。
而Skip-gram/CBOW,NNLM,,HLBL,RNN,这些进行预测的模型必须遍历所有的窗口来进行训练,无法有效利用单词的全局统计信息。但它们显著地提高了上级NLP任务,可以捕捉到除了单词相似性之外的更复杂模式。
所以结合上述两者的优势,我们有了:GloVe
GloVe目标是综合基于统计和基于预测的两种方法的优点。
模型目标:词进行向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息
流程:输入语料库--> 统计共现矩阵--> 训练词向量-->输出词向量
目标函数:
其优点是:训练快,可以拓展到大规模语料,也适用于小规模语料和小向量。
在公式中,我们可以发现这里面有两个向量u和v,它们都捕捉了共现信息,我们从和得到两个矩阵U和V,怎么处理它们呢?试验证明,最佳方案是简单地加起来:
Intrinsic:对特定/中间子任务进行评估。好处:是计算速度快,有助于理解系统。但不知道对实际应用有无帮助。
Extrinsic:通过对外部真实的实际应用的效果提升来体现。耗时较长,不能排除是否是新的词向量与旧系统的某种契合度产生。不清楚是子系统的问题,还是它的交互系统或其他子系统的问题。需要至少两个子系统同时证明。
内部词向量评估:词向量类比。
语法上也是可以类推的。如下图:
同样的内部词向量评估也会有一些问题,如图所示:
与其他模型类比评估和超参数:
在不同大小的语料上,训练不同维度的词向量,在语义和语法数据集上的结果如下:GloVe的效果显著地更好。另外,高维度效果并不一定好,而且数据量越多越好。
调参:
相关性评估:评估词向量的距离和人工标注的相关性
外部词向量评估:(后面会讲到)
关于单词歧义的消除:通过对上下文的聚类分门别类地重新训练。