第三讲 cs224n系列之skip-pram优化 & Global Vector by Manning & 词向量评价

本系列是一个基于深度学习的NLP教程,2016年以前叫作CS224d: Deep Learning for Natural Language Processing,以后更名为CS224n: Natural Language Processing with Deep Learning。新版主讲人是泰斗Chris Manning和Richard Socher(这是旧版的讲师),两人分别负责不一样的章节。博主在学习的同时,对重点内容作成系列教程,与你们分享!html

系列目录(系列更新中)

第二讲 cs224n系列之word2vec & 词向量
第三讲 cs224n系列之skip-pram优化 & Global Vector by Manning & 词向量评价算法

1 skip-pram回顾

图片描述

(1) J t ( θ ) = log σ ( u o T v c ) + i = 1 k E j P ( w ) [ log ( 1 σ ( u j T v c ) ) ]

根据公式 1 σ ( λ ) = σ ( λ )
(2) J t ( θ ) = log σ ( u o T v c ) + i = 1 k E j P ( w ) [ log σ ( u j T v c ) ]

PS:这里的 J t 里的t是第t步或者是第t个窗口
到此为止,就能够用tensorflow实现如下skip-pram了,关于skip-pram的tensorflow实现方法教程详见markdown

参考链接连接网络


问答:
若是不是凸函数,这可能会陷入局部最优解,那么初始化就比较关键,可是在实践中,只要是用一个小的随机化初始化,通常不会出现问题。 iphone

2 skip-pram优化

在第一部分讲解完成后,咱们会发现Word2Vec模型是一个超级大的神经网络(权重矩阵规模很是大)。
举个栗子,咱们拥有10000个单词的词汇表,咱们若是想嵌入300维的词向量,那么咱们的输入-隐层权重矩阵和隐层-输出层的权重矩阵都会有 10000 x 300 = 300万个权重,在如此庞大的神经网络中进行梯度降低是至关慢的。更糟糕的是,你须要大量的训练数据来调整这些权重而且避免过拟合。百万数量级的权重矩阵和亿万数量级的训练样本意味着训练这个模型将会是个灾难(太凶残了)。
相关解决方法就是在skip-pram的基础上优化,主要有以下两种:机器学习

  • 对高频次单词进行抽样来减小训练样本的个数。
  • 对优化目标采用“negative sampling”方法,这样每一个训练样本的训练只会更新一小部分的模型权重,从而下降计算负担。

对于这两种方法,我本身的理解是第一种是解决词向量的个数的,也就是one-hot对应词向量矩阵的维数,采用的方法是只构建高频词,换另一种方式说是减小中心词的个数,也就是对应的 V c 的个数,而第二种我认为是从隐层到输出层不会对每一个其余的词向量点乘,也就是最后的结果不是和输出对应的那么多维数的向量了,这样就减小了,应该对吧!函数

以上两种方法详见学习

参考链接 优化

这里写图片描述

3 Global Vector by Manning

global vector: Manningui

背景

Cbow 或者Skip-Gram取得了很大的成功,无论在训练效率仍是在词向量的计算效果上面。
可是考虑到Cbow/Skip-Gram 是一个local context window的方法,好比使用NS来训练,缺少了总体的词和词的关系,负样本采用sample的方式会缺失词的关系信息。
另外,直接训练Skip-Gram类型的算法,很容易使得高曝光词汇获得过多的权重

Global Vector融合了矩阵分解Latent Semantic Analysis (LSA)的全局统计信息和local context window优点。融入全局的先验统计信息,能够加快模型的训练速度,又能够控制词的相对权重。

几率及表示

首先用符号X来表示词和词之间的表示:
X i j :词i在词j的window context里面的次数,一样也是j出如今i window context的次数
X i = k X i k :词i的window context里面的词的总次数
P i j = P ( j | i ) = X i j / X i : 词j出如今词i 的context里面的几率


这里写图片描述
咱们看这个Pij的case:

咱们知道solid是ice的形状,gas是steam的状态,若是用几率表示,咱们但愿
p ( s o l i d | i c e ) > p ( s o l i d | s t e a m )
p ( g a s | i c e ) < p ( g a s | s t e a m )
为了数值化这个相对大小,咱们引入他们的比例:p(k|ice)/p(k|steam), 这个比例值越大,表明词和ice更加相关,比例的值越小,表明和steam更加相关。

下一步: P i k P j k = p ( k | i ) / p ( k | j ) 在机器学习里面怎么计算?

这里写图片描述

最终的公式是:

(3) J ( θ ) = 1 2 i , j = 1 W f ( P i j ) ( u i T v j log P i j ) 2

这里的 P i j 是两个词共现的频次,至关于上面的 X i j f是一个max函数,
这里写图片描述
优势是训练快,能够拓展到大规模语料,也适用于小规模语料和小向量。
相对于word2vec只关注窗口内的共现,GloVe这个命名也说明这是全局的(我以为word2vec在所有语料上取窗口,也不是那么地local,特别是负采样)。

4 词向量评价(Evaluate word vectors)

有了上面的一些算法,可是如何评价运行结果,模型中咱们有不少超参数,好比窗口设置多大?词向量的大小如何设置?咱们该如何选择这些参数让咱们的模型运行的更好

有两种方法:Intrinsic(内部) vs extrinsic(外部)

Intrinsic:专门设计单独的试验,由人工标注词语或句子类似度,与模型结果对比。好处是是计算速度快,但不知道对实际应用有无帮助。有人花了几年时间提升了在某个数据集上的分数,当将其词向量用于真实任务时并无多少提升效果,想一想真悲哀。

Extrinsic:经过对外部实际应用的效果提高来体现。耗时较长,不能排除是不是新的词向量与旧系统的某种契合度产生。须要至少两个subsystems同时证实。这类评测中,每每会用pre-train的向量在外部任务的语料上retrain。

Intrinsic word vector evaluation

也就是词向量类推,或说“A对于B来说就至关于C对于哪一个词?”。这能够经过余弦夹角获得:
这里写图片描述
这种方法可视化出来,会发现这些类推的向量都是近似平行的:

这里写图片描述

下面这张图说明word2vec还能够作语法上的类比:
这里写图片描述

我感受上面的这种就相似于下面的这种运算,颇有意思:
这里写图片描述

4.1 调参

几个参数的对比:
这里写图片描述

两种模型间的对比:
这里写图片描述

视频中还有很对其余的对比,目前感受做用不大。

这是是评估,但不是最小化。

参考资料

相关文章
相关标签/搜索