007_NLP_Task4 从one-hot到word2vec

本文深入介绍了Google的word2vec工具,它使用CBoW和Skip-gram模型来计算词向量。word2vec通过神经网络语言模型学习词的连续表示,简化了传统统计语言模型的复杂性。文章讨论了两种模型的训练方法,以及Hierarchical Softmax和Negative Sampling两种优化技巧,揭示了word2vec在自然语言处理中的重要性。
摘要由CSDN通过智能技术生成

word2vec

word2vec

        2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。另外需要强调的一点是,word2vec是一个计算word vector的开源工具。当我们在说word2vec算法或模型的时候,其实指的是其背后用于计算word vector的CBoW模型和Skip-gram模型。很多人以为word2vec指的是一个算法或模型,这也是一种谬误。接下来,本文将从统计语言模型出发,尽可能详细地介绍word2vec工具背后的算法模型的来龙去脉。

       word2vec作为神经概率语言模型的输入,其本身其实是神经概率模型的副产品,是为了通过神经网络学习某个语言模型而产生的中间结果。具体来说,“某个语言模型”指的是“CBOW”和“Skip-gram”。具体学习过程会用到两个降低复杂度的近似方法——Hierarchical Softmax或Negative Sampling。两个模型乘以两种方法,一共有四种实现。这些内容就是本文理论部分要详细阐明的全部了。

 

Neural Network Language Model

NNLM模型的基本思想可以概括如下:

  1. 假定词表中的每一个word都对应着一个连续的特征向量;
  2. 假定一个连续平滑的概率模型,输入一段词向量的序列,可以输出这段序列的联合概率;
  3. 同时学习词向量的权重和概率模型里的参数。

值得注意的一点是,这里的词向量也是要学习的参数。

在03年的论文里,Bengio等人采用了一个简单的前向反馈神经网络f(wt−n+1,...,wt)f(wt−n+1,...,wt)来拟合一个词序列的条件概率p(wt|w1,w2,...,wt−1)p(wt|w1,w2,...,wt−1)。整个模型的网络结构见下图:

我们可以将整个模型拆分成两部分加以理解:

  1. 首先是一个线性的Embedding层。它将输入的N−1个one-hot词向量,通过一个共享的D×V的矩阵C,映射为N−1个分布式的词向量(distributed vector)。其中,V是词典的大小,D是Embedding向量的维度(一个先验参数)。C矩阵里存储了要学习的word vector。

  2. 其次是一个简单的前向反馈神经网络g。它由一个tanh隐层和一个softmax输出层组成。通过将Embedding层输出的N−1个词向量映射为一个长度为V的概率分布向量,从而对词典中的word在输入context下的条件概率做出预估:

     

    p(wi|w1,w2,...,wt−1)≈f(wi,wt−1,...,wt−n+1)=g(wi,C(wt−n+1),...,C(wt−1))p(wi|w1,w2,...,wt−1)≈f(wi,wt−1,...,wt−n+1)=g(wi,C(wt−n+1),...,C(wt−1))

我们可以通过最小化一个cross-entropy的正则化损失函数来调整模型的参数θ:

 

L(θ)=1T∑tlogf(wt,wt−1,...,wt−n+1)+R(θ)L(θ)=1T∑tlog⁡f(wt,wt−1,...,wt−n+1)+R(θ)


其中,模型的参数θ包括了Embedding层矩阵C的元素,和前向反馈神经网络模型g里的权重。这是一个巨大的参数空间。不过,在用SGD学习更新模型的参数时,并不是所有的参数都需要调整(例如未在输入的context中出现的词对应的词向量)计算的瓶颈主要是在softmax层的归一化函数上(需要对词典中所有的word计算一遍条件概率)。

word2vec两种训练方式:

  • Continuous Bag of Words Model和Skip-Gram

CBoW & Skip-gram Model

CBoW

首先,我们对原始的NNLM模型做如下改造:

  1. 移除前向反馈神经网络中非线性的hidden layer,直接将中间层的Embedding layer与输出层的softmax layer连接;
  2. 忽略上下文环境的序列信息:输入的所有词向量均汇总到同一个Embedding layer;
  3. 将Future words纳入上下文环境

得到的模型称之为CBoW模型(Continuous Bag-of-Words Model),也是word2vec算法的第一个模型

                                       

网络结构:

语言模型还是那个问题,映射函数的构造,这里根据任务不同 CBOW 需要构造的是  ,而 Skip-gram 需要构造的是  ,在CBOW 中,改进了 NNLM 中计算复杂的环节,去掉了 NNLM 中的隐藏层,且最后的 softmax 层在CBOW中也变成了一个 Huffman 树的结构。整个网络如下图所示:

原理:

CBOW 是 Continuous Bag-of-Words Model 的缩写,是一种根据上下文的词语预测当前词语的出现概率的模型。其图示如上图左。

CBOW是已知上下文,估算当前词语的语言模型。其学习目标是最大化对数似然函数:

屏幕快照 2016-07-14 下午7.45.11.png

其中,w表示语料库C中任意一个词。从上图可以看出,对于CBOW,

输入层是上下文的词语的词向量(什么!我们不是在训练词向量吗?不不不,我们是在训练CBOW模型,词向量只是个副产品,确切来说,是CBOW模型的一个参数。训练开始的时候,词向量是个随机值,随着训练的进行不断被更新)。

投影层对其求和,所谓求和,就是简单的向量加法。

 

                  

输出层输出最可能的w。由于语料库中词汇量是固定的|C|个,所以上述过程其实可以看做一个多分类问题。给定特征,从|C|个分类中挑一个。

对于神经网络模型多分类,最朴素的做法是softmax回归:

神经网络依存句法分析29.png

Skip-gram

skip_gram模型框架

                                              

Skip-gram  的任务是给出词 ww 来预测其前后各 cc 个词语 context(w)context(w) ,其推倒与 CBOW 大同小异,网络结构也是大体相同,如下图:

输入层对于输入词语 ww ,转化为词向量的形式  v(w)∈Rmv(w)∈Rm 当做输入

投影层由于只有一个词向量 v(w)v(w) ,投影层其实是多于的,只是为了和 CBOW 做对比

输出层同 CBOW 一样为 一颗 Huffman 树

 CBOW 的任务是给定 context(w)context(w) 计算 ww, 对应概率为 p(w|context(w))p(w|context(w)) ,而 Skip-gram 的任务是给定 ww ,来预测 context(w)context(w) ,其对应的概率为 p(w|context(w))p(w|context(w)) , Skip-gram将 p(w|context(w))p(w|context(w)) 定义为如下的形式:

                 

类似于 CBOW 中 Hierarchical Softmax 的思想,每个 w′w′ 的概率可以表达为  ,其中:

              

word2vec两种优化方式:

  • hierarchical softmax 和negative sampling

我们知道无论是CBOW还是Skip-gram模型,其实都是分类模型。对于机器学习中的分类任务,在训练的时候不但要给正例,还要给负例。对于Hierarchical Softmax,负例是二叉树的其他路径。对于Negative Sampling,负例是随机挑选出来的。据说Negative Sampling能提高速度、改进模型质量。

word2vec词向量练习

输出:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值