深度学习第43讲:自然语言处理之word2vec

上一讲我们讲到自然语言处理中如何对词汇进行表征的问题,因为 one-hot 词汇表征有着明显的缺陷,所以笔者重点介绍了词嵌入词汇表征。词汇表征问题解决之后,NLP 的核心便是建立语言模型。

从深度学习的角度看,假设我们将 NLP 的语言模型看作是一个监督学习问题:即给定上下文词 X,输出中间词 Y,或者给定中间词 X,输出上下文词 Y。基于输入 X 和输出 Y 之间的映射便是语言模型。这样的一个语言模型的目的便是检查 X 和 Y 放在一起是否符合自然语言法则,更通俗一点说就是 X 和 Y 搁一起是不是人话。

所以,基于监督学习的思想,本文的主角——word2vec 便是一种基于神经网络训练的自然语言模型。word2vec 是谷歌于 2013 年提出的一种 NLP 工具,其特点就是将词汇进行向量化,这样我们就可以定量的分析和挖掘词汇之间的联系。因而word2vec 也是我们上一讲讲到的词嵌入表征的一种,只不过这种向量化表征需要经过神经网络训练得到。

word2vec训练神经网络得到一个关于输入 X 和 输出 Y 之间的语言模型,我们的关注重点并不是说要把这个模型训练的有多好,而是要获取训练好的神经网络权重,这个权重就是我们要拿来对输入词汇 X 的向量化表示。一旦我们拿到了训练语料所有词汇的词向量,接下来开展 NLP 研究工作就相对容易一些了。

word2vec 通常有两个版本的语言模型。一种是给定上下文词,需要我们来预测中间目标词,这种模型叫做连续词袋模型(Continuous Bag-of-Wods Model,CBOW),另一种是给定一个词语,我们来根据这个词预测它的上下文,这种模型叫做 skip-gram 模型。而且每个模型都有两种策略,本文为了减少篇幅,就介绍每个模型的一种主要策略。下面笔者就分别来详细介绍这两种word2vec 模型。

CBOW 模型

CBOW 模型的应用场景是要根据上下文预测中间词,所以我们的输入便是上下文词,当然原始的单词是无法作为输入的,这里的输入仍然是每个词汇的 one-hot 向量,输出 Y 为给定词汇表中每个词作为目标词的概率。参考 Rong Xin 大佬论文中给出的 CBOW 模型的结构图:

可见 CBOW 模型结构是一种普通的神经网络结构。主要包括输入层、中间隐藏层和最后的输出层。我们以输入输出样本(Context(w),w)为例对 CBOW 模型的三个网络层进行简单说明,其中假设Context(w) 由 w 前后各 c 个词构成。关于 CBOW 的部分数学细节问题,笔者这里直接搬运了博客园大佬博主peghoty的部分内容,一来他们写的太好,二来笔者太难,涉及到太多的数学公式(真的不想打公式)。

普通的基于神经网络的语言模型输出层一般就是利用 softmax 函数进行归一化计算,这种直接 softmax 的做法主要问题在于计算速度。尤其是我们采用了一个较大的词汇表的时候,对大的词汇表做求和运算,softmax 的分母运算会非常慢,直接影响到了模型性能。

所以上面peghoty大佬给出的示例是基于 Huffman 树的 Hierarchical Softmax (分级 softmax)输出层。跟大多数神经网络一样,CBOW 的训练方法仍然是基于损失函数的梯度计算方法,其目标函数如下:

除了分级 softmax 输出之外,还有一种叫做负采样的训练 trick,这里不详细讲述,感兴趣的朋友可自行查找资料。

具体数学细节可参考peghoty天涯浪子的博客内容:

https://www.cnblogs.com/peghoty/p/3857839.html

skip-gram 模型

skip-gram 模型的应用场景是要根据中间词预测上下文词,所以我们的输入 X 是任意单词,输出 Y 为给定词汇表中每个词作为上下文词的概率。参考 Rong Xin 大佬论文中给出的skip-gram模型的结构图:

可见skip-gram模型结构基本就是 CBOW 模型的翻转,也是一种普通的神经网络结构,同样也包括输入层、中间隐藏层和最后的输出层。继续以输入输出样本(Context(w),w)为例对skip-gram模型的三个网络层进行简单说明,其中假设Context(w) 由 w 前后各 c 个词构成。(同样搬运了 peghoty 的图解内容)

同样 skip-gram 模型的训练方法也是基于损失函数的梯度计算,目标函数如下:

总结

关于 CBOW 和 skip-gram 模型的更多数学细节,比如 Huffman 树、损失函数的推导等问题,笔者并没有更多的去细写,感兴趣的朋友根据文末给出的参考资料进行学习即可。从监督学习的角度来说,word2vec 本质上是一个基于神经网络的多分类问题,当输出词语非常多时,我们则需要一些像分级 Softmax 和负采样之类的 trick 来加速训练。但从自然语言处理的角度来说,word2vec 关注的并不是神经网络模型本身,而是训练之后得到的词汇的向量化表征。这种表征使得最后的词向量维度要远远小于词汇表大小,所以word2vec 从本质上来说是一种降维操作。我们把数以万计的词汇从高维空间中降维到低维空间中,大大方便了后续的 NLP 分析任务。

参考资料:

deeplearningai.com

https://zhuanlan.zhihu.com/p/26306795

word2vec Parameter Learning Explained

Efficient Estimation of Word Representations in Vector Space

https://www.cnblogs.com/peghoty/p/3857839.html

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181108B0DMQ400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券