Word2Vec

本文深入解析Word2Vec的工作原理,对比one-hot编码,介绍词嵌入(word embedding)的优势,并详述Word2Vec的两种模型:skip-gram与CBOW。此外,还探讨了网络结构及训练优化方法,包括负采样和层级softmax。

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

目录

one-hot

why word embedding?

word2vec

网络结构

skip-gram和CBOW

训练优化方法

参考


word2vector,顾名思义,就是将语料库中的词转化成向量,以便后续在词向量的基础上进行各种计算。why?机器学习任务需要把任何输入量化成数值表示,然后通过充分利用计算机的计算能力,计算得出最终想要的结果。在word2vec出现之前,自然语言处理经常把字词转为离散的单独的符号,也就是One-Hot Encoder。


one-hot

一种最简单的词向量方式是 one-hot representation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个 1,其他全为 0, 1 的位置对应该词在词典中的位置。例如:

“杯子”表示为 [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...]
“水杯”表示为 [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...]

缺点:

  1. 高维稀疏矩阵,容易受维数灾难的困扰,尤其是将其用于 Deep Learning 的一些算法时;
  2. 不能很好地刻画词与词之间的相似性。即:任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系,比如上面的例子中的“杯子”和“水杯”。这种现象叫做“词语鸿沟”。

why word embedding?

首先使用one-hot的时候,可能会导致维度爆炸,其次,使用one-hot的时候,所有的词之间的距离相同,而实际上,相似的词更有可能出现在相同的上下文中。如使用one-hot表示时,人和猫、狗之间的距离相等,这个在实际上是不符合要求的,那么word embedding可以解释上面的问题,那么什么是word embedding呢?其中可以理解的就是采用更加紧凑的方式来避免维度爆炸,如下面一张图:

经过这样的表示后,我们的dog就可以表示为dog=[w1,w2,w3…]

word embedding的优点:

​ (1)相对于one-hot,能够产生稠密的向量,避免维度爆炸;

​ (2)词之间的距离可以表示出来(词之间的相似度)

​ (3)可以作为词的特征去帮助解决其他的问题,如文本分类,命名实体识别、语义分析等。

word embedding的缺点:向量的可解释性不强,没有one-hot那样明确的表示意义。


word2vec

word2vec不是一个算法,它仅仅是一个工具包,将词转换为稠密的向量word2vec模型其实就是简单化的神经网络。

word2vec 包含两个模型:跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW);
两种高效训练的方法:负采样(negative sampling)和层序softmax(hierarchical softmax)。

网络结构

输入层
假设所有训练数据所构成的词典大小为V 。现在输入数据为“今年夏天超级热”,分词后将每个词表示为V 维的one hot向量,设某个词的输入向量/one hot向量表示为 x{1*v} 。现假设根据上下文*“今年,超级,热”来预测中心词“夏天”*。然后网络初始化权重,该权重为一个矩阵表示为W{v*n} ,其中N为词向量的维度。该权重矩阵也称为投影矩阵,投影到词空间的矩阵。(多次迭代后的结果也就是我们要的词向量矩阵)。

隐藏层
分别将输入层的4个词的向量*投影矩阵,即 x{1*v} *W{v*n},将这4个结果相加后求平均,即得到隐藏层的结果h{1*n} 。
然后将h{1*n}乘以另一个投影矩阵W'{n*v} ,将结果传播到输出层。

输出层
使用激活函数softmax,输出结果one hot 向量O{1*v}。将该one hot 向量与true label“夏天”的向量做比较,然后进行误差反向传播,不断迭代优化权重矩阵,最终即得到我们要的词向量矩阵(每行为一个词所对应的词向量,维度为N,V个词就有V行)。

输出层的神经元个数V,参数矩阵尺寸为[n,V]。词向量经过矩阵计算后再加上softmax归一化,重新变为V维的向量,每一维对应词库中的一个词与输入的词共同出现在上下文中的概率。

注意:这里有两个矩阵W{v*n}W'{n*v} ,一般使用前者作为我们的词向量矩阵,也可以使用后者,或两者相加求平均。

skip-gram和CBOW

  • skip-gram: 核心思想是根据中心词来预测周围的词。假设中心词是cat,窗口长度为2,则根据cat预测左边两个词和右边两个词。这时,cat作为神经网络的input,预测的词作为label。下图为一个例子:

 在这里窗口长度为2,中心词一个一个移动,遍历所有文本。每一次中心词的移动,最多会产生4对训练样本(input,label)。

  • CBOW(continuous-bag-of-words):如果理解了skip-gram,那CBOW模型其实就是倒过来,用周围的所有词来预测中心词。这时候,每一次中心词的移动,只能产生一个训练样本。如果还是用上面的例子,则CBOW模型会产生下列4个训练样本:

    这时候,input很可能是4个词,label只是一个词,怎么办呢?其实很简单,只要求平均就行了。经过隐藏层后,输入的4个词被映射成了4个300维的向量,对这4个向量求平均,然后就可以作为下一层的输入了。

  1. ([quick, brown], the)
  2. ([the, brown, fox], quick)
  3. ([the, quick, fox, jumps], brown)
  4. ([quick, brown, jumps, over], fox)

两个模型相比,skip-gram模型能产生更多训练样本,抓住更多词与词之间语义上的细节,在语料足够多足够好的理想条件下,skip-gram模型是优于CBOW模型的。在语料较少的情况下,难以抓住足够多词与词之间的细节,CBOW模型求平均的特性,反而效果可能更好。

CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。CBOW模型:Continuous Bag-of-Words Model,连续词袋模型,如下左图;Skip-gram模型:Continuous Skip-gram Model,跳字模型,如下右图。

在这里插入图片描述

  • CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。

我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

这样我们这个CBOW的例子里,我们的输入是8个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过深度神经网络(DNN)的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。

  • Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。还是上面的例子,我们的上下文大小取值为4, 特定的这个词"Learning"是我们的输入,而这8个上下文词是我们的输出。

Skip Gram 

这样我们这个Skip-Gram的例子里,我们的输入是特定词, 输出是softmax概率排前8的8个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的8个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前8的softmax概率对应的神经元所对应的词即可。

训练优化方法

注意到,实际中词汇表一般很大,那么Word2Vec模型是一个超级大的神经网络(权重矩阵规模非常大)。
两种方法优化训练过程:负采样(negative sampling)和层序softmax(hierarchical softmax)

(1)负采样
负采样核心思想:不考虑出现概率低的词,保证频次越高的样本越容易被采样出来
(softmax分出来的类别数目是整个词汇表的大小,那么是否可以减小?)详见word2vec的负采样

(2)hierarchical softmax
hierarchical softmax的核心内容是将词汇表中的每个词使用哈夫曼树(Huffman Tree)进行编码,出现概率越高的符号使用较短的编码(层次越浅),出现概率低的符号则使用较长的编码(层次越深)。这样做,可以使得最终是在做一层层的二分类。详见基于hierarchical softmax的word2vec

参考

Word2vec原理浅析及tensorflow实现

word2vec原理&代码 详细全面总结

Word2Vec原理解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值