CS224n笔记二:word2vec
如何表示词语的意思
语言学中meaning近似于“指代,代指,符号”。
计算机中如何处理词语的意思
过去一直采用分类词典
,计算语言学中常见的方式时WordNet那样的词库,比如NLTK中可以通过WordNet查询熊猫的上位词(hypernums),得到“食肉动物”,“动物”之类的上位词。也可以查询“good”的同义词,如“just”。
离散表示(discrete representation)的问题
这种离散表示并不准确,丢失了些许韵味。如以下同义词的意思还是有微妙不同的:adept, expert, good, practiced, proficient, skillful
缺少新词
耗费人力
无法准确计算词语相似度
大多数NLP学者将词语作为最小的单位,事实上,词语只是词表长度的one-hot向量,这是一种局部表示(localist representation)。在不同的语料中,词表大小不同,如Google的1TB词料词汇量是1300w,这个向量实在过长了。
从符号表示(symbolic representation)到分布式表示(distributed representation)
词语在符号表示上体现不出意义的相似性,如“motel”和“hotel”,其one-hot向量是正交的,无法通过计算获得相似度。
Distributional similarity based representations
语言学家J. R. Firth提出,通过一个单词的上下文可以得到它的意思。J. R. Firth甚至建议,日过能将单词放到正确的上下文中,才说明掌握了它的意义。这是现代统计自然语言处理最成功的思想之一:
通过向量定义词语的含义
通过调整一个单词机器上下文单词的向量,使得根据两个向量可以推测两个单词的相似度;或者根据两个向量可以推测词语的上下文。这种手法是递归的,根据向量调整向量。
学习神经网络word embedings的基本思路
定义一个用来预测某个单词上下文的模型:
p(context|wt)=…
损失函数定义如下:
J=1-p(w-t|wt)
这里的w-t表示wt的上下文(-t表示“除了t之外”),如果完美预测,及p(wt)=1,损失函数等于0。
在一个大型的语料库中的不同位置得到训练实例,调整词向量,最小化损失函数。
word2vec的主要思路
通过单词和上下文预测彼此。
- 两个算法
- Skip-grams(SG):预测上下文
- Continuous Bag of Words(CBOW):预测目标单词
- 两种高效的训练方法:
- Hierarchical softmax
- Negative sampling
Hierarchical Softmax
模型共同点
无论是哪种模型,其基本网络结构都是在下图的基础上(省略掉hidden layer):
为什么要去掉hidden layer层呢?因为word2vec的作者认为hidden layer到output layer的矩阵运算太多了,所以两种模型的网络结构是:
其中w(t)代表当前词语位于句子中的位置t,同理定义其他符号,在窗口内(上图中的窗口大小为5),除了当前词语之外的其它词语共同构成上下文。
CBOW
原理:CBOW是一种根据上下文的词语预测当前词语出现概率的模型。
CBOW是已知上下文,估算当前词语的语言模型,其学习目标是最大化对数似然函数:
其中,w表示语料库C中任意一个次。从上图可以看出,对于CBOW:
输入层
是上下文词语的词向量(词向量只是训练CBOW模型的副产物,是CBOW模型的一个参数。训练开始时,词向量是随机值,随着训练的进行不断被更新)投影层
对其求和,就是简单的向量加法。输出层
输出最可能的w。由于语料库中的词汇量是固定的|C|个,所以上述过程可以看作是一个多分类的问题。给定特征,从|C|个分类中挑一个。对于神经网络模型的多分类,最朴素的做法是softmax回归:
softmax回归需要对语料库中每个词语(类)都计算一遍输出概率并进行归一化,在几十万词汇量的语料上无疑是令人头疼的。
如果使用SVM中的多分类:
这是一种二叉树结构,应用到word2vec中被作者称为Hierarchical Softmax:
上图输出层的树形结构即为Hierarchical Softmax。
非叶子节点相当于一个神经元(感知机,我认为逻辑斯谛回归就是感知机的输出代入f(x)=1/(1+e^x)),二分类决策输出1或0,分别代表向下左转或向下右转;每个叶子节点代表语料库中的一个词语,于是每个词语都可以被01唯一地编码,并且其编码序列对应一个事件序列,于是我们可以计算条件概率:
在开始计算之前,还是得引入一些符号:
从根结点出发到达w对应叶子结点的路径.
路径中包含结点的个数
路径中的各个节点
词w的编码,表示路径第j个节点对应的编码(根节点无编码)
路径中非叶节点对应的参数向量
可以给出w的条件概率:
Skip-gram预测
这里虽然有四条线,但模型中只有一个条件分布(因为这只是个词袋模型而已,与位置无关)。学习就是要最大化这些概率。
word2vec细节
目标函数定义为所有位置的预测结果的乘积:
要最大化目标函数。对其取个负对数,得到损失函数——对数似然的相反数:
对于softmax来讲,常用的损失函数为交叉熵。
Softmax function:从实数空间到概率分布的标准映射方法
指数函数可以把实数映射成正数,然后归一化得到概率。
softmax之所叫softmax,是因为指数函数会导致较大的数变得更大,小数变得微不足道;这种选择作用类似于max函数。
Skipgram
这两个矩阵都含有V个词向量,也就是说同一个词有两个词向量,哪个作为最终的、提供给其他应用使用的embeddings呢?有两种策略,要么加起来,要么拼接起来。在CS224n的编程练习中,采取的是拼接起来的策略:
# concatenate the input and output
word vectorswordVectors = np.concatenate(
(wordVectors[:nWords,:], wordVectors[nWords:,:]),
axis=0)
# wordVectors = wordVectors[:nWords,:] + wordVectors[nWords:,:]
他们管W中的向量叫input vector,W'中的向量叫output vector。从左到右是one-hot向量,乘以center word的W于是找到词向量,乘以另一个context word的矩阵W'得到对每个词语的“相似度”,对相似度取softmax得到概率
训练模型:计算参数向量的梯度
把所有参数写进向量θ,对d维的词向量和大小V的词表来讲,有:
由于上述两个矩阵的原因,所以θ的维度中有个2。
CS224n笔记二:word2vec的更多相关文章
- 【NLP CS224N笔记】汇总
[NLP CS224N笔记]Lecture 1 - Introduction of NLP [NLP CS224N笔记]Lecture 2 - Word Vector Representations: ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}
笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...
- Mastering Web Application Development with AngularJS 读书笔记(二)
第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...
- Python 学习笔记二
笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- webpy使用笔记(二) session/sessionid的使用
webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- 《MFC游戏开发》笔记二 建立工程、调整窗口
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9300383 作者:七十一雾央 新浪微博:http:/ ...
随机推荐
- QQ欢乐豆斗地主心得体会(四):合谋赢豆
刚刚又在玩QQ欢乐斗地主,只可惜,这次不够欢乐. 本金,300万豆,运气比较好,赢到将近400万.突然,形势急转直下,一直输,一直到180多万豆.本来这一局,有硬炸在手,但是没有癞子,基本被吊打的节奏 ...
- Windows完成端口与Linux epoll技术简介(能看懂)
WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点3.完成端口(Completion Ports )相关数据结构和创建4.完成端口线程的工作原理5.Windows完成端口的实例代码 ...
- 【a803】营救
Time Limit: 10 second Memory Limit: 2 MB 问题描述 铁达尼号遇险了!它发出了求救信号.距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里.通过侦测, ...
- bootstrap 模态框 video视频测试
链接:https://files.cnblogs.com/files/tele-share/%E8%A7%86%E9%A2%91%E6%B5%8B%E8%AF%95.7z <!DOCTYPE h ...
- Ruby开发环境
Windows上Ruby开发环境的配置 最近公司项目上有需要,需要开发一个puppet的自动化工具,这个工具需要操作存储设备上的各种资源,而鉴于puppet不是善于完成这个任务的首选语言,于是我们 ...
- Spring4+Springmvc+quartz实现多线程动态定时调度
scheduler定时调度系统是大多行业项目都需要的,传统的spring-job模式,个人感觉已经out了,因为存在很多的问题,特别是定时调度的追加.修改.删除等,需要修改xml,xml的配置生效无非 ...
- Mac 开发PhoneGap 应用,怎样加入插件 barcodescaner
搞了两天,最终悟出来了 PhoneGap 与 Cordova 的关系了,有人说是WebKit 与 Chrome 的关系,但我个人理解,两个东西再干一件事情,另外 PhoneGap 被Apache 收购 ...
- Method for training dynamic random access memory (DRAM) controller timing delays
Timing delays in a double data rate (DDR) dynamic random access memory (DRAM) controller (114, 116) ...
- 相关ubuntu有几个细节有用的工具系列
前言 于Linux制,FTPserver有许多软件,我们已经成熟,像vsftpd, wu-ftp, Pure-FTPd等一下.不过该软件的安装一切,配置比较麻烦,建立个人FTPserver,仍是Pro ...
- 10g RAC 采用service达到taf
service由于oracle数据库中的一个关键概念,利用得当,可以轻松地管理数据库,提高数据库的工作效率. 经service.oracle可以实现server side taf,简单化client ...