word embedding and word2vec 理解
2018-03-04 23:24
99 查看
该篇博文纯属个人观点,本着共同交流学习的想法,其中有错误和不足还请大佬们指正。
在NLP处理中,词向量是网络的基本输入,那么该如何获得词向量呢?
两种方法,一种是one-hot representation(中文:独热表示,不建议记中文名,以后均是英文),另一种是distribute representation。
一、One-hot representation
问什么称之为one-hot就是因为它每个词之间的表示都是独立的,比如我们有10000个词[a,an,alone,be,base........,often,usual.....],那么在One-hot representation表示方法下,an的向量表示[0,1,0,0,.........0,0.....],其余的自己脑补下,也就是只有自己所在的位置为1,其余的都为0。这种方法的缺点很明显,首先(1)上下文之间没有连接关系,这里举一个Andrew.Ng老师的例子,句子1:He said Teddy is a good teacher. 句子2:He said Teddy bear is lovely. 一个是人名一个是泰迪熊,所以上下文之间的关系是非常重要的,而one-hot中的0\1显然不具有这个能力。(2)每个词的向量过大,比如上例中的“an”,它就是一个10000的vector。
二、distribute representation
先从大的方面说,它又分为三种表示方法,基于矩阵的表示、基于聚类的表示、基于神经网络的表示。其中基于矩阵常见的模型是Glove(Global Vector)(乍然一看名字挺唯美PS:这里分享一个有趣的小知识,大家知道神经网络的前身叫什么嘛,感知机/多层感知机!但是一直不温不火的,最后取了个高大上的名字一下子火了(当然还有很重要的学术因素在推动),可见名字的重要性啊。)基于聚类的就不说了,没什么有名的。基于神经网络的有CBow,skip-gram,negative sampling模型。
下面来通俗的解释一下在NLP学习中的几个名词
1、什么是word embedding
eg: I have 10000 words , and I set 300 features manually, just like this
拿“king”这个词举例,它的feature 1 为gender(性别),很明显国王是男的,这里为了区分男女所以有了正负;feature 2为age,国王的年龄一般偏大,肯定不会是小孩,可以把这里的数值大小当成可信度;feature 3为fruit,国王怎么能是一个水果呢,所以这里数值趋近于0.
所以“king”这个词的向量为[-1,0.3,0.01,.......](300*1),向量的大小就是feature的数量,是不是相比于one-hot小了很多。
所谓的word embedding,我理解的为:人工做出来一个300D的空间,然后每个词按照其300个feature数值大小,嵌入该空间里去。
2、什么事word2vec
其实word2vec是一个工具包,里面包含了几种word embedding的方法,其中这些方法中最突出的模型就是前面提到的CBow,skip-gram,negative sampling。利用这三种神经网络训练的到的embedding vector特别好,维度小,便于计算,同时上下文之间的联系又好。(这才是我们最终想要的东西)
最后得到vector就可以输入到你的RNN或其他网络里面继续训练了(也可以下载网上现成的,可能效果更好)。
(由于时间过于了一段时间,记忆有些模糊,理解错误之处还请指出)
在NLP处理中,词向量是网络的基本输入,那么该如何获得词向量呢?
两种方法,一种是one-hot representation(中文:独热表示,不建议记中文名,以后均是英文),另一种是distribute representation。
一、One-hot representation
问什么称之为one-hot就是因为它每个词之间的表示都是独立的,比如我们有10000个词[a,an,alone,be,base........,often,usual.....],那么在One-hot representation表示方法下,an的向量表示[0,1,0,0,.........0,0.....],其余的自己脑补下,也就是只有自己所在的位置为1,其余的都为0。这种方法的缺点很明显,首先(1)上下文之间没有连接关系,这里举一个Andrew.Ng老师的例子,句子1:He said Teddy is a good teacher. 句子2:He said Teddy bear is lovely. 一个是人名一个是泰迪熊,所以上下文之间的关系是非常重要的,而one-hot中的0\1显然不具有这个能力。(2)每个词的向量过大,比如上例中的“an”,它就是一个10000的vector。
二、distribute representation
先从大的方面说,它又分为三种表示方法,基于矩阵的表示、基于聚类的表示、基于神经网络的表示。其中基于矩阵常见的模型是Glove(Global Vector)(乍然一看名字挺唯美PS:这里分享一个有趣的小知识,大家知道神经网络的前身叫什么嘛,感知机/多层感知机!但是一直不温不火的,最后取了个高大上的名字一下子火了(当然还有很重要的学术因素在推动),可见名字的重要性啊。)基于聚类的就不说了,没什么有名的。基于神经网络的有CBow,skip-gram,negative sampling模型。
下面来通俗的解释一下在NLP学习中的几个名词
1、什么是word embedding
eg: I have 10000 words , and I set 300 features manually, just like this
man | women | king | apple | |
gender | -1 | 1 | -1 | 0.01 |
age | 0.07 | 0.02 | 0.3 | 0.04 |
fruit | 0.002 | 0.01 | 0.01 | 0.97 |
...... | ||||
...... |
所以“king”这个词的向量为[-1,0.3,0.01,.......](300*1),向量的大小就是feature的数量,是不是相比于one-hot小了很多。
所谓的word embedding,我理解的为:人工做出来一个300D的空间,然后每个词按照其300个feature数值大小,嵌入该空间里去。
2、什么事word2vec
其实word2vec是一个工具包,里面包含了几种word embedding的方法,其中这些方法中最突出的模型就是前面提到的CBow,skip-gram,negative sampling。利用这三种神经网络训练的到的embedding vector特别好,维度小,便于计算,同时上下文之间的联系又好。(这才是我们最终想要的东西)
最后得到vector就可以输入到你的RNN或其他网络里面继续训练了(也可以下载网上现成的,可能效果更好)。
(由于时间过于了一段时间,记忆有些模糊,理解错误之处还请指出)
相关文章推荐
- 对于python中的self,cls,decorator的理解
- 理解Session的上下文
- 初学python之以时间复杂度去理解列表常见使用方法
- 理解CapsuleNetwork2
- STM32F4 输入输出(GPIO)模式理解
- Codeforces 603C 博弈论 + 关于博弈论理解
- 理解Python中的With语句
- 对语句 cv::Point2f srcPoint[3];的理解~
- 理解Bellman-Ford算法
- 收藏的网上对一些名词的理解:如jsp、action、service、dao、PO等
- 关于普通低频PCB阻抗皮匹配的理解
- 深入理解php的MySQL连接类
- Windows的理解-开始学习Windows编程
- SQL Server 2005 Analysis Services性能指南 Part 1 - 理解查询构架
- QT学习记录之理解信号槽机制
- 深入理解const char*p,char const*p,char *const p,const
- Android 之Handle的使用原理理解
- ORMLite完全解析(一)通过实例理解使用流程
- Android内核开发:理解和掌握repo工具
- 二级指针传参的解释和函数指针的理解