深度学习word2vec笔记之基础篇

更新时间:2023-07-08 23:15:59 阅读: 评论:0

小白菜汆丸子深度学习word2vec笔记之基础篇
by    北流浪子
博客地址:blog.csdn/mytestmy/article/details/26969149
基础篇:blog.csdn/mytestmy/article/details/26961315
一.前言
伴随着深度学习的大红大紫,只要是在自己的成果里打上deep    learning字样,总会有人去看。深度学习可以称为当今机器学习领域的当之无愧的巨星,也特别得到工业界的青睐。
鄱阳湖国家湿地公园在各种大举深度学习大旗的公司中,Google公司无疑是旗举得最高的,口号喊得最响亮的那一个。Google正好也是互联网界璀璨巨星,与深度学习的联姻,就像影视巨星刘德华和林志玲的结合那么光彩夺目。
巨星联姻产生的成果自然是天生的宠儿。2013年末,Google发布的word2vec工具引起了一帮人的热捧,互联网界大量google公司的粉丝们兴奋了,从而google公司的股票开始大涨,如今直逼苹果公司。
在大量赞叹word2vec的微博或者短文中,几乎都认为它是深度学习在自然语言领域的一项了不起的应用,各种欢呼“深度学习在自然语言领域开始发力了”。
互联网界很多公司也开始跟进,使用word2vec产出了不少成果。身为一个互联网民工,有必要对这种炙手可热的技术进行一定程度的理解。
好在word2vec也算是比较简单的,只是一个简单三层神经网络。在浏览了多位大牛的博客,随笔和笔记后,整理成自己的博文,或者说抄出来自己的博文。
二.背景知识
2.1词向量
自然语言处理(NLP)相关任务中,要将自然语言交给机器学习中的算法来处理,通常需要首先将语言数学化,因为机器不是人,机器只认数学符号。向量是人把自然界的东西抽象出来交给机器处理的东西,基本上可以说向量是人对机器输入的主要方式了。
词向量就是用来将语言中的词进行数学化的一种方式,顾名思义,词向量就是把一个词表示成一个向量。
设备维修与保养
主要有两种表示方式,下面分别介绍,主要参考了@皮果提在知乎上的问答,也就是参考文献【2】。
2.1.1    O ne-­‐Hot    R eprentation
一种最简单的词向量方式是    one-­‐hot    reprentation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个    1,其他全为    0,    1    的位置对应该词在词典中的位置。举个例子,
“话筒”表示为    [0    0    0    1    0    0    0    0    0    0    0    0    0    0    0    0    ...]
“麦克”表示为    [0    0    0    0    0    0    0    0    1    0    0    0    0    0    0    0    ...]
蝶尾
每个词都是茫茫    0    海中的一个    1。
这种    One-­‐hot    Reprentation    如果采用稀疏方式存储,会是非常的简洁:也就是给每个词分配一个数字    ID。比如刚才的例子中,话筒记为    3,麦克记为    8(假设从    0    开始记)。如果要编程实现的话,用    Hash    表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF    等等算法已经很好地完成了    NLP    领域的各种主流任务。
但这种词表示有两个缺点:(1)容易受维数灾难的困扰,尤其是将其用于    Deep    L earning    的一些算法时;(2)不能很好地刻画词与词之间的相似性(术语好像叫做“词汇鸿沟”):任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系,哪怕是话筒和麦克这样的同义词也不能幸免于难。
所以会寻求发展,用另外的方式表示,就是下面这种。
2.1.2    D istributed    R eprentation
另一种就是Distributed    R eprentation    这种表示,它最早是    Hinton    于    1986    年提出的,可以克服    one-­‐hot    r eprentation    的缺点。其基本想法是直接用一个普通的向量表示一个词,这种向量一般长成这个样子:[0.792,    −0.177,    −0.107,    0.109,    −0.542,    ...],也就是普通的向量表示形式。维度以    50    维和    100    维比较常见。
当然一个词怎么表示成这么样的一个向量是要经过一番训练的,训练方法较多,word2vec是其中一种,在后面会提到,这里先说它的意义。还要注意的是每个词在不同的语料库和不同的训练方法下,得到的词向量可能是不一样的。
词向量一般维数不高,很少有人闲着没事训练的时候定义一个10000维以上的维数,所以用起来维数灾难的机会现对于one-­‐hot    r eprentation表示就大大减少了。
尺壁寸阴
由于是用向量表示,而且用较好的训练算法得到的词向量的向量一般是有空间上的意义的,也就是说,将所有这些向量放在一起形成一个词向量空间,而每一向量则为该空间中的一个点,在这个空间上的词向量之间的距离度量也可以表示对应的两个词之间的“距离”。所谓两个词之间的“距离”,就是这两个词之间的语法,语义之间的相似性。
一个比较爽的应用方法是,得到词向量后,假如对于某个词A,想找出这个词最相似的词,这个场景对人来说都不轻松,毕竟比较主观,但是对于建立好词向量后的情况,对计算机来说,只要拿这个词的词向量跟其他词的词向量一一计算欧式距离或者cos距离,得到距离最小的那个词,就是它最相似的。
这样的特性使得词向量很有意义,自然就会吸引比较多的人去研究,前有Bengio发表在JMLR上的论文《A    Neural    Probabilistic    Language    Model》,又有Hinton的层次化Log-­‐Bilinear模型,还有google的Tomas    M ikolov    团队搞的word2vec,等等。
词向量在机器翻译领域的一个应用,就是google的Tomas    M ikolov    团队开发了一种词典和术语表的自动生成技术,该技术通过向量空间,把一种语言转变成另一种语言,实验中对英语和西班牙语间的翻译准确率高达90%。
介绍算法工作原理的时候举了一个例子:考虑英语和西班牙语两种语言,通过训练分别得到它们对应
的词向量空间    E    和    S。从英语中取出五个词    one,two,three,four,five,设其在    E    中对应的词向量分别为    v1,v2,v3,v4,v5,为方便作图,利用主成分分析(PCA)降维,得到相应的二维向量    u1,u2,u3,u4,u5,在二维平面上将这五个点描出来,如下图左图所示。类似地,在西班牙语中取出(与    one,two,three,four,five    对应的)    uno,dos,tres,cuatro,cinco,设其在    S    中对应的词向量分别为    s1,s2,s3,s4,s5,用    PCA    降维后的二维向量分别为    t1,t2,t3,t4,t5,将它们在二维平面上描出来(可能还需作适
当的旋转),如下图右图所示:
观察左、右两幅图,容易发现:五个词在两个向量空间中的相对位置差不多,这说明两
种不同语言对应向量空间的结构之间具有相似性,从而进一步说明了在词向量空间中利用距
离刻画词之间相似性的合理性。
2.2语言模型
2.2.1基本概念
语言模型其实就是看一句话是不是正常人说出来的。这玩意很有用,比如机器翻译、语
音识别得到若干候选之后,可以利用语言模型挑一个尽量靠谱的结果。在    NLP    的其它任务
里也都能用到。
语言模型形式化的描述就是给定一个T个词的字符串s,看它是自然语言的概率    P(w1,w2,…,wt)。w1    到    wT    依次表示这句话中的各个词。有个很简单的推论是:    p s=p w!,w!,⋯w!=p w!p w!w!)p(w!|w!,w!)⋯p(w!|w!,w!,⋯w!!!)                    (1)    上面那个概率表示的意义是:第一个词确定后,看后面的词在前面的词出现的情况下出现的概率。如一句话“大家喜欢吃苹果”,总共四个词“大家”,“喜欢”,“吃”,“苹果”,怎么分词现在不讨论,总之词已经分好,就这四个。那么这句话是一个自然语言的概率是:    P(大家,喜欢,吃,苹果)=p(大家)p(喜欢|大家)p(吃|大家,喜欢)p(苹果|大家,喜欢,吃)    p(大家)表示“大家”这个词在语料库里面出现的概率;
春节图案
p(喜欢|大家)表示“喜欢”这个词出现在“大家”后面的概率;
p(吃|大家,喜欢)表示“吃”这个词出现在“大家喜欢”后面的概率;
p(苹果|大家,喜欢,吃)表示“苹果”这个词出现在“大家喜欢吃”后面的概率。
把这些概率连乘起来,得到的就是这句话平时出现的概率。
如果这个概率特别低,说明这句话不常出现,那么就不算是一句自然语言,因为在语料库里面很少出现。如果出现的概率高,就说明是一句自然语言。
看到了上面的计算,看有多麻烦:只有四个词的一句话,需要计算的是p(大家),p(喜欢|大家),p(吃|大家,喜欢),p(苹果|大家,喜欢,吃)这四个概率,这四个概率还要预先计算好,考虑词的数量,成千上万个,再考虑组合数,p(吃|大家,喜欢)这个有“大家”、“喜欢”和“吃”的组合,总共会上亿种情况吧;再考虑p(苹果|大家,喜欢,吃)这个概率,总共也会超过万亿种。刘向军
从上面的情况看来,计算起来是非常麻烦的,一般都用偷懒的方式。
为了表示简单,上面的公式(1)用下面的方式表示    p s =p w !,w !,⋯w !=
p (w !|Context !)!
其中,如果Contexti 是空的话,就是它自己p(w),另外如“吃”的Context 就是“大家”、“喜欢”,其余的对号入座。
符号搞清楚了,就看怎么偷懒了。
2.2.2    N -­‐gram 模型
接下来说怎么计算p (w !|Context !),上面看的是跟据这句话前面的所有词来计算,那么p (w !|Context !)就得计算很多了,比如就得把语料库里面p(苹果|大家,喜欢,吃)这种情况全部统计一遍,那么为了计算这句话的概率,就上面那个例子,都得扫描四次语料库。这样一句话有多少个词就得扫描多少趟,语料库一般都比较大,越大的语料库越能提供准确的判断。这样的计算速度在真正使用的时候是万万不可接受的,线上扫描一篇文章是不是一推乱七八糟的没有序列的文字都得扫描很久,这样的应用根本没人考虑。
最好的办法就是直接把所有的p (w !|Context !)提前算好了,那么根据排列组上面的来算,对于一个只有四个词的语料库,总共就有4!+3!+2!+1!个情况要计算,那就是24个情况要计算;换成1000个词的语料库,就是
i !!"""!!!个情况需要统计,对于计算机来说,计算这些东西简直是开玩笑。
这就诞生了很多偷懒的方法,N-­‐gram 模型是其中之一了。N-­‐gram 什么情况呢?上面的context 都是这句话中这个词前面的所有词作为条件的概率,N-­‐gram 就是只管这个词前面的n-­‐1个词,加上它自己,总共n 个词,计算p (w !|Context !)只考虑用这n 个词来算,换成数学的公式来表示,就是    p w !Context !=p (w !|w !!!!!,w !!!!!,⋯,w !!!)

本文发布于:2023-07-08 23:15:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1073594.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:向量   学习   表示   得到   深度   语言   机器   大家
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图