怎么发展到了Word2vec?

本文介绍了词向量的重要性和word2vec模型,该模型解决了传统one-hot编码的维度灾难问题,提出了词的连续表示。神经网络语言模型NNLM是词向量的起源,通过训练捕捉词与词之间的上下文关系。在NNLM中,词被转化为固定长度的向量,模型通过前几个词预测下一个词,训练得到的词向量矩阵C包含了丰富的语义信息。softmax函数用于模型输出层,确保概率分布的合理性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 统计语言模型:

2.NNLM神经网络语言模型:

2.1流程:

2.2训练过程:

3.softmax介绍:

摘要:

托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造了一套Word Embedding训练的方法,称之为word2vec。最早提出word2vec的论文是“Efficient estimation of word representations in vector space”。word2vec就是word to vector的缩写,中文意思就是将词转化为向量。

词向量表示与之前的离散式表示不同,离散式表示以one-hot模型为代表,认为词与词之间是独立的,表示该词的向量只有一个维度是一,其余是0。虽然表示简单,但是其面临着数据稀疏性和维度灾难的问题。而词向量认为在一个数据集中单词与单词之间是有相互联系的,即存在相似关系,存在“距离”的概念,则表示该词的向量空间就不仅仅是只代表该词那么简单,还包括这个词潜在的一些属性,让词与词之间有更多的相似性。

以很流行的N-gram为代表的简单模型,能够使用今天所有的数据集(这个数据集可能有万亿的规模)进行训练,而且在数据集足够大的前提下简单模型的效果会比在规模较小的数据集上训练的复杂模型表现得要好。但是也正是因为模型自身的简单,给他带来了限制——当数据集较少的时候,如果我们不发展新的技术的话,即使我们对简单模型再进行扩展组合,也不会有很显著的进步。随着神经网络的发展,慢慢地可以实现在更大的数据集上训练更复杂的模型。其中提出最成功的概念就是词向量,并且已经有研究证明基于神经网络的语言模型明显优于N-gram模型。

  1. 统计语言模型:

我们可以使用简单的统计模型来分析一个句子。其实方法很简单,一个句子是否合理,我们不需要分析它的语法和语义,只需要分析这句话出现的概率。例如P(w1,w2,„,wt)。w1 到 wT 依次表示这句话中的各个词。

有个很简单的推论是:

 

其中,P(w1)表示第一个词出现的概率;P(w2|w1)是在已知第一个词的前提下,第二个词出现的概率;以此类推,词wn的出现概率取决于它前面所有的词。

20世纪初,俄国数学家马尔可夫(Andrey Markov)提出每当遇到类似这种情况时,就假设任意一个词出现的概率只与它前面的词相关,这样问题就变得简单了。这种假设在数学上称为马尔可夫假设,于是式(14.1)就可以简化为:

 

式(14.2)对应的统计语言模型是二元模型(Bigram Model)。一个词出现的概率只与它前面一个词相关叫二元模型,一个词出现的概率与其前面两个词相关叫三元模型,一个词的出现概率与其前面三个词相关叫四元模型。以此类推,一个词出现的概率由前面N-1个词决定,称为N元模型。

可以想象N元模型中N的值越大就越接近句子真实的概率,当然计算量也会越大。当N从1到2,再从2到3,模型的效果上升显著,而当模型从3到4时,效果的提升就不是很明显了。所以一般三元或四元模型用得比较多,很少人会使用四元以上的模型。

2.NNLM神经网络语言模型:

词向量的思想从NNLM中提出,并一直沿用至今,是深度学习在NLP领域中使用的既是基础又是核心的思想。通常词向量的长度都是人为设置的,如我们设置词向量的长度为128,也就是说每个词都会使用一个128维的向量来表示,这个向量的每一个维度都具有抽象的含义(具体的含义我们是无法知道的)。

 

2.1流程:

我们会分析语料库并构建一个字典V,所有的词都在这个字典中,并且每个词在该字典中有唯一的编号。每次训练时,NNLM从语料库中选取一段长度为n的文本(wt-N+1,…,wt-2,wt-1,wt)如t=10,n=5,那么文本就是(w6,w7,w8,w9,w10),n可以人为设置。接下来我们把长度为n的文本序列用它们所对应的编号来替代,如(w6,w7,w8,w9,w10)就变成了类似(26,42,267,6582,64)这样的编号。然后再将编号变为独热编码格式。假设字典V中一共有10000个词,文本序列的长度为5,经过独热编码处理后的文本数据就变成了5行10000列的矩阵,类似下面这样:

[[0,…,0,…,1,…,0,…,0,…,0,…,0,…,0,…0,…,0,…0,…0]

[0,…,0,…,0,…,1,…,0,…,0,…,0,…,0,…0,…,0,…0,…0]

[0,…,0,…,0,…,0,…,0,…,1,…,0,…,0,…0,…,0,…0,…0]

[0,…,0,…,0,…,0,…,0,…,0,…,0,…,0,…0,…,0,…1,…0]

[0,…,0,…,0,…,0,…,1,…,0,…,0,…,0,…0,…,0,…0,…0]]

最后把最后一个词的独热编码作为模型预测的标签值,其他词的独热编码作为输入传给模型。图14.8中权值矩阵C所在的层称为词特征层,可以理解其为所有词的词向量矩阵(矩阵C在训练开始的时候都是随机值,没有任何意义,经过模型训练以后才能得到有意义的词向量)。例如,词向量的长度为128,那么矩阵C可能就是一个10000行128列的权值矩阵,矩阵中的一行表示一个词的词向量。

每个词的独热编码与矩阵C相乘,得到该词对应的词向量的值,如图14.9所示。

 

图14.8中的C(wt-n+1)表示wt-n+1的词向量,C(wt-2)表示wt-2的词向量,C(wt-1)表示wt-1的词向量。得到输入的每个词的词向量以后,对这些词向量进行拼(Concatenation),如对4个长度为128维的词向量进行拼接,得到512维的数据。式(14.3)表示多个词向量进行拼接得到x:

 

模型最终的输出值y的计算公式为:

对照图14.8来看,x为多个词向量拼接后的信号,H为x到隐藏层之间的权值矩阵,d为隐藏层的偏置值,Tanh为隐藏层的激活函数,U为隐藏层到输出层之间的权值矩阵。b+Wx为图14.8中的虚线(表示可有可无)部分,b是偏置值,W是权值矩阵,如果设置了b不为0且W不为零矩阵,则计算b+Wx相当于x可以传给输出层。如果设置b为0且W为零矩阵,相当于不把x直接传给输出层。模型输出神经元的数量等于字典中的词汇数量,最后通过softmax函数得到每个词的预测概率值。

2.2训练过程:

[1]每次从语料库中滑动5个数据,将其中前四个词转为one-hot编码形式,将四个one-hot形式作为输入喂入网络。

[2]从输入到映射层所做的事情是(one-hot向量*矩阵C),这里词的one-hot编码会根据为1的位置去对应C矩阵,去抽出对应位置的128维的词向量,将此向量作为投影层的输出。

[3]上一步投射层会将词的one-hot表示表示成128维的稠密向量,从投影层到隐层是一种全连接的连接方式,线的数量是4*128个,每个隐层神经元有4条线相连接,最后使用tanh函数结合H与d获取激活输出。

[4]从隐层到输出层也是一直全连接的形式,连接线数量为128*10000,使用softmax函数结合U与b获取最后的概率输出。

[5]计算交叉熵损失函数值,以梯度下降方式进行反向传播,在反向传播过程中对参数矩阵C、H、d、U、b进行更新。

*通过不断的喂入批次数据,对网络进行反向传播调参,最后训练出一个进行词预测任务的模型,并将训练好模型中的C矩阵里的每一列都作为,对应于one-hot编码中位置为1词的词向量(大小为1*128),这个词向量就是我们要转化的结果。

NNLM就是在训练一个传入前面几个词,然后预测下一个词的模型。这个模型训练好之后,就得到了我们想要的词向量,其就保存在前面提到的权值矩阵C中。权值矩阵C中的每一行就对应了一个词的词向量,列数表示词向量的长度,可以人为设置。

NNLM能够对句子中更长的依赖关系进行建模,并且得到了每个词的数值表示,然后可以使用词向量来计算词与词之间的相似性,这些都是传统统计模型无法做到的。将词表征为一个向量形式,这个思想直接启发了后来的word2vec的工作。

3.softmax介绍:

在多分类问题中,我们通常会使用softmax函数作为网络输出层的激活函数。softmax函数可以对输出值进行归一化操作,把所有的输出值都转换为概率,所有概率值加起来等于1。softmax函数的公式为:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值