【NLP-词向量】从模型结构到损失函数详解word2vec

2019-09-10 17:40:30 浏览数 (1)

上周我们讲到,在进行NNLM训练时,能够得到副产品,词向量。本文介绍一种专门用于词向量制备的方法:word2vec,利用它能够高效的训练出词向量。

作者&编辑 | 小Dream哥

1 word2vec是什么?

在阐述word2vec的原理之前,笔者先大致介绍一下,word2vec是什么,能够用来干什么,让读者有一个大致的认识。

word2vec是2013年Efficient estimation of word representations in vector space论文中提出的一种有效的词向量制备方法,沿用至今。

word2vec用前馈神经网络进行训练,提出了Continuous Bag-of-Words和Continuous Skip-Gram两种模型训练方法,损失层有层次Softmax(Hierarchical Softmax)和负采样(Negative Sampling)两种。

2 模型结构

上面我们说了,word2vec是一种高效的制备词向量的方法,那么跟2003年的NNLM相比,它的效率高在哪里呢?先从网络结构开始,我们来细细看一下。

如上图所示,是word2vec中提出的两种模型训练模式:Continuous Bag-of-Words和Continuous Skip-Gram。

Continuous Bag-of-Words:

CBOW是这样一种任务,给定一个去掉了中间一个词的context,预测其中间的那个词。它跟NNLM的任务有点相似,差别在于,它是双向的,即预测词时利用了该词前后的词语信息。

Continuous Skip-Gram:

Continuous Bag-of-Words是通过一个词,预测其周围的几个词。

以Continuous Bag-of-Words为例,我们来看看word2vec的网络结构。

如上图所示,word2vec将网络做了如下的改造:

1.输入的所有词向量相加求和得到SUM,称为embedding layer;

2.移除前向反馈神经网络中非线性的hidden layer,直接将中间层的embedding layer与输出层的softmax layer连接;

我们来分析下这样做有什么好处呢?移除中间的隐藏层,最大的好处就是能够极大的减少运算量了,训练时候的效率就能够大幅提升。Continuous Skip-Gram也是相似的道理了。

3 损失函数

以CBOW模型为例,训练时最容易想到的是,得到输入序列的SUM embedding之后,通过一个project和softmax层,计算出字典V中每个词的概率,再构建交叉熵之类的损失函数,然而直接对词典里的V个词计算相似度并归一化显然是极其耗时的。

为此作者提出了层次Softmax(Hierarchical Softmax)和负采样(Negative Sampling)两种损失层。层次Softmax(Hierarchical Softmax)原理很有意思,但是计算起来还是比NCE要复杂。因此,真正应用比较多的是NCE,这里就详细介绍一下NCE的原理。

负采样的思想最初来源于一种叫做Noise-Contrastive Estimation的算法,原本是为了解决那些无法归一化的概率模型的参数预估问题。

在CBOW中,给定一个去掉了中间一个词的context(w),预测其中间的那个词w。那么,中间的那个词w就是正样本,其他的词就是负样本了。那么NCE的过程大致是这样的,对于context(w)构造一个关于w的负样本集NEG(w);在训练时,针对{w,NEG(w)}构造一个目标函数,通过优化该目标函数优化整个网络的参数(包括词向量)

那么,这个目标函数该怎么构建呢?

我先定义一个这样的函数,

其中:

那么p函数也可以这样表示:

这里X表示输入的各个词向量之和。

那我们的目标函数这样去构建:

也可表示为:

这样的话,我们在训练时,只需最大化这个g,就可以优化网络的参数。想想看为什么呢?从形式上看,最大化g就是最大化

同时最小化所有的

这不正是我们所需要的吗?

好了,我们来总结一下上述的过程。NCE的训练过程,就是构建一个关于w的负样本集NEG(w),针对正负样本集,计算g函数的值,训练时,通过最大化该值来优化网络

4 负采样的过程

我们这节来看看负采样的过程是怎么样进行的,也就是上述NEG(w)是如何获得的

对于语料C,可以构建一个词典D,并统计其中各个词的词频。整体的原则是,词频高的词选中作为负样本的概率就高。

设词典D中每一个词对应一个长度l(w)的线段,则l(w)=counter(w)/|C|。然后将这些线段首尾连接起来,就构成了一个长度为1的线段。在负采样时,随机往该线段上打点,打到的就被采到。这就是负采样的大致过程了,在word2vec的实际操作过程中,会做一些变化,但是基本的思想就是这样的。

总结

上述就是word2vec的基本原理了,通过word2vec能够高效的获得词向量,是自然语言处理入门必须要掌握的内容。有三AI-NLP知识星球详细介绍了如何搭建网络,复现上述的过程,感兴趣的同学可以扫下面的二维码加入。

读者们可以留言,或者加入我们的NLP群进行讨论。感兴趣的同学可以微信搜索jen104,备注"加入有三AI NLP群"

下期预告:自然语言处理中的命名实体识别

知识星球主要有以下内容:

(1) 聊天机器人。考虑到聊天机器人是一个非常复杂的NLP应用场景,几乎涵盖了所有的NLP任务及应用。所以小Dream哥计划以聊天机器人作为切入点,通过介绍聊天机器人的原理和实践,逐步系统的更新到大部分NLP的知识,会包括语义匹配,文本分类,意图识别,语义匹配命名实体识别、对话管理以及分词等。

(2) 知识图谱。知识图谱对于NLP各项任务效果好坏的重要性,就好比基础知识对于一个学生成绩好坏的重要性。他是NLP最重要的基础设施,目前各大公司都在着力打造知识图谱,作为一个NLP工程师,必须要熟悉和了解他。

(3) NLP预训练模型。基于海量数据,进行超大规模网络的无监督预训练。具体的任务再通过少量的样本进行Fine-Tune。这样模式是目前NLP领域最火热的模式,很有可能引领NLP进入一个全新发展高度。你怎么不深入的了解?

转载文章请后台联系

侵权必究

0 人点赞