word2vec使用文档
针对个人需求修改 makefile 文件,比如作者使用的 linux 系统就需要把makefile 编译选项中的-Ofast 要更改为-O2 或者-g(调试时用),同时删除编译器无法辨认的-march=native 和-Wno-unused-result 选项。有些系统可能还需要修改相关的 c 语言头文件,具体网上搜搜应该可以解决。快速入门1.代码下载http://word2vec.googlecode.com/svn/trunk2.针对个人需求修改 makefile文件,比如作者使用的inux系统就需要把makefile编译选项中的 fast要更改为O2或者g(调试时用),同时删除编译器无法辨认的- march= native和-Wno- unused- result选项。有些系统可能还需要修改相关的c语言头文件,具体网上搜搜应该可以解决。3.运行“make”编译word2vec工具4.运行demo脚木:/ demo-word, shdemo-word. sh中的代码如下,主要工作为1)编译(make)2)下载训练数据text8,如果不存在。text8中为一些空格隔开的奂文单词,但不含标点符号,一共有1600多万个单词。3)训练,大概一个小时左右,取决于机器配置4)调用 distance,查找最近的词text8], thenwgethttp://mattmahoney.net/dc/taxte.zip-otexte.gzgzip -d textag -ftime /worazvec-train text -output vectors. bin -cbow 0-size 200 -window 5-negative o -hs 1-sample le-3-threads 12-binary/distance vectors.b训练完毕后,输入 china就会找出与其最相近的词:Enter word or sentence (EXIT to break): chinaWord: china position in vocabulary: 486Wo卫dCosine distance七 -ILWE-IE0.768188Japan0.652825mancall0.614B880.6135790.6505946七 alDeR0.592367thailand0.5TT905cambod五a0.575681sIngapore0.569950republiC0.5675970.5546420.5515765.也可以自己执行其他相关的程序,比如作者比较推崇的向量加减法操作,在命令行执行,/ word-analogy vectors.bin即可。相关结果如下:ter three words (ExIf ta break): france paris chinaFord: france Position in vocabulary: 303Hord: paris Position in vocabulary: 1055Hord: china Position in vocabulary: 486WordDistancebeijing0.4942tokyoshanghai0.421356当然效果的好坏是取决于你语料大小和质量以及训练相关参数的6.模型的输出 vectors.bin是每个词及其对应的浮点数向量,只是默认为二进制的,不好食看,如果想要查看文本形式,请在训练时把 binary选项设置为07.也可以. /demo- phrases.sh进行短语训练,这样 los angeles就会被当成一个整体来看待。 distance的相关测试如卜:nter word。 u sentence( ExI to break):1。 s ance1esWord: los angeles Position in vocabulary: 1680ordCosine distancesan francisco0.614459san diego0,609573己a]。卫nia0.607403lakers0.575140seattle0.561132oakland0.5507348.如果是中文的语料,则需要调用相应的分词工具将预料中的词用空格隔开。三、作者八卦Geoffrey E HintonMichael Jordan鼻伦多大学,6 oogle如州怕克利博士博士博士AT&ABell La李(921993)博士旨yann lecun纽约大学yoshua BengioAndrew Ng荥杼利余大学斯坦福,⑤0ogeFacebook喜士后博式流学青匀ogeF手2011215le事学主同门师兄第Ruslan SalakhutdinovSimon OsinderoAlea SutskeverMarc Aurelio ranzatoHugo Larochelle Tomas Mikoloy / x krizhevskyFacebook谢布克大手Google感觉上 Deep learning圈子很小,一般离不开 Hinton, Bengio, Lecun,Ng等人, Tomas nikolov也不例外,他的工作很多参考了 Bengio的工作,而且曾在Bengio实验室呆过一段时间,也一起发表过 paper。而且相关的语言模型也被这几个大牛翻江倒海搞了好多年。还有一个 Deep Learning相关开源工具 SENNA的作者 Ronan Collobert则是Samy Bengio(也是张栋的博士生导师)的博士生,而 Samy Bengio则是 YoshuaBengio的亲弟弟四、背景知识41词向量1. One-hot Representation№LP相关任务中最常见的第一步是创建一个词表库并把每个词顺序编号。这实际就是词表示方法中的 One-hot Representation,这种方法把每个词顺序编号,每个词就是一个很长的向量,向量的维度等于词表大小,只有对应位置上的数字为1,其他都为0。当然在实际应用中,一般采用稀疏编码存储,主要采用词的编号。这种表示方法一个最大的问题是无法捕捉词与词之间的相似度,就算是近义词也无法从词向量中看出任何关系。此外这种表示方法还容易发生维数灾难,尤其是在 Deep learning相关的一些应用屮。2. Distributed representationDistributed representation最早由 Hinton在1986年提出8。其基本思想是通过训练将每个词映射成K维实数向量(K一般为模型中的超参数),通过词之间的距离(比如 cosine相似度、欧氏距离等)来判断它们之间的语义相似度。而word2vec使用的就是这种 Distributed representation的词向量表示方式。42统计语言模型传统的统计语言模型是表示语言基本单位(一般为句子)的概率分布函数这个概率分布也就是该语言的生成模型。一般语言模型可以使用各个词语条件概率的形式表示:7(5)=p(w)=p()=Ⅰ1=1p(wt| Context其中 Context即为上下文,根据对 Context不同的划分方法,可以分为五大类:(1)上:下文无关模型( Context=NULL)该模型仅仅考虑当前词夲身的概率,不考虑该词所对应的上下文环境。这是种最简单,易于实现,但没有多大实际应用价值的统计语言模犁。p(wt Context)=p(W+这个模型不考虑任何下文信息,仅仅依赖于训练文本中的词频统计。它是n-εgram模型中当n=1的特殊情形,所以有时也称作 Unigram Model(一元文法统计模型)。实际应用中,常被应用到一些商用语音识别系统中(2) n-gram模型( ContextWt-n+1,wt-n+2n=1时,就是上面所说的上下文无关模型,这里nram一般认为是N>=2是的上下文相关模犁。当n=2时,也称为 Bigram语言模犁,直观的想,在自然语言中“白色汽车”的概率比“白色飞翔”的概率要人很多,也就是p(汽车|白色)>p(飞翔|白色)。n>2也类似,只是往前看n-1个词而不是一个词。一般 n-gram模型优化的目标是最大log似然,即:∏t=1p( wtw=n+1,wt-n+2…,wt-1) logp(wt|Wt-n+1,Wt-n+2,…,wt-1)n-gram模型的优点包含了前N-1个词所能提供的全部信息,这些信息对当前词出现具有很强的约束丿。同时因为只看N-1个词而不是所有词也使得模型的效率较高。n-gram语言模型也存在一些问题1.η-gram语言模型无法建模更远的关系,语料的不足使得无法训练更高阶的语言模型。大部分研究或工作都是使用τ rigram,就算使用高阶的模型,其统计到的概率可信度就大打折扣,还有一些比较小的问题采川 Bigram。2.这种模型无法建模岀词之间的相似度,有时候两个具有某种相似性的词,如果一个词经常出现在某段词之后,那么也许另一个词出现在这段词后面的概率也比较人。比如“白色的汽车”经常出现,那完全可以认为“白色的轿车”也可能经常出现。3.训练语料里面有些n元组没有出现过,其对应的条件概率就是0,导致计算一整句话的概率为0。解决这个问题有两种常用方法:方法一为平滑法。最简单的方法是把每个n元组的出现次数加1,那么原来出现k次的某个n元组就会记为k+1次,原来出现0次的n元组就会记为出现1次。这种也称为 Laplace平滑。当然还有很多更复杂的其他平滑方法,其木质都是将模型变为贝叶斯模型,通过引入先验分布打破似然一统天下的局囿。而引入先验方法的不同也就产生了很多不同的平滑方法。方法二是回退法。有点像决策树中的后剪枝方法,即如果n元的概率不到,那就往上回退一步,用n-1元的概率乘上一个权重来模拟(3)npos模型( Context=cwt-n+1y,c(wt-n+2)…,c(wt-1))严格来说n-pos只是η-gram的一种衍生模型。 n-gram模型假定第t个词出现概率条件依赖它前N-1个词,而现实中很多词岀现的概率是条件依赖丁它前面词的语法功能的。n-pos模型就是基于这种假设的模型,它将词按照其语法功能进行分类,由这些词类决定下一个词出现的概率。这样的词类称为词性( Part-of-speech,简称为PoS)。npos模型中的每个词的条件概率表小为:p(s)=p(W1)=pW1,W2灬…Wr)∏=1p(Wec(wt-m+1,c(W-n+2)…,c(Wt-1)c为类别映射函数,即把T个词映射到K个类别(1=0∑f(i,wt-1,…,wt-n+2,Wt-n+1)=1上图中,每个是输入词都被映射为一个向量,该映射用C表示,所以C(Wwt-1)即为wt-1的词向量。g为一个前馈或递归神经网终,其输出是一个向量,向量中的第j个元素表示概率p(Mw=iw1)。训练的目标依然是最大似然加正则项,即:Max Likelihood max =>t logf (wt,Wt-10)+R(0)其中日为参数,R(6)为正则项,输出层采用 softmax函数:p(wvw2-1…,w4-n+,W=n+1)=其中y是每个输出词i的木归化log概率,计算如y=b+wx+tanh(d +h其中b,W,U,d和H都是参数,x为输入,需要主要的是,一般的袢经网络输入是不需要优化,而在这里,x=(CWwt-1),Cwt-2),…,C(Wtn+1),也是需要优化的参数。在图中,如果下层原始输入ⅹ不直接连到输出的话,可令b=0,W=0如果采川随机梯度算法的话,梯度更新的法则为:dlogp(welwL-1,,Wi-n+2,Wt-7+1)e←e+∈其中∈为 learning rate。需要注意的是,一般神经网络的输入层只是一个输入值,而在这里,输入层ⅹ也是参数(存在C中),也是需要优化的。优化结束之后,词向量有了,语言模型也有了。这个 Softmax模型使得概率取值为(,1),因此不会出现概率为0的情况,也就是自带平滑,无需传统ηgram模型中那些复杂的平滑算法。 Bengio在APNews数据集上倣的对比实验也表明他的模型效果比精心设计平滑算法的普通n-gram算法要好10%到20‰。44其他NNLM请参考 lister的《 Deep Learning in NLP(一)词向量和语言模型》一文[10],这里不再累述22c&W的 SENNA23M&H的HLBL24 Nikolov的 RNNLM25 Huang的语义强化45 Log-Linear模型Log-linear也是Word2vec所用模型的前身。Log- linear模型有以下成分组成1.一个输入集合X;2.一个标注集合y,Y是有限的;3.一个正整数K指定模型中向量的维数;4.一个映射函数f:Xx→R,即将任意的(x,y)对映射到个K维实数向量;5.一个K维的实数参数向量v∈R。对任意的x,y,模型定义的条件概率为:v-f(x, y)pO: V)=·r(x,J为何叫 log-linear?原因是分子部分取完log后是v中个元素的线性表达式例如v1+v3+v。 Michael c。ins在《 Log-Linear Models》给出的一个K-8的例子为:1 iflode0 otherwise1 if y= model and wi-1=statistical0 otherwise∫3(r,y)1 if y= mode Ianystatistical0 otherwisey=model, Wi 2=any0 otherwise∫5(x,1 i[ y=modeL, 2ui-l Is an adjective0 otherwise1 if y=model, wi-1 ends in"icalo otherwiseI if y= modemoodelnot in i1,,,’0 otherwise1 if y=model,"grammatical"is in w1,...wi-10 otherwise其中x是一个文字序列:ww2W,y为一个词可以看出,各种n元话言关系及其变种都可以作为映射函数,当然 Log-linear模型的分丹需要遍历所有的词汇,看起米计算量巨大,但因为绝大部分词汇都是属于 otherwise分支,即为0,所以计算上也是可以接受的。46 Log-Bilinear模型Log- bilinear[13]是 Hinton提出的一个模聖,和 Log-linear的区别在于映射函数部分,之前∫xy)对于一个具休的输入数据都是直接映射到一个K维实数向量,前 Log-bilinear模型中则是直接采用和y对应的向量wy。因为输入的v和v都是变量,所以这个模型就变为取log后成双线性了,因此成为Log- bilinear。这样带来的问题是分母上的计算变得密集,当然这难不倒聪明的大佬们,收进的方法则是引入分类或聚类的思想,不直接做多分类,而是每次做二分类。这就是46节中的层次化 Log-bilinear模型46层次化 Log-Bilinear模型Hinton进步结合 Bengio的层次化概率语言模型[4提出了层次化Log-bilinear模型[13]。这种模型的特征是:1.叶子结点为词(word)的二叉树,而内部结点虽然也有对应的向量,但并不对应到具体的词。2.每个结点上都要进行决策。N元层次化Log- bilinear模型中由上下文预测下一个词为w的公式为:
用户评论