Word2vec原理与实战详解
Word2vec原理与实战详解

Word2vec原理与实战详解

视频链接:https://ai.deepshare.net/detail/p_5ee62f90022ee_zFpnlHXA/6

文章标题:
Efficient Estimation of Word Representations in Vector Space
基于向量空间中词表示的有效估计
作者:TomasMikolov(第一作者)
单位:Google
发表于ICLR2013

1 研究背景

1.1 前期知识储备

数学知识:

  • 高等数学中微积分
  • 线性代数中的矩阵运算
  • 概率论的条件概率

机器学习:

  • 机器学习中基本的原理以及概念、如逻辑回归分类器、梯度下降方法等

神经网络:

  • 了解神经网络基本知识
  • 知道前馈神经网络和循环神经网络的概念
  • 知道语言模型概念

编程:

  • 了解Pytorch基本使用方法,如数据读取、模型构建等

1.2 学习目标

序号 标题 内容
1 了解词向量的背景知识 历史背景 数学基础
2 了解前人的工作 SVD 前馈神经网络 RNN语言模型
3 掌握词向量的评价方法 Cosine/Analagy:相似度/词对类比 论文中数据集
4 掌握模型结构 CBOW Skip-gram
5 Word2vec中的关键技术:提高训练速度 层次softmax 负采样
6 掌握Word2vec代码 关键代码 提高效率细节

img

对比模型:NNLM,RNNLM(LM:Language Model)

2 词向量背景储备知识

2.1 语言模型

直观概念:语言模型是计算一个句子是句子的概率的模型,即给定的一个句子,判断是否符合语义和语法,符合二者的句子概率较大。

示例:

句子 概率 分析
深度之眼的论文课真的很好! 0.8 符合语义和语法
深度之眼的论文课真的很一般! 0.01 不符合语义,因为深度之眼的课较好
论文课的深度之眼很真好的! 0.000001 不符合语法,因此也不符合语义

语言模型的应用有很多,例如在输入法里输入拼音:zi ran yu yan chu li ,它返回对应的中文结果就是一个语言模型。

句子 概率
自然语言处理 0.9
子然预言出力 0.01
紫然玉眼储例 0.0001

2.2 语言模型的发展

本节讲述如何构建语言模型?

2.2.1 基于专家语法规则的语言模型

语言学家企图总结出一套通用的语法规则,比如形容词后面跟名词,动词后面跟副词,符合这些规则是句子。缺点是语言千变万化,很难总结出一套通用的语法规则。而且随着时间的变化会有新词的诞生,很难总结出词性,例如笑skr人!这件事雨女无瓜。

2.2.2 统计语言模型

通过概率计算来刻画语言模型:将句子的概率转变为所有词出现的概率的乘积。

image-20240119152726700

「某个词出现的概率的计算方法:」

image-20240119152742276求解方法:用语料的频率代替概率(频率学派)

image-20240119152755845

统计语言模型是通过一个很大的语料来构建的,这个语料被称为背景语料,通过上图中的公式可以计算出每个词出现的频率,用频率来代替概率。

image-20240119152917376求解方法:频率学派+条件概率

image-20240119152933023

语言模型示例:

image-20240119152944320

  • P(张三 很 帅)=P(张三)*P(很|张三)*P(帅|张三, 很)
  • P(张很帅 很 帅)=P(张很帅)*P(很|张很帅)*P(帅|张很帅, 很):张很帅这个名字很少见,在语料库可能没有出现过,但是这不能代表它不存在,P(张很帅)=0不合理
  • P(张三 很 漂亮)=P(张三)*P(很|张三)*P(漂亮|张三, 很):较长的句子(短语)在语料库中也可能概率较低,比如张三的同学的妹妹的朋友的好朋友很漂亮

「统计语言模型中的平滑操作」

  • 有一些词或者词组在语料库中没有出现过,但是这不能代表它不存在。
  • 平滑操作就是给那些没有出现过的词或者词组也给一个比较小的概率。
  • 拉普拉斯平滑(Laplace Smoothing):也称为加1平滑,每个词在原来出现次数的基础上加1。

示例:

img

image-20240119153059341

V表示语料库中词的个数

缺点:主要解决了词的问题,如果出现较长的词组,需要平滑的词和词组数量大大增加。

示例:假设语料库中只有一句话,张三很漂亮

  • P(张三 很 帅)=P(张三)P(很|张三)P(帅|张三, 很)
  • P(张三 很 桌子)=P(张三)P(很|张三)P(桌子|张三, 很)
  • 平滑之后P(帅|张三, 很)=P(桌子|张三, 很),即两个句子概率是相等的。但是第二个句子是不合理的,一般情况下,第一句话概率应该比第二句话概率要高才对

平滑操作的问题,可能会导致一个有语法错误的句子和一个正确句子的概率是相同的。

问题原因:

  1. 参数空间过大:与模型相关的参数会很多。例如:计算image-20240119153148150参数有V个(每个image-20240119153148150一个参数),V代表词表大小,计算image-20240119153350890参数有image-20240119153411087个,(image-20240119153426241分子有V×V个参数),依次类推,那么模型参数空间为:image-20240119153456853L为句子长度。
  2. 数据稀疏严重:平滑之后较少出现的词的概率较小,当较少的词占比较多时,数据会很稀疏。最终大部分数据值接近于0,只有少部分不为0。类似的,大的计算量会导致一些问题,比如说数据过于稀疏。因为我们想每个词都要考虑前面很多的词,而且把很多词组合在一起的概率其实并没有很高。组合到一起的词越多它的数据是越稀疏的。

解决办法:马尔科夫假设

「马尔科夫假设」:下一个词的出现仅依赖于前面的一个词或几个词

image-20240119153541712

语言模型示例:我 今天 下午 打 羽毛球

image-20240119153604352

2.3 语言模型评价指标

困惑度(Perplexity)

image-20240119153633282

语言模型实质上是一个词表大小的多分类问题,类别是一个词。句子概率越大,语言模型越好,困惑度越小。

img

语言模型只能判断句子是句子的概率,不是完备的监督学习。困惑度越小,对应句子概率越大,则表示词表大小的多分类问题每个类别的概率越大。困惑度越小越好。

2.4 n-gram特征

在文本特征提取中,常常能看到n-gram的身影。它是一种基于语言模型的算法,基本思想是将文本内容按照字节顺序进行大小为N的滑动窗口操作,最终形成长度为N的字节片段序列。看下面的例子:

我来到达观数据参观

  • 相应的bigram特征为:我来 来到 到达 达观 观数 数据 据参 参观
  • 相应的trigram特征为:我来到 来到达 到达观 达观数 观数据 数据参 据参观

注意一点:n-gram中的gram根据粒度不同,有不同的含义。它可以是字粒度,也可以是词粒度的。上面所举的例子属于字粒度的n-gram,词粒度的n-gram看下面例子:

我 来到 达观数据 参观

  • 相应的bigram特征为:我/来到 来到/达观数据 达观数据/参观
  • 相应的trigram特征为:我/来到/达观数据 来到/达观数据/参观

n-gram产生的特征只是作为「文本特征的候选集」,你后面可能会采用信息熵、卡方统计、IDF等文本特征选择方式筛选出比较重要特征。

3 论文简介

3.1 论文背景知识

img

3.1.1 词的表示方式

「1、One-hot Representation 独热表示」

比如将“话筒”表示为:[0, 0, 0, 0, 1, 0, 0,……],将“麦克”表示为[0, 0, 1, 0, 0, 0, 0, ……]等。

  • 优点:表示简单。
  • 存在的问题:词越多,维数越高,维数为词表的大小V,且无法表示词和词之间的关系。

「2、SVD」

这种是基于窗口的共现矩阵(Window based Co-occurrence Matrix)的方法,一个词只跟与它周围特定窗口内的词有关,两个词共同出现一次就加一。例如:

  • 1)I enjoy flying.
  • 2)I like NLP.
  • 3)I like deep learning.

image-20240119154037385

先规定对角线为0,然后构建窗口大小为1的共现矩阵。通过共现的方法,可以体现一定相似的关系,例如 like 和 enjoy 都和 I 相邻,但是这个矩阵大小仍然和词表大小有关,维度很高,而且还是比较稀疏。因此需要降维度:image-20240119154117300

第一种使用词向量的方法,使用SVD分解。SVD分解可以在一定程度上得到词与词之间的相似度,但是矩阵太大,SVD分解效率低,学习得到的词向量可解释性差。

将一个矩阵分解成三部分,image-20240119154159981三者与X矩阵维度均是VVΣ只有对角线元素不为0,相当于X所有特征值,表示X矩阵中向量image-20240119154324024的重要程度。一般情况下,Σ中特征值image-20240119154401139为从大到小排序,这样可以保留前 k个大小特征值。对应的,也只保留U中前k个向量。

image-20240119154443727

优点:可以一定程度上得到词与词之间的相似度。

缺点:矩阵太大,SVD矩阵分解效率低,学习得到的词向量可解释性差。因为舍弃的一些不重要信息无法解释不重要的原因,同理重要的信息也无法解释重要性。

「3、分布式表示/稠密表示,也称为词向量/词嵌入(Word embedding)」 —— 本文提出

它的维度不再是词典的大小,每个维度上的数字不再是0,这些数之间的关系是通过训练得到的,训练得到的词向量可以将意思相近的词离得很近。

img

每个词表示成D维的向量,D<<V。类似于10000个人,10000个位置,将其压缩为300个位置,训练迫使10000中相熟的人在一起节省位置。相当于用300维度的空间容纳10000维度空间的词,迫使相似的词在一起,展现非常好的性质。降维变成二维,通过余弦相似度可以表示两个词之间的关系。

img

参考链接:

美国知乎:https://www.quora.com/Deep-Learning-What-is-meant-by-a-distributed-representation

发展历程

  • 1996年:Hinton 1986年提出Distributed Representation
  • 2003年:Bingio首次使用词向量A Neural Probabilistic Language Model,使用训练语言的方式训练词向量,表现较好
  • 2003-2013年,提出很多训练词向量的方法,但是速度较慢,与SVD较像,无法在大语料上进行训练
  • 2013年:本文改进开源word2vec,训练速度非常快,可以在大语料上进行训练

3.2 本文研究成果

  • 提出新的模型结构word2vec
  • 提出优化训练方法,使得训练速度加快
  • 给出训练代码word2vec,使得单机训练成为可能
  • 成果:训练的词向量,又快又好,并且能够在大规模语料上进行词向量的训练。

3.3 研究意义

研究意义:

  1. 衡量词向量之间的相似程度:余弦相似度和词类比。
  2. 作为预训练模型提升nlp任务

1、衡量词向量之间的相似程度,也是评价方法:余弦相似度和词类比。

1)余弦相似度:

sim(word1,word2)=cos(wordvec1,vordvec2)

主观验证:比如查找青蛙frog的相似词向量,都是青蛙。

1 2 3 4 5 6 7 8
frog frogs toad litoria leptodactylidae rana lizard eleutherodactylus

img

2)词类比analogy:(语义关系)

cos(word1−word2+word3,wordvec4)

验证方法有效性,国家与首都的关系:计算France - Paris + Rome,查看与结果最相近的词向量,如果是Italy,说明该方法是有效的

  • France ⟹ Paris
  • Italy ⟹ Rome

W("woman")-W("man")=W("aunt")-W("uncle")

W("woman")-W("man")=W("queen")-W("king")

img

img

参考链接:

https://nlp.stanford.edu/projects/glove/

http://www.fit.vutbr.cz/~imikolov/rnnlm/word-test.v1.txt

2、作为预训练模型提升nlp下游任务准确度和效果

img

1)外部任务比如命名体识别、文本分类

2)应用到其他nlp任务上,相当于半监督训练

3)双语单词嵌入,Word embedding,类似于中英文词典

img

参考链接:

https://nlp.stanford.edu/~socherr/SocherGanjooManningNg_NIPS2013.pdf

3.4 论文总览

序号 标题 内容
摘要 Abstract 提出2种新的高效计算词向量结构,并使用词相似度任务验证效果
1 Introduction 介绍词向量背景;本文目标;前人工作
2 Model Architectures LSA/LDA;前向神经网络;循环神经网络;并行网络计算
3 New Log-linear Models 「介绍2中新模型结构:CBOW, Skip grams」
4 Results 评价任务描述;最大化正确率;模型结构比较;模型上大量数据的并行计算;微软研究院句子完成比赛
5 Examples of the Learned Relationships 例子:学习到的词与词之间的关系
6 Conclusion 结论:高质量词向量;高效率训练方式;作为预训练词向量作用于其他nlp任务能提升效果
7 Follow-Up Work 后续工作:C++单机代码
8 References 参考文献

本文实际讲2篇论文:

img

4 论文泛读

4.1 摘要

  1. 提出了两种新颖的模型结构用来计算词向量
  2. 采用一种词相似度的任务来评估对比词向量质量
  3. 大量降低模型计算量可以提升词向量质量
  4. 进一步,在我们的语义和句法任务上,我们的词向量是当前最好的效果

4.2 Introduction

  • 传统NLP把词当做最小单元处理,并且能够在大语料库上得到很好的结果,其中一个例子是n-grams模型
  • 然而很多自然语言处理任务只能提供很小的语料,如语音识别、机器翻译,简单地扩大数据规模来提升简单模型的表现在这些任务不再适用,所以我们必须寻找更加先进的模型
  • 分布式表示可以在大语料上训练得到很好的语言模型,并且能够超过n-grams模型,这是一个很好的可以作为改进的技术。

4.3 word2vec词向量评价方法

内部任务评价:训练好什么任务来评价什么任务。如下图为五种语义,九种语法评价。

img

外部任务评价:外部任务比如命名实体识别、文本分类。

img

5 对比模型(论文Model Architectures部分)

在word2vec提出之前,NNLM与RNNLM通过训练语言模型的方法的训练词向量,使用统计的方法。

本节主要对以下三种模型进行对比:

  • Feedforward Neural Net Language Model
  • Recurrent Neural Net Language Model
  • Parallel Training of Neural networks

5.1 前馈神经网络语言模型(NNLM)

5.1.1 Feedforward Neural Net Language Model

前馈神经网络语言模型全称:Feedforward Neural Net Language Model,简称NNLM,也叫深度神经网络,全连接神经网络。

img

参考文献:Bengio A neural probabilistic language model (2003)

在nlp任务中,首先都会构建word2id以及id2word,它们都是字典类型,word2id的key是word,value是id,id2word相反,表示每个词对应一个id。

  • input layer:输入层,输入的是index,index表示词的编号,把所有词放在一起组成一个词典,这样每个词都有一个编号,用编号表示位置。将每个index映射成一个向量,将这些向量进行拼接(concat),如图中输入的是n-1个词,每个词都是100维,因此拼接完成后变成100×(n-1)维;
  • hidden layer:隐藏层,将上一步得到的100×(n-1)维向量输入到全连接层中,使用tanh激活函数;
  • output layer:输出层,上一步得到的结果再接一个全连接层,然后使用softmax。

根据前n-1个单词,预测第n个位置单词的概率,即n-gram模型。将image-20240119155053874输入到网络输入层,映射向量,进行拼接,经过两个全连接层使用softmax预测第 t个词的概率,这样可以得到句子中每个词的概率,从而得到句子的概率。

语言模型的优点在于它是无监督模型,不需要任何标注语料,爬取网站上相关句子即可。通过前n-1个单词预测第n个单词,使用无监督的方式进行监督学习。

构建模型,首先在一个句子之前pad(填充)用来预测第一个词,生成语料,前n-1个词作为特征,下一个词作为标签,依次类推,可以构造除前馈神经网络的训练所需数据集。然后通过梯度下降优化模型,使得输出的正确的单词概率最大化。

img

输入层:将词(index)映射成向量,相当于个1×V的one-hot向量乘以V×D的向量得到一个1×D的向量,其中V×D的向量每一行表示一个词向量。

image-20240119155156008

其中d为偏置,U是参数,dU相当于 bW参数。

输出层:一个全连接层,后面接个 softmax 函数来生成概率分布。

image-20240119155242235

其中 y 是一个1×V的向量:

image-20240119155340009

5.1.2 语言模型困惑度和Loss的关系

如何求困惑度?

需要将每个句子中每个词的概率给预测出来,然后将他们相乘吗?这样做也是可以的,但在实际中有更加方便巧妙的方法。

先写出Loss,使得预测出得到的每个正确单词得到的概率越大越好,使用了交叉熵损失函数,这个Loss是一句话的Loss:

image-20240119155403000

其中,T 表示句子中词的个数。困惑度是句子的概率开负T分之一。

这样在得出loss的情况下,可以很方便的求出困惑度是多少,看看困惑度的情况。现在都是批次进行训练和预测的,每计算batchsize大小的个数进行一次loss的计算。

NLP中,每个句子长度不一致,为了每个batchsize中的句子长度相同,需要补pad,对pad位置求loss是与其他词一起计算,得到的loss求指数得到的不是真实的困惑度,可能偏小,所以需要将pad抵消掉。

5.1.3 回顾网络模型

img

  • 仅对一部分输出进行梯度传播:比如单词the、a、and等他们所包含的信息比较少,但是在语料中又频繁出现,因此这些词能不能或者少进行不进行梯度传播。
  • 引入先验知识,如词性等:比如形容词后接名词概率较大,加动词概率较小。加词性之前,先考虑这个模型本身是否会学到词性信息,如果模型本身就可以学习到词性信息,那么就不需要再加了。之后查看网络学习到的词性是否够多,可以先加上词性信息看看效果是否更好。
  • 解决一词多义问题:一个词就一个向量,那么一个向量怎么能表示多个意思呢?比如机器翻译中,可以通过上下文信息,详细可见elmo论文。
  • 加速softmax层:softmax层的神经元个数是字典V的个数,因为每个词都要输出一下概率,这样就很慢。

5.2 循环神经网络语言模型(RNNLM)

全称:Recurrent Neural Net Language Model

img

s(t-1)是上一个时间步的输出,w(t)是当前词向量(也是通过one-hot方式转换的)的输入。

输入层:和NNLM一样,需要将当前时间步的转化为词向量。

隐藏层:对输入和上一个时间步的隐藏输出进行全连接层操作。

image-20240119155749917

img

每个时间步预测一个词 ,在预测第n个词时使用了前n - 1个词的信息,没有使用马尔科夫假设了,基于统计的思想。<S>表示开始,第一个词。

image-20240119155904109

5.3 word2vec模型

Log Linear Models定义:将语言模型的建立看成一个多分类问题,相当于线性分类器加上softmax。因为只有softmax求指数部分是非线性,但是加上log就变成了线性,所以称为log线性模型。逻辑斯蒂回归模型就是Log Linear Models。

Y=softmax(wx+b)

本节讲述的skip-gram与CBOW也是Log Linear Models。

5.3.1 word2vec原理

跳字模型:

  • 语言模型基本思想:句子中下一个词的出现和前面的词是有关系的,所以可以使用前面的词预测下一个词。马尔可夫假设,比如NNLM,以及统计思想,前面所有词预测下一个,如RNNLM。
  • Word2vec基本思想:句子中相近的词之间是有联系的,比如今天后面经常出现上午、下午和晚上。所以Word2vec的基本思想就是用词来预测词skip-gram使用中心词预测周围词,cbow使用周围词预测中心词。word2vec的基本思想上就对语言模型进行了简化。

5.3.2 Skip-gram

计算过程:

img

skip-gram使用中心词预测周围词,什么范围内是中心词和周围词?这里选择“下午”作为中心词,窗口为2,因此image-20240119160034290表示用“下午”预测“我”,image-20240119160045754表示用“下午”预测“今天”,image-20240119160058974表示用“下午”预测“打”,image-20240119160112201表示用“下午”预测“羽毛球”。根据窗口的训练大小,这里产生四个训练样本。

如何求上图中的概率?其实语言模型中概率问题都是一个多分类问题,输入就是image-20240119160124087,而标签就是image-20240119160136697相当于一个词表大小的多分类问题,怎么求概率以及学习词向量?

image-20240119160151749:用中心词image-20240119160124087预测周围词image-20240119160136697

img

输入是index,代表这个词在词表中的位置,映射成1×V的one-hot向量;W是中心词的词向量矩阵,维度为V×D,每一行表示一个词的词向量;将one-hot向量与中心词的词向量矩阵相乘得到一个词的向量;得到1×D的词向量与周围词的词向量矩阵和*W**进行相乘,得到1×V的向量,这个向量在经过softmax之后,得到每个词的概率,然后使得正确词的位置上的概率越大越好。

图中W*W***就是想训练得到的词向量,一般用W就可以,或者用image-20240119160423251。1×D的词向量代表的是中心词image-20240119160513922的词向量,W****是周围词的词向量矩阵,它们相乘后再做softmax,把image-20240119160545252这个位置的单词取出来。

image-20240119160556932

分母:中心词向量与所有周围词向量做内积,求和。 分子:image-20240119160545252的周围词向量的转置与中心词向量内积。

损失函数:

img

简单直观不准确解释:在词表中将中心词ants所有周围词取出,放在一个袋子里,在袋子里用手随意抓一个,这个词是car的概率。类似于共现矩阵的次数。如果要是car与ant都与同一个词有关系,二者可能存在一定的依赖关系,准确度可能会较高,所以这种解释并不准确。

求最小值:

5.3.3 CBOW

全称:Continuous Bag-of-Words Model,词袋模型,忽略了词的顺序。

img

cbow使用周围词预测中心词,NNLM中将输入所有此concat连接在一起,输入较大,求和或者求平均输入与单个词向量维度相同,输入越小,模型复杂度越低。这里采用的求和。

对于中心词来说这里只有一个训练的样本。

image-20240119160720863

img

输入image-20240119160739802的index,转换为1×V大小的one-hot向量。

输入是index,代表这个词在词表中的位置,映射成1×V的one-hot向量;与Skip-gram相反,这里W是周围词的词向量矩阵,维度为V×D,每一行表示一个周围词的词向量;将二者相乘得到每个周围词的词向量;在经过平均或者求和方式得到1×D的向量与与中心词的词向量矩阵和*W**进行相乘,得到1×V的向量,这个向量在经过softmax之后,得到每个词的概率,然后使得正确词的位置上的概率越大越好。

image-20240119160757265

6 关键技术

6.1 复杂度讨论

如何降低复杂度?

Softmax 对于要输出V个概率:

image-20240119160831781

U是周围词的矩阵,V是中心词的矩阵,第三个矩阵相乘相当于是一个没有激活函数也没有偏置的全连接层,全连接层额神经元个数是词表大小,因为softmax层要输出V个概率,V是特别大的,因此这个全连接层也是特别大的,那么如何降低复杂度呢?能不能将softmax的复杂度降低呢?论文中也提到了两种方法,层次softmax和负采样。

6.2 Hierarchical Softmax

将softmax转变为多个sigmoid,可以写成一个二叉树的形式。softmax需要做V次指数操作,sigmoid只需要一次指数运算即可。只要转换为少于V次指数操作的sigmoid操作,就相当于进行了加速运算。

img

log2⁡V层,只需计算 log2⁡V 个 sigmoid运算。

6.2.1 Skip-gram目标函数

满二叉树: 为什么层次softmax只需计算 log2⁡V个sigmoid?

image-20240119161152878

只需要3次就能找到。

img

假设词表大小是8,softmax需要做8次指数操作,如果计算sigmoid,通过8个节点的满二叉树,判断为a,需要进行3次二分类,判断为b,也需要进行3次二分类,因此,分类次数=树的深度-1。

构建Huffman树:带权重路径最短二叉树

img

5表示预测这个词需要做5次sigmoid,7表示预测这个词需要做7次sigmoid,边的个数表示权重,哈夫曼树将频率高的放在树的上层,少于log2⁡V次。

层次softmax构建:

img

每个分支节点都是一个向量,例如在skip-gram中用中心词向量与image-20240119161236656相乘,之后进行sigmoid,如果小于零,表示往左进行查找,如果大于零,表示向右进行查找,再与image-20240119161312060相乘,同理如果小于零,表示往左进行查找,如果大于零,表示向右进行查找,再与image-20240119161325814相乘。之前的词向量为V个,这里的词向量个数少于V个。求I的概率:

image-20240119161427479

image-20240119161457670

在树的n层的节点需要做n-1层sigmoid次运算。

6.2.2 CBOW Hierarchical Softmax

层次softmax分类

img

image-20240119161531929

之前的skip-gram与CBOW都是最终词向量可以是中心词向量与周围词向量的相加或者平均,但是在层次softmax中只有一组词向量,因为image-20240119161600334个数少于V个,其具体含义并不明确,比如image-20240119161236656可能表示一簇词类别的意义。

6.3 Negative Sample(应用较多)

在效果与效率上,负采样(Negative Sample)均好于层次softmax。

舍弃多分类,提升速度,将多分类变为二分类。二分类需要正样本与负样本,一个中心词与周围词在一起是正样本,例如图中的jump over,在skip-gram里,中心词+词表任意一词作为负样本,例如图中的jumps again,负样本可能正好选择了中心词与其周围词,但词表非常大,可能性非常小,可忽略不计。

img

基本思想:增大正样本概率,减小负样本概率。

对于每个词,一次要输出1个正样本的概率,注意不能只选择一个负样本,否则会有偏差,因为正样本是真实的,负样本是采样出来的,一般选择3-10个之间负样本。假如选择K个负样本,则输出K个负样本概率,总共K+1个概率,$K<并且效果比多分类要好。这里还是需要每个词的上下文词向量,矩阵维度为(V,D),总的参数比HS(层次softmax)多(每次计算量不多,层次softmax需要log2⁡V个概率,这里仅需要K+1个)。

损失函数:

image-20240119161754650

6.3.1 如何采样?

image-20240119161817844

减少频率大的词的抽样概率,增加频率小的词的抽样概率。因为一些不重要的词出现的概率较大,比如the,a等,重要的词出现的概率较大。可以加速训练,得到更好的效果。

6.3.2 CBOW Negative Sampling

同理,二分类需要正样本与负样本,所有周围词的词向量的平均与真正的中心词在一起是正样本,所有周围词的词向量的平均与随机采样的词组合在一起是负样本。

img

损失函数与上述相同:

image-20240119161844487

6.4 高频词重采样(Subsampling of Frequent Words)

自然语言处理共识:文档或者数据集中出现频率高的词往往携带信息较少,比如the,is,a,and,而出现频率低的词往往携带信息多

什么青蛙

  • 什么是深度学习,什么是CNN,什么是RNN,这篇告诉你。
  • 青蛙(Frog)属于脊索动物门、两栖纲、无尾目、蛙科的两栖类动物,成体无尾,卵产于水中。

重采样的原因:

  • 想更多地训练重要的词对,比如训练“France”和“Paris”之间的关系比训练“France”和“the”之间的关系要有用。
  • 高频词很快就训练好了,而低频次需要更多的轮次。

重采样方法:

image-20240119161901533

优点:加速训练,能够得到更好的词向量。

7 模型复杂度

7.1 模型复杂度的概念

模型的复杂度也就是时间上的复杂度:

image-20240119161922985

论文中求 Q 的方法比较特殊,使用参数的数目来计算时间复杂度。

7.2 基于前馈网络的语言模型的时间复杂度

NNLM通过前面N个词,预测第N+1个词:

image-20240119162011736

模型复杂度:

image-20240119162033602

Bengio A neural probabilistic language mode/(2003)

7.3 基于循环神经网络的语言模型的时间复杂度

image-20240119162126724

7.4 Skip-gram复杂度

7.4.1 Hierarchical Softmax 复杂度

image-20240119162149248

7.4.2 Negative Sampling 复杂度

image-20240119162204333

对于每一个中心词来说,有一个正样本和K个负样本,每个都会变成一个D维的词向量,便得到上图中第二个公式。

7.5 CBOW 复杂度

image-20240119162223052

与skip-gram相同,CBOW对应于层次softmax和负采样的复杂度为:

image-20240119162239700

注意:上述是每一次计算所需的参数。

7.6 模型复杂度对比

img

从理论分析:层次softmax与负采样速度均快于前馈神经网络与循环神经网络,CBOW速度快于Skip-Gram,负采样速度快于层次softmax。

8 实验结果分析

img

8.1 任务描述

任务是一个词对推理的任务,下图中前五个是语义类,后九个是语法类。

img

语法类数据易收集,语义类数据难收集。

关系类型 翻译
capital-common-countries 常见国家首都
capital-world 各国首都
currency 货币
city-in-state 州-城市
family 家庭关系
gram1-adjective-to-adverb 形容词-副词
gram2-opposite 反义词
gram3-comparative 比较级
gram4-superlative 最高级
gram5-present-participle 现在进行式
gram6-nationality-adjective 国家的形容词
gram7-past-tense 过去式
gram8-plural 复数
gram9-plural-verb 第三人称单数

Word2vec程序中 questions-words.txt:

// Copyright 2013 Google Inc. All Rights Reserved.
: capital-common-countries
Athens Greece Baghdad Iraq
Athens Greece Bangkok Thailand
Athens Greece Beijing China
Athens Greece Berlin Germany
Athens Greece Bern Switzerland
Athens Greece Cairo Egypt
Athens Greece Canberra Australia
Athens Greece Hanoi Vietnam
Athens Greece Havana Cuba
Athens Greece Helsinki Finland
...

8.2 最大化正确率(优化参数)

用小数据集调参,选择最好的参数,参数包括维度、训练的数据量,是2个需要寻找的参数。

image-20240119162319105

8.3 模型比较

image-20240119162335370

MSR Word Relatedness测试集大部分都是语法数据。RNNLM和NNLM都在语义上(Syntactic Accuracy)表现的比较好,在语法上(Semantic Accuracy)表现的比较差,CBOW也是,而skip-gram在语法和语义上都表现的比较好。

RNNLM单机用了8周,NNLM计算量更大。

RNN相对在语法问题上较好,NNLM效果更好,CBOW更好。

Skip-gram更平衡,在语义问题上效果好。

LDC corpora 320M words,82K

和其他人开源的词向量比较:

image-20240119162408645

Our NNLM使用了层次softmax进行了加速。

image-20240119162424461

3 epoch CBOW(36.1) < 1 epoch skip-gram(49.2) 3 epoch 300dim < 1 epoch 600d

8.4 大规模并行模型训练

Large Scale Parallel Training of Model

image-20240119162438081

8.5 微软研究院句子完成比赛

image-20240119162448702

类似完形填空,一句话盖住一个词,给出5个预测结果。

skip-gram只统计了周围词,没有用到词与词之间的关系,所以可以联合语言模型RNNLM进行训练。

8.6 HS和NEG比较

image-20240119162518483

NCE:其他负采样方法。

下方表格为使用了重采样,可以发现速度大大提升了。

例子:学习到的关系

img

img

使用十个关系词对做平均可以将偏差抵消掉。

out-of-the-list words:不符合当前分类的词。

9 讨论和总结

讨论论文中存在的问题,总结本阶段所学内容。

9.1 讨论

超参数选择:请问,利用gensim做word2vec的时候,词向量的维度和单词数目有没有一个比较好的对照范围呢?

dim一般在100-500之间选择,初始值词典大小V的1/4次方,例如V=10K,dim=100。min_count一般在2-10之间选择,min_count表示词在语料中出现的最小次数,小于该次数的词进行舍弃,决定了词表大小。

gridsearch

img

9.2 总结

论文主要创新点: 1、提出一种新的结构:这个结构是使用词预测词,而不是用前面的一系列词来预测词,简化了结构。也提出了层次softmax和负采样,大大减少了计算量,从而可以使用更高的维度,更大的数据集。 2、利用分布式训练框架:在大数据上训练,从而达到更好的效果。 3、提出了新的词相似度任务:Analogy词类别。

关键点:

  1. 更简单的预测模型 —— word2vec
  2. 更快的分类方案 —— HS和NEG

创新点:

  1. 使用词对的预测来替换语言模型的预测
  2. 使用HS和NEG降低分类复杂度
  3. 使用subsampling加速训练
  4. 新的词对推理数据集来客观评估词向量的质量

启发点:

1、大数据集上的简单模型往往强于小数据集上的复杂模型 simple models trained on huge amounts of data outperform complex systems trained on less data.(1 Introduction p1)

2、King的词向量减去Man的词向量加上Woman的词向量和Queen的词向量最接近 vector(”King”) - vector(”Man”) + vector(”Woman”) results in a vector that is closest to the vector representation of the word Queen (1.1 Goals of the Paper p3) 说明了word2vec可以很好的学习词对之间的代数关系,在神经网络中都是数与数之间的计算,如果可以学习到词向量之间的代数关系,则词向量也非常使用于神经网络。

3、我们决定设计简单的模型来训练词向量,虽然简单的模型无法像神经网络那么准确地表示数据,但是可以在更多地数据上更快地训练 we decided to explore simpler models that might not be able to represent the data as precisely as neural networks, but can possibly be trained on much more data efficiently (3 New Log-linear Models p1)

4、我们相信在更大的数据集上使用更大的词向量维度能够训练得到更好的词向量。 We believe that word vectors trained on even larger data sets with larger dimensionality will perform significantly better(5 Examples of the Learned Relationshops p1)

发表回复

您的电子邮箱地址不会被公开。