NLP-Task2: Word Vectors and Word Senses

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


task1 补充

Optimization:Gradient Descent

梯度下降法:用来优化损失函数J\left ( \theta \right )。对\theta值计算梯度,然后沿着负梯度走一小步。其具体意义如下图所示:

NLP-Task2: Word Vectors and Word Senses_第1张图片

公式形式的表达如下:

NLP-Task2: Word Vectors and Word Senses_第2张图片

其中\alpha被叫做学习率,是需要我们自己调整的参数之一。

Stochastic Gradient Desent

随机梯度下降法。由于J\left ( \theta \right )是对所有窗口而言的,要更新一次J\left ( \theta \right )的梯度计算量非常大。所以用随机梯度下降法来重复采样窗口内的词,并每次更新。

  • 迭代的使用随机梯度下降法在每一个窗口(window)计算梯度
  • 但是每个窗口最多只有2m + 1个单词(m为窗口大小),所以会非常稀疏(sparse), 因为我们只更新那些实际上真正出现的单词。有2种处理方法:一种是只更新full embedding 矩阵的U,V的某些特定列,一种是每个词语建立词向量的哈希映射。

NLP-Task2: Word Vectors and Word Senses_第3张图片

The skip-gram model with negative samepling

NLP-Task2: Word Vectors and Word Senses_第4张图片

如果V量级非常大,则分母的计算量也非常大。因此在word2vec模型中会使用负采样的方法。其具体思想:

  • 这是一种采样子集简化运算的方法。具体做法是,对每个正例(中心词语及它的上下文中的一个词语)采样几个负例(中心词语和其他随机词语),训练binary logistic regression(也就是二分类器)。

NLP-Task2: Word Vectors and Word Senses_第5张图片

Word2vec总结

•浏览整个语料库的每个单词

•预测每个单词的周围单词

•这样可以一次获取一个的同时出现(co-occurrence)的单词

task2

Window based co-occurrence matrix 

一个问题:为什么不直接获取同时出现发生的次数呢? 答案:当然是可以的,这样就会有个共现矩阵(co-occurrence matrix )

举例说明:窗口长度1(通常是5-10)对称(不相关的左右语境)在如下示例语料库中统计共现矩阵:

-I like deep learning

-I like NLP

-I enjoy flying

NLP-Task2: Word Vectors and Word Senses_第6张图片

这种方法存在以下问题:

  1. 词汇增加,维度增加
  2. 高纬度,需要大量存储空间
  3. 后面分类模型存在稀疏性问题,导致模型不健壮

解决办法:降维》》》》如何降?

对共现矩阵进行奇异值分解(SVD)

但是一些功能词(the, he, has)出现太过频繁,对语法(syntax)影响较大,上图所示的效果并不十分理想,需要对进行改进:

  1. 限制高频词的频次,min(X,t),with t~100 ,或者干脆忽略这些高频词
  2. 增加的窗口更精确地计算相近的单词(ampedwindows that count closer words more)用皮尔逊相关系数( Pearson correlations)代替词频(counts),然后将负值设置为0。

SVD存在的问题:

  • 计算代价很大,复杂度很高,对n×m的矩阵是(n
  • 不方便处理新词或新文档。与其他深度学习模型训练套路不同

基于词频和直接预测的比较(Countbased vs direct prediction)

NLP-Task2: Word Vectors and Word Senses_第7张图片

这些基于计数的方法在中小规模语料库中训练很快,可以有效地利用统计信息。受限于捕捉词语相似度,也无法拓展到大规模语料。

而Skip-gram/CBOW,NNLM,,HLBL,RNN,这些进行预测的模型必须遍历所有的窗口来进行训练,无法有效利用单词的全局统计信息。但它们显著地提高了上级NLP任务,可以捕捉到除了单词相似性之外的更复杂模式。

所以结合上述两者的优势,我们有了:GloVe

GloVe

GloVe目标是综合基于统计和基于预测的两种方法的优点。

模型目标:词进行向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息

流程:输入语料库--> 统计共现矩阵--> 训练词向量-->输出词向量

目标函数:

J\left ( \theta \right )=\frac{1}{2}\sum_{i,j=1}^{W}f(P_{ij})\left ( u_{i} ^{T}v_{j}-logP_{ij}\right )^{2}   这里的P_{ij}是2个词共现的频次,f是一个max函数

NLP-Task2: Word Vectors and Word Senses_第8张图片

其优点是:训练快,可以拓展到大规模语料,也适用于小规模语料和小向量。

在公式中,我们可以发现这里面有两个向量u和v,它们都捕捉了共现信息,我们从和得到两个矩阵U和V,怎么处理它们呢?试验证明,最佳方案是简单地加起来:X_{final}=U+V

How to evaluate word vectors?

Intrinsic:对特定/中间子任务进行评估。好处:是计算速度快,有助于理解系统。但不知道对实际应用有无帮助。

Extrinsic:通过对外部真实的实际应用的效果提升来体现。耗时较长,不能排除是否是新的词向量与旧系统的某种契合度产生。不清楚是子系统的问题,还是它的交互系统或其他子系统的问题。需要至少两个子系统同时证明。

内部词向量评估:词向量类比。

NLP-Task2: Word Vectors and Word Senses_第9张图片

  1. 通过对词向量的余弦距离分析可得到直观的语义和语法问题。
  2. 通过Glove可视化,会发现这些类推的向量是近乎平行的。

NLP-Task2: Word Vectors and Word Senses_第10张图片

语法上也是可以类推的。如下图:

NLP-Task2: Word Vectors and Word Senses_第11张图片

同样的内部词向量评估也会有一些问题,如图所示:

NLP-Task2: Word Vectors and Word Senses_第12张图片

与其他模型类比评估和超参数:

在不同大小的语料上,训练不同维度的词向量,在语义和语法数据集上的结果如下:GloVe的效果显著地更好。另外,高维度效果并不一定好,而且数据量越多越好。

调参:

  • 不对称的上下文(只对左边的单词)结果不太好
  • 维度大约为300效果是最好的,但对于downstream的任务可能不同。
  • 窗口大小为8的对称窗口对Glove向量效果挺好的。
  • 训练时间越长越好。
  • 数据越多越好

相关性评估:评估词向量的距离和人工标注的相关性

外部词向量评估:(后面会讲到)

Word senses and word sense ambiguity

关于单词歧义的消除:通过对上下文的聚类分门别类地重新训练。

NLP-Task2: Word Vectors and Word Senses_第13张图片

 

 

你可能感兴趣的:(NLP,深度学习)