本文概览:
Word2Vec是语言模型中的一种,它是从大量文本预料中以无监督方式学习语义知识的模型,被广泛地应用于自然语言处理中。
Word2Vec是用来生成词向量的工具,而词向量与语言模型有着密切的关系。因此,我们先来了解一些语言模型方面的知识。
统计语言模型是用来计算一个句子的概率的概率模型,它通常基于一个语料库来构建。那什么叫做一个句子的概率呢?假设 表示由 个词 按顺序构成的一个句子,则 的联合概率为:
被称为语言模型,即用来计算这个句子概率的模型。利用Bayes公式,上式可以被链式地分解为:
其中的条件概率
看起来好像很简单,是吧?但是,具体实现起来还是有点麻烦。例如,先来看看模型参数的个数。刚才是考虑一个给定的长度为T的句子,就需要计算T个参数。不防假设语料库对应词典
此外,这些参数如何计算呢?常见的方法有n-gram模型、决策树、最大熵模型、最大熵马尔可夫模型、条件随机场、神经网络等方法。本文只讨论n-gram模型和神经网络两种方法。
考虑
根据大数定理,当语料库足够大时,
其中,
从公式(1)可以看出:一个词出现的概率与它前面的所有词都相关。如果假定一个词出现的概率只与它前面固定数目的词相关呢?这就是n-gram模型的基本思想,它做了一个
于是,公式(2)就变成了
以
这样简化,不仅使得单个参数的统计变得更容易(统计时需要匹配的词串更短),也使得参数的总数变少了。
那么,n-gram中的参数
表1:模型参数数量与n的关系
在计算复杂度方面,表1给出了n-gram模型中模型参数数量随着
在模型效果方面,理论上是
另外,n-gram模型中还有一个叫做平滑化的重要环节。回到公式(3),考虑两个问题:
显然不能,但这是一个无法回避的问题,哪怕你的预料库有多么大。平滑化技术就是用来处理这个问题的,这里不展开讨论。
总结起来,n-gram模型是这样一种模型,其主要工作是在语料中统计各种词串出现的次数以及平滑化处理。概率值计算好之后就存储起来,下次需要计算一个句子的概率时,只需找到相关的概率参数,将它们连乘起来就好了。
然而,在机器学习领域有一种通用的解决问题的方法:对所考虑的问题建模后先为其构造一个目标函数,然后对这个目标函数进行优化,从而求得一组最优的参数,最后利用这组最优参数对应的模型来进行预测。
对于统计语言模型而言,利用最大似然,可把目标函数设为:
其中,
当然,实际应用中常采用最大对数似然,即把目标函数设为
然后对这个函数进行最大化。
从公式(4)可见,概率
其中
很显然,对于这样一种方法,最关键的地方就在于函数
本小节介绍 Bengio 等人于2003年在论文《A Neural Probabilistic Language Model》中提出的一种神经概率语言模型。该论文首次提出用神经网络来解决语言模型的问题,虽然在当时并没有得到太多的重视,却为后来深度学习在解决语言模型问题甚至很多别的nlp问题时奠定了坚实的基础,后人站在Yoshua Bengio的肩膀上,做出了更多的成就。包括Word2Vec的作者Tomas Mikolov在NNLM的基础上提出了RNNLM和后来的Word2Vec。文中也较早地提出将word表示一个低秩的向量,而不是One-Hot。word embedding作为一个language model的副产品,在后面的研究中起到了关键作用,为研究者提供了更加宽广的思路。值得注意的是Word2Vec的概念也是在该论文中提出的。
什么是词向量呢?简单来说就是,对词典
既然是神经概率语言模型,其中当然要用到神经网络了。 下图给出了神经网络的结构示意图。模型一共三层,第一层是映射层,将
经过上面步骤的计算得到的
其中
这里,需要注意的是需要提前初始化一个word embedding矩阵,每一行表示一个单词的向量。词向量也是训练参数,在每次训练中进行更新。这里可以看出词向量是语言模型的一个副产物,因为语言模型本身的工作是为了估计给定的一句话有多像人类的话,但从后来的研究发现,语言模型成了一个非常好的工具。
Softmax是一个非常低效的处理方式,需要先计算每个单词的概率,并且还要计算指数,指数在计算机中都是用级数来近似的,计算复杂度很高,最后再做归一化处理。此后很多研究都针对这个问题进行了优化,比如层级softmax、softmax tree。
当然NNLM的效果在现在看来并不算什么,但对于后面的相关研究具有非常重要的意义。论文中的Future Work提到了用RNN来代替MLP作为模型可能会取得更好的效果,在后面Tomas Mikolov的博士论文中得到了验证,也就是后来的RNNLM。
与n-gram模型相比,神经概率语言模型有什么优势呢?主要有以下两点:
举例来说,如果某个(英语)语料中
A dog is running in the room
A cat is running in the room
The cat is running in a room
A dog is walking in a bedroom
The dog was walking in the room
最后,我们回过头来想想,词向量在整个神经概率语言模型中扮演了什么角色呢?训练时,它是用来帮助构造目标函数的辅助参数,训练完成后,它也好像只是语言模型的一个副产品。但这个副产品可不能小觑,下一节将对其作进一步阐述。
自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理,通常需要将语言数学化,因为机器不是人,机器只认数学符号。向量是人把自然界的东西抽象出来交给机器处理的东西,基本上可以说向量是人对机器输入的主要方式了。
词向量就是用来将语言中的词进行数学化的一种方式,顾名思义,词向量就是把一个词表示成一个向量。 我们都知道词在送到神经网络训练之前需要将其编码成数值变量,常见的编码方式有两种:One-Hot Representation 和 Distributed Representation。
一种最简单的词向量方式是One-Hot编码 ,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量中只有一个
举个例子:I like writing code,那么转换成独热编码就是:
词 | One-Hot 编码 |
---|---|
I | 1 0 0 0 |
like | 0 1 0 0 |
writing | 0 0 1 0 |
code | 0 0 0 1 |
这种One Hot编码如果采用稀疏方式存储,会是非常的简洁:也就是给每个 词分配一个数字 ID 。比如上面的例子中,code记为
但这种词表示有三个缺点:
(1)容易受维数灾难的困扰,尤其是将其用于 Deep Learning的一些算法时;
当你的词汇量达到千万甚至上亿级别的时候,你会遇到一个更加严重的问题,维度爆炸了.这里举例使用的是
( 2 )词汇鸿沟,不能很好地刻画词与词之间的相似性;
任意两个词之间都是孤立的,从这两个向量中看不出两个词是否有关系。比如说,I、like之间的关系和like、writing之间的关系,通过
(3)强稀疏性;
当维度过度增长的时候,你会发现0特别多,这样造成的后果就是整个向量中有用的信息特别少,几乎就没法做计算。
由于One-hot编码存在以上种种问题,所以研究者就会寻求发展,用另外的方式表示,就是Distributed Representation。
Distributed Representation最早是Hinton于1986年提出的,可以克服One-Hot Representation的上述缺点。其基本想法是:通过训练将某种语言中的每一个词 映射成一个固定长度的短向量(当然这里的“短”是相对于One-Hot Representation的“长”而言的),所有这些向量构成一个词向量空间,而每一个向量则可视为 该空间中的一个点,在这个空间上引入“距离”,就可以根据词之间的距离来判断它们之间的语法、语义上的相似性了。Word2Vec中采用的就是这种Distributed Representation 的词向量。
为什么叫做 Distributed Representation?很多人问到这个问题。一个简单的解释是这样的:对于One-Hot Representation,向量中只有一个非零分量,非常 集中(有点孤注一掷的感觉);而对于Distributed Representation,向量中有大量非零分量,相对分散(有点风险平摊的感觉),把词的信息分布到各个分量 中去了。这一点,跟并行计算里的分布式并行很像。
如何获取词向量呢?有很多不同模型可以用来估计词向量,包括有名的LSA(Latent Semantic Analysis)和LDA(Latent Dirichlet Allocation)。此外,利用神经 网络算法也是一种常用的方法,上一节介绍的神经概率语言模型就是一个很好的实例。当然,在那个模型中,目标是生成语言模型,词向量只是一个副产品。事实上, 大部分情况下,词向量和语言模型都是捆绑在一起的,训练完成后两者同时得到。在用神经网络训练语言模型方面,最经典的论文就是Bengio于2003年发表的《A Neural Probabilistic Language Model》 ,其后有一系列相关的研究工作,其中也包括谷歌Tomas Mikolov团队的Word2Vec。
Word2Vec是轻量级的神经网络,其模型仅仅包括输入层、隐藏层和输出层,模型框架根据输入输出的不同,主要包括CBOW和Skip-gram模型。 CBOW的方式是在知道词
为了更好的了解模型深处的原理,我们先从Simple CBOW model(仅输入一个词,输出一个词)框架说起。
如上图所示:
了解了Simple CBOW model的模型框架之后,我们来学习一下其目标函数。
输出层通过softmax归一化,
了解了Simple CBOW model之后,扩展到CBOW就很容易了,只是把单个输入换成多个输入罢了(划红线部分)。
对比可以发现,和simple CBOW不同之处在于,输入由
有了CBOW的介绍,对于Skip-gram model 的理解应该会更快一些。
如上图所示,Skip-gram model是通过输入一个词去预测多个词的概率。输入层到隐藏层的原理和simple CBOW一样,不同的是隐藏层到输出层,损失函数变成了
一般神经网络语言模型在预测的时候,输出的是预测目标词的概率,也就是说我每一次预测都要基于全部的数据集进行计算,这无疑会带来很大的时间开销。不同于其他神经网络,Word2Vec提出两种加快训练速度的方式,一种是Hierarchical softmax,另一种是Negative Sampling。
基于层次Softmax的模型主要包括输入层、投影层(隐藏层)和输出层,非常的类似神经网络结构。对于Word2Vec中基于层次Softmax的CBOW模型,我们需要最终优化的目标函数是 :
其中
下图给出了基于层次Softmax的CBOW的整体结构,首先它包括输入层、投影层和输出层:
为了便于下面的介绍和公式的推导,这里需要预先定义一些变量:
既然已经引入了那么多符号,我们通过一个简单的例子把它们落到实处吧,我们考虑单词w="足球"的情形。下图中红色线路就是我们的单词走过的路径,整个路径上的
下面我们需要开始考虑如何构建条件概率函数
既然是二分类,那么我们可以定义一个为正类,一个为负类。我们的"足球"的哈夫曼编码为
简而言之就是,将一个结点进行分类时,分到左边就是负类,分到右边就是正类。
在进行二分类的时候,这里选择了Sigmoid函数。那么,一个结点被分为正类的概率就是:
被分为负类的概率就是
对于从根节点出发到达“足球”这个叶子节点所经历的4次二分类,将每次分类的概率写出来就是:
但是,我们要求的是
至此,通过w="足球"的小例子,Hierarchical Softmax的基本思想就已经介绍完了。小结一下:对于词典中的任意一个单词
条件概率
其中:
或者写成整体表达式:
将公式(8)带入公式(6)中,得到:
为了梯度推导方便起见,将上式中双重求和符号下的内容简记为
至此,已经推导出了CBOW模型的目标函数公式(9),接下来就是讨论如何优化它,即如何将这个函数最大化。Word2Vec里面采用的是随机梯度上升法。而梯度类算法的关键是给出相应的梯度计算公式,进行反向传播。
首先考虑
于是,
接下来考虑
到了这里,我们已经求出来了
本小节介绍Word2Vec中的另一个模型-Skip-gram模型,由于推导过程与CBOW大同小异,因此会沿用上小节引入的记号。
下图给出了Skip-gram模型的网络结构,同CBOW模型的网络结构一样,它也包括三层:输入层、投影层和输出层。下面以样本
对于Skip-gram模型,已知的是当前词
上式中
其中:
将公式(10)依次代回,可得对数似然函数公式(7)的具体表达式:
同样,为了梯度推导方便,将三重求和符号里的内容简记为
至此,已经推导出了Skip-gram模型的目标函数(公式11),接下来同样利用随机梯度上升法对其进行优化。而梯度类算法的关键是给出相应的梯度计算公式,进行反向传播。
首先考虑
于是,
同理,根据对称性,可以很容易得到
我们也可以得到关于
本节将介绍基于Negative Sampling的CBOW和Skip-gram模型。Negative Sampling(简称为NEG)是Tomas Mikolov等人在论文《Distributed Representations of Words and Phrases and their Compositionality》中提出的,它是NCE(Noise Contrastive Estimation)的一个简化版,目的是用来提高训练速度并改善所得词向量的质量。与Hierarchical Softmax相比,NEG不再使用复杂的Huffman树,而是利用相对简单的随机负采样,能大幅度提高性能,因而可作为Hierarchical Softmax的一种替代。
NCE 的细节有点复杂,其本质是利用已知的概率密度函数来估计未知的概率密度函数。简单来说,假设未知的概率密度函数为X,已知的概率密度为Y,如果得到了X和Y的关系,那么X也就可以求出来了。具体可以参考论文《 Noise-contrastive estimation of unnormalized statistical models, with applications to natural image statistics》。
顾名思义,在基于Negative Sampling的CBOW和Skip-gram模型中,负采样是个很重要的环节,对于一个给定的词
词典
下面,先用一段通俗的描述来帮助读者理解带权采样的机理。设词典
这里
接下来再谈谈Word2Vec中的具体做法。记
图:
将内部剖分结点
有了这个映射,采样就简单了:每次生成一个
值得一提的是,Word2Vec源码中为词典
此外,代码中取
上面已经介绍完了负采样算法,下面开始推导出基于Negative Sampling的CBOW的目标函数。首先我们先选好一个关于
上式表示词
对于一个给定的正样本
其中:
这里
为什么要最大化
其中,
可以作为最终的整体优化目标。当然,这里为了求导方便,对
同样,为了求导方便,我们还是取
接下来,利用随机梯度上升法求梯度。首先考虑
那么
同时根据对称性,可以得到
那么
本小节介绍基于Negative Sampling的Skip-gram模型。它和上一小节介绍的CBOW模型所用的思想是一样的,因此,这里我们直接从目标函数出发,且沿用之前的记号。
对于一个给定的样本
其中:
或者写成整体表达式:
这里
就可以作为整体优化的目标。同样,我们取
为了梯度推导的方便,我们依旧将三重求和符号下的内容提取出来,记为
接下来,利用随机梯度上升法求梯度。首先考虑
然后得到
同理根据对称性,得到:
然后得到
(1)Word2Vec两个算法模型的原理是什么,网络结构怎么画?
(2)网络输入输出是什么?隐藏层的激活函数是什么?输出层的激活函数是什么?
(3)目标函数/损失函数是什么?
(4)Word2Vec如何获取词向量?
(5)推导一下Word2Vec参数如何更新?
(6)Word2Vec的两个模型哪个效果好哪个速度快?为什么?
(7)Word2Vec加速训练的方法有哪些?
(8)介绍下Negative Sampling,对词频低的和词频高的单词有什么影响?为什么?
(9)Word2Vec和隐狄利克雷模型(LDA)有什么区别与联系?
以上问题可以通过本文和参考文章找到答案,这里不再详细解答。
(10)介绍下Hierarchical Softmax的计算过程,怎么把 Huffman 放到网络中的?参数是如何更新的?对词频低的和词频高的单词有什么影响?为什么?
Hierarchical Softmax利用了Huffman树依据词频建树,词频大的节点离根节点较近,词频低的节点离根节点较远,距离远参数数量就多,在训练的过程中,低频词的路径上的参数能够得到更多的训练,所以效果会更好。
(11)Word2Vec有哪些参数,有没有什么调参的建议?
(12)Word2Vec有哪些局限性?
Word2Vec作为一个简单易用的算法,其也包含了很多局限性:
Word2Vec主要原理是根据上下文来预测单词,一个词的意义往往可以从其前后的句子中抽取出来。
而用户的行为也是一种相似的时间序列,可以通过上下文进行推断。当用户浏览并与内容进行交互时,我们可以从用户前后的交互过程中判断行为的抽象特征,这就使得我们可以把词向量模型应用到推荐、广告领域当中。
基于Word2Vec这一类的Graph Embedding方法有很多,具体可以参考论文:DeepWalk(是引入Word2Vec思想比较经典的图嵌入算法),node2vec,struc2vec 等等。
Airbnb在论文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》中提出将用户的浏览行为组成List,通过Word2Vec方法学习item的向量,其点击率提升了21%,且带动了99%的预定转化率。该论文主要是在Skip-gram 模型的基础上做了改进。
Yahoo在论文《E-commerce in Your Inbox: Product Recommendations at Scale》中提出Yahoo邮箱从发送到用户的购物凭证中抽取商品并组成List,通过Word2Vec学习并为用户推荐潜在的商品;
Yahoo在论文《Scalable Semantic Matching of Queries to Ads in Sponsored Search Advertising》中提出将用户的搜索查询和广告组成List,并为其学习特征向量,以便对于给定的搜索查询可以匹配适合的广告。
【1】Rong X. word2vec parameter learning explained[J]. arXiv preprint arXiv:1411.2738, 2014.
【2】【Paper】Word2Vec:词嵌入的一枚银弹,地址:https://mp.weixin.qq.com/s/7dsjfcOfm9uPheJrmB0Ghw
【3】Word2Vec详解-公式推导以及代码 - link-web的文章 - 知乎 https://zhuanlan.zhihu.com/p/86445394
【4】The Illustrated Word2vec,Jay Alammar,地址:https://jalammar.github.io/illustrated-word2vec/
【5】图解word2vec(原文翻译),地址:https://mp.weixin.qq.com/s/Yq_-1eS9UuiUBhNNAIxC-Q
【6】word2vec 相比之前的 Word Embedding 方法好在什么地方? - 知乎 https://www.zhihu.com/question/53011711
【7】[NLP] 秒懂词向量Word2vec的本质 - 穆文的文章 - 知乎 https://zhuanlan.zhihu.com/p/26306795
【8】http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
【9】word2vec模型深度解析 - TianMin的文章 - 知乎 https://zhuanlan.zhihu.com/p/85998950
【10】 A Neural Probabilistic Language Model - 张俊的文章 - 知乎 https://zhuanlan.zhihu.com/p/21240807
【11】word2vec有什么应用? - 知乎 https://www.zhihu.com/question/25269336
最后除引用文献外也推荐一些看过的资料:
【1】《深度学习word2vec学习笔记》,北流浪子。
【2】《Word2Vec中的数学》,peghoty。
【3】《Deep Learning实战之Word2Vec》,网易有道。
本文主要参考了peghoty的《Word2Vec中的数学》,写的非常棒, 强烈推荐大家学习。此外,我把自己学习Word2Vec时,收集到的优质资料已经整理好了,公众号后台回复【Word2Vec】领取。
推荐阅读
From Word Embeddings To Document Distances 阅读笔记
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
可解释性论文阅读笔记1-Tree Regularization
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。