打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

上周我们讲到,在进行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知识星球详细介绍了如何搭建网络,复现上述的过程,感兴趣的同学可以扫下面的二维码加入。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
白话word2vec
word2vec使用指导
不懂word2vec,还敢说自己是做NLP?
Word2Vec原理篇 | 基于Hierarchical Softmax的模型
万物皆Embedding,从经典的word2vec到深度学习基本操作item2vec
自然语言处理的一大步,应用Word2Vec模型学习单词向量表征
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服