CS224n笔记3 高级词向量表示

本文转自:http://www.hankcs.com/nlp/cs224n-advanced-word-vector-representations.html

这节课从传统的基于计数的全局方法出发,过渡到结合两者优势的GloVe,并介绍了词向量的调参与评测方法。

复习:word2vec的主要思路

  • 遍历整个语料库中的每个词

  • 预测每个词的上下文:

  • hankcs.com 2017-06-08 下午3.25.31.png

  • 然后在每个窗口中计算梯度做SGD

SGD与词向量

  但每个窗口最多只有2m + 1个单词,所以θJt(θ)会非常稀疏:

hankcs.com 2017-06-08 下午3.33.16.png

  实际上有正确答案需要去对比的只有窗口中的词语。所以每次更新只更新W矩阵中的少数列,或者为每个词语建立到词向量的哈希映射:

hankcs.com 2017-06-08 下午3.39.45.png

近似:负采样

  还有一个问题亟待解决,词表V的量级非常大,以至于下式的分母很难计算:

hankcs.com 2017-06-08 下午3.25.31.png

  于是,练习1中要求用negative sampling实现skip-gram。这是一种采样子集简化运算的方法。

  具体做法是,对每个正例(中央词语及上下文中的一个词语)采样几个负例(中央词语和其他随机词语),训练binary logistic regression(也就是二分类器)。

negative sampling和skip-gram

  目标函数:

  这里t是某个窗口,k是采样个数,P(w)是一个unigram分布,详见:http://www.hankcs.com/nlp/word2vec.html#h3-12 

  σ是sigmoid函数:

sigmoid.png

  根据上次课讲的,内积可以代表相关性。那么这个目标函数就是要最大化中央词与上下文的相关概率,最小化与其他词语的概率。

  word2vec通过把相似的词语放到同一个地方附近来增大目标函数:

hankcs.com 2017-06-08 下午4.45.25.png

 

 

其他方法

  word2vec将窗口视作训练单位,每个窗口或者几个窗口都要进行一次参数更新。要知道,很多词串出现的频次是很高的。能不能遍历一遍语料,迅速得到结果呢?

  早在word2vec之前,就已经出现了很多得到词向量的方法,这些方法是基于统计共现矩阵的方法。如果在窗口级别上统计词性和语义共现,可以得到相似的词。如果在文档级别上统计,则会得到相似的文档(潜在语义分析LSA)。

基于窗口的共现矩阵

比如窗口半径为1,在如下句子上统计共现矩阵:

  • I like deep learning. 

  • I like NLP.

  • I enjoy flying.

会得到:

hankcs.com 2017-06-08 下午5.00.43.png

朴素共现向量的问题

根据这个矩阵,的确可以得到简单的共现向量。但是它存在非常多的局限性:

  • 当出现新词的时候,以前的旧向量连维度都得改变

  • 高纬度(词表大小)

  • 高稀疏性

解决办法:低维向量

  用25到1000的低维稠密向量来储存重要信息。如何降维呢?

  SVD吧:

hankcs.com 2017-06-08 下午5.10.35.png

  r维降到d维,取奇异值最大的两列作为二维坐标可视化:

hankcs.com 2017-06-08 下午5.11.36.png

改进

  • 限制高频词的频次,或者干脆停用词

  • 根据与中央词的距离衰减词频权重

  • 用皮尔逊相关系数代替词频

效果

  方法虽然简单,但效果也还不错:

hankcs.com 2017-06-08 下午5.17.13.png

hankcs.com 2017-06-08 下午5.17.27.png

hankcs.com 2017-06-08 下午5.17.45.png

SVD的问题

  • 不方便处理新词或新文档

  • 与其他DL模型训练套路不同

Count based vs direct prediction

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

  而NNLM, HLBL, RNN, Skip-gram/CBOW这类进行预测的模型必须遍历所有的窗口训练,也无法有效利用单词的全局统计信息。但它们显著地提高了上级NLP任务,其捕捉的不仅限于词语相似度。

综合两者优势:GloVe

  这种模型的目标函数是:          

 

hankcs.com 2017-06-08 下午7.22.15.png

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

  明眼人会发现这里面有两个向量uv,它们都捕捉了共现信息,怎么处理呢?试验证明,最佳方案是简单地加起来:

  相对于word2vec只关注窗口内的共现,GloVe这个命名也说明这是全局的(我觉得word2vec在全部语料上取窗口,也不是那么地local,特别是负采样)。

评测方法

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

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

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

Intrinsic word vector evaluation

  也就是词向量类推,或说“A对于B来讲就相当于C对于哪个词?”。这可以通过余弦夹角得到:

hankcs.com 2017-06-08 下午9.00.00.png

  我曾经通过这些方法验证了民间很多流行的word2vec实现准确率比原版低几十个百分点:http://www.hankcs.com/nlp/word2vec.html#h2-15 

  这种方法可视化出来,会发现这些类推的向量都是近似平行的:

hankcs.com 2017-06-08 下午9.03.18.png

hankcs.com 2017-06-08 下午9.03.35.png

  下面这张图说明word2vec还可以做语法上的类比:

hankcs.com 2017-06-08 下午9.05.55.png

其他有趣的类比:

hankcs.com 2017-06-08 下午9.06.35.png

  这在数学上是没有证明的。

结果对比

在不同大小的语料上,训练不同维度的词向量,在语义和语法数据集上的结果如下:

hankcs.com 2017-06-08 下午9.13.47.png

  GloVe的效果显著地更好。另外,高纬度并不一定好。而数据量越多越好。

调参

  窗口是否对称(还是只考虑前面的单词),向量维度,窗口大小:

hankcs.com 2017-06-08 下午9.20.11.png

  大约300维,窗口大小8的对称窗口效果挺好的,考虑到成本。

  对GloVe来讲,迭代次数越多越小,效果很稳定:

hankcs.com 2017-06-08 下午9.24.05.png

  维基百科语料上得到的效果比新闻语料要好:

hankcs.com 2017-06-08 下午9.26.26.png

另一个数据集

  还有直接人工标注词语相似度的:

hankcs.com 2017-06-08 下午9.29.01.png

www.cs.technion.ac.il/~gabr/resources/data/wordsim353/ 

  对某个单词相似度排序后,得到最相关的词语。于是可以量化评测了。

hankcs.com 2017-06-08 下午9.31.22.png

Extrinsic word vector evaluation

  做NER实验:

hankcs.com 2017-06-08 下午9.38.12.png

  GloVe效果依然更好,但从数据上来看只好那么一点点。

  视频中还谈了谈一些适合word vector的任务,比如单词分类。有些不太适合的任务,比如情感分析。课件中则多了一张谈消歧的,中心思想是通过对上下文的聚类分门别类地重新训练。

hankcs.com 2017-06-08 下午9.47.56.png

  相同颜色的是同一个单词的不同义项。

  TA也讲过这个问题。

转载于:https://www.cnblogs.com/koocn/p/7699051.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我在深圳,但是家里托人在老家找了一份工作

最近,在微信公众号后台收到一份读者的留言,而且这位读者也是我们GX的,而且更幸运的是,跟我是一个地方的。她是疑惑如下~前辈你好~ 今天看到最新一篇有关读书的推文发现同是HC老乡,斗胆向您请教一些问题,有点…

Django之项目搭建和配置总结(一)

安装和创建虚拟环境 参考:linux系统下Python虚拟环境的安装和使用安装Django包 先进入虚拟环境,在联网下执行:pip install django1.8.7 1.8.7表示django的版本,如果不指定,会默认安装最新版的django。包会被安装到/usr…

怎么把一个bool数组转成char?

这个是在知乎上看到的问题,分享给大家,如果有不同的答案,欢迎评论回复。知乎惯例谢邀人在厕所,刚刚蹲下因为最近都流行长文,但是作为日更而且更喜欢表达自己看法的我,力争文章是自己想发的,而且…

mysql的高阶用法_MySQL的经典用法(十四)-高级优化

mysql的经典用法(十四)----高级优化基于/application/search/mysql/mysql-5.5.28/support-files/my-innodb-heavy-4G.cnf二次优化【删除--如果不使用主从同步】注释,去除无用日志文件# log-binmysql-bin# binlog_formatmixed【修改链接】# 最大链接值从100增加到512…

Kotlin——初级篇(二):变量、常量、注释

在Kotlin中的变量、常量以及注释多多少少和Java语言是有着不同之处的。不管是变量、常量的定义方式,还是注释的使用。下面详细的介绍Kotlin中的变量、常量、注释的使用。以及和Java的对比。 如果您还没有搭建环境和不了解Kotlin的,请看我的上一篇博文Kot…

Linux系统编程-管道入门

晚上好,继续记录我的学习心得。当你厌倦了自己的目标时,怎样继续保持专注?误区:成功人士说的都是自己如何“满怀热情”去努力实现他们的目标。不管是在商业、体育还是艺术界,我们听到的都是“一切都归结于激情”或者“…

JavaScript 基础,登录前端验证

1、<script></script>的三种用法&#xff1a; 1.放在<body>中 2.放在<head>中 3.放在外部JS文件中 2、三种输出数据的方式&#xff1a; 1.使用 document.write() 方法将内容写到 HTML 文档中。 2.使用 window.alert() 弹出警告框。 3.使用 innerHTML 写…

Meta的用法

----------------------------------------------- ? 这就是meta标签的典型运用。meta标签有多少参数&#xff0c;有什么作用&#xff0c;为什么我们要特别重视它呢&#xff1f;让我们一起来发掘meta标签的奥妙! ? 根据HTML语言标准注释&#xff1a;meta标签是对网站发展非常…

iOS10 打开APP设置界面和WIFI界面

在iOS10以上&#xff0c;权限这块有了一些变化 首先在info的URL Types 添加 prefs 1、打开APP设置界面 //打开设置let url:NSURL NSURL(string: UIApplicationOpenSettingsURLString)!if UIApplication.shared.canOpenURL(url as URL){ UIApplication.shared.openURL(url as…

一种简单、实用的测量程序运行时间的方法

前言 平时我们可能很少去关注程序运行的时间&#xff0c;但是在一些情况下可能需要对程序进行一个整体的复盘、优化。那么&#xff0c;程序运行的时间就是一个可以考虑的方面&#xff0c;可以测一下某些代码块、函数、算法的运行时间&#xff0c;然后整体考虑看看有没有必要进行…

可以这样给DataGrid加个序号列。

先给DataGrid加个绑定列&#xff0c;该列设置页眉文本&#xff0c;但“数据字段”留空&#xff0c;然后在ItemDataBound事件中加入下面代码。 privatevoiddgScore_ItemDataBound(objectsender, System.Web.UI.WebControls.DataGridItemEventArgs e) { …

工作几天被裁员,难受

前两天&#xff0c;一个读者朋友私聊我说&#xff0c;自己被公司裁员了&#xff0c;这是他的第一份工作&#xff0c;只工作了不到半个月就收到了裁员信息。他非常不甘心&#xff0c;也非常恐慌&#xff0c;不甘心的是&#xff0c;自己觉得工作已经非常努力&#xff0c;也有做出…

cad2017单段线_没想到啊,我平时用的CAD多段线有这么多学问

很多人都说&#xff0c;CAD用多段线来代替直线绘图会比较方便&#xff0c;因为多段线除了常规直线功能之外&#xff0c;也能画弧线&#xff0c;更重要的是&#xff0c;一次命令执行的线条为一个整体&#xff0c;操作方便。难道多段线PL仅仅只有这明面上的实力吗&#xff1f;当然…

一个超强的逆向分析软件

IDA 超强逆向分析工具先说下&#xff0c;想获取这个工具的同学&#xff0c;请在公众号后台回复 「逆向分析」获取下载链接。IDA Pro&#xff08;交互式反汇编其专业版&#xff0c;后续简称为IDA&#xff09;软件是由Hex-Rays SA公司发布&#xff0c;属于当前最炙手可热的一款世…

你还不知道怎么退出 Vim?

提起文本编辑器&#xff0c;你一定会想到编辑器之神 Vim。据 Stack Overflow 的开发者调查&#xff1a;2015 年程序员中最流行的编辑器是 Notepad&#xff0c;Vim 的使用比例占 15.2%。到了 2019 年&#xff0c;最流行的开发环境变成 VS Code&#xff0c;而 Vim 的使用比例已占…

我的大学6年

这篇文章是郭天祥前辈写的&#xff0c;想起来我上大学那时候&#xff0c;也是看他的视频入门的单片机开发&#xff0c;而且那时候&#xff0c;没有这么多渠道了解外面的东西。当时最喜欢的是一个技术论坛&#xff0c;现在还因为某种原因开始收费了&#xff0c;更甚的是如果不按…

2017.10.25水题大作战题解

rank: T1P1615 西游记公司 https://www.luogu.org/problemnew/show/P1615 scanf直接秒 1 #include<iostream>2 #include<cstdio>3 #include<cstring>4 #include<cmath>5 #define LL long long 6 using namespace std;7 inline LL read()8 {9 char …

功夫熊猫问我要不要从嵌入式转行去互联网

先看问题&#xff0c;因为我平时不怎么看微信公众号的后台&#xff0c;我比较喜欢逛知识星球和微信群&#xff0c;公众号后台的交流不是很友好&#xff0c;所以没怎么关注&#xff0c;不过也会隔三岔五的看看留言&#xff0c;比如谁给我说好听的&#xff0c;或者谁骂我了&#…

进程和线程基础知识全家桶,30 张图一套带走

前言先来看看一则小故事我们写好的一行行代码&#xff0c;为了让其工作起来&#xff0c;我们还得把它送进城&#xff08;进程&#xff09;里&#xff0c;那既然进了城里&#xff0c;那肯定不能胡作非为了。城里人有城里人的规矩&#xff0c;城中有个专门管辖你们的城管&#xf…

前端面试之前要准备的那些事

先说一下关于工作简历的一些常见的问题&#xff0c;这是最基础的一步&#xff0c;万事开头难&#xff0c;写好简历就是求职路上最简单也是最关键的一步&#xff0c;一份好的简历不但可以让你从众多简历中脱颖而出&#xff0c;还能够让公司的人事对你的印象深刻。问题一&#xf…