现在的位置: 首页 > 综合 > 正文

Google word2vec 模型和代码解析 之 前扑

2013年12月06日 ⁄ 综合 ⁄ 共 1528字 ⁄ 字号 评论关闭

1.word2vec

2.语言模型和词向量

3.神经网络语言模型

4.word2vec 解析

5.不同词向量模型比较

6. 参考和相关文献

1.Word2Vec是什么?

它是一个旨根据大语料库上高速有效训练词向量的工具;Bengio,Hinton,Collert,Mikolov等DeepLearngin的大师们都为神经网络语言模型和词向量构建出了漂亮的模型,效果也非前日线性模型可及,但是深层网络的训练速度总是让人牙疼。

  word2vec不是什么?

它不是一个语言模型;

它不是Deep的结构;

2.语言模型和词向量

语言模型,简单的说,就是计算给定的一句话有几分“合理”的一个判别方法,这里的“合理”是指语法和浅层语义上的合理。“你好吗?”和“好吗?你”都是合理的,“吗 你好?” 就显得不“合理”。我们学英语,学语法,也就是在学习么说出“合理”的英文句子。 最Baseline的统计语言模型自然是N_gram 了。但是N_gram 是一种离散的简单统计,不考虑词于词之间的相似,而语言的稀疏性又是天然的,因此N-gram的泛化能力很差。

词向量,Word Embedding, 是一种Distributed representation,它以一个n维的时值向量来表示一个词。在此之前,一个词的表示是通过|V|维的一个01向量来表示的,|V|是语言中词表的大小,并且这个向量只有一个位置为1,其余都是0,这叫one-hot representation,通常,n远小于|V|。由于这些向量是实值非正交的,因此向量之间的(余弦)距离就可以用来表示词之间的联系,如"北大"和“清华”的向量应该就比较近,因为他们在语法和语义上都有一定的相似性,因此词向量有天然的泛华能力,如,在语料中出现“北京大学东门”这个组合,但是一个未知的组合,“清华大学西门”我。们已经从词向量中计算出,“东门”和“西门”非常相近,“清华大学”和“北京大学”更近,那么P(清华大学西门)
就 得到了P(北京大学东门) 在预料中的概率了。

词向量的问题,本质是知识表示问题。在任何自然语言处理中都必然要涉及到。实验也表明,使用词向量作为输入表示,使多项tasks都刷新了历史。

3.神经网络语言模型

上面给出的词向量都是用神经网络语言模型训练出的,这又是一个说来话长的topic,一句话解释就是用神经网络来训练语言模型,并且通常伴有词向量作为农副产品输出。下面给出Bengio 03经典版的NNLM的结构图:

输入是上文n-1个词,经过Matrix C的变化,每个词用一个 k 维向量表示,然后这n-1个向量拼起来作为NNLM的输入,这个神经网络只有一个非线性的隐藏层(为了表示方便,这里的bias都未在图中表示出来),输入是一个|V|维的预测结果,在其上跑一个softmax 得到生成每个词的概率,NN用BP训练。

Matrix C就是包含了每个词向量的大矩阵,训练完语言模型后也就得到了这个副产品。但是问题是,这个模型训computational expensive, 每Epoch的训练时间都以月计算。

这个模型是标准的NN了,而且引领了word Embedding的潮流,后续很多模型在词思想上进行扩展改进,包括解决一次多义问题、训练效率问题,其中,Minh & Hinton 的HLBL和Mikolov的RNN比较有意思。

后者加入了循环,相当于引入了更长的上下文,前者则是在输出时引入层次的思想:因为softmax层要计算所有词的一个输出值,然后才进行概率的归一化,因此预测生成某一个词的概率计算量和预测所有词的概率的计算量是相等的。 

4.word2vec 解析

这里的解析式结合了官方给出的reference和代码,个人理解,仅供参考和讨论。

5.效果比较

6. 参考文献

抱歉!评论已关闭.