文章目录
- 前言
- Word2Vec的工作原理
- CBOW
- Skip-Gram
- 参考文献
- 点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
前言
随着计算机应用领域的不断扩大,自然语言处理受到了人们的高度重视。尤其是最近出现的chatgpt,作为一个大型的语言模型,它能够回答各种各样的问题,并且可以提供有用的信息和帮助。在chatgpt身上,我们看到了人工智能对人类未来产生的巨大影响。我们很有必要去深入了解计算机关于自然语言的处理。
为了使计算机能够处理自然语言,首先需要对自然语言进行建模。自然语言建模方法经历了从基于规则的方法到基于统计方法的转变。从基于统计的建模方法得到的自然语言模型称为统计语言模型。有许多统计语言建模技术,包括n-gram、神经网络以及log_linear模型等。在对自然语言进行建模的过程中,会出现维数灾难、词语相似性,模型泛化能力以及模型性能等问题。
短文本自动分类首先需要将文本转化为计算机能理解处理的形式,即文本数据的表示,其对文本分类至关重要,可直接影响分类效果。Word2Vec是google在2013年推出的一个NLP工具,它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的去度量他们之间的关系,挖掘词之间的联系。不过,在更早之前采用one-hot编码,又称为一位有效编码,每个词向量维度大小为整个词汇表的大小,对于每个具体的词汇表中的词,将对应的位置置为1。
使用one-hot编码(010000)代表two,有多少个词汇向量就有多少维度;而且只有所表示的这个词对应的位置为1,其他位置全是0。
采用One-Hot编码方式来表示词向量非常简单,但缺点也是显而易见的,一方面我们实际使用的词汇表很大,经常是百万级以上,这么高维的数据处理起来会消耗大量的计算资源与时间。另一方面,One-Hot编码中所有词向量之间彼此正交,没有体现词与词之间的相似关系。
词向量是具有良好的语义特性,在表示词语特性方面非常有效。词向量每一个维度的值都体现了对应词语在语义和语法上的特性。所以,可以将词向量的每一维称为一个词语特征。词向量具有多种形式,Distributed representation是其中一种。
Distributed representation可以解决One-Hot编码存在的问题,将原来One-Hot编码的每个词都映射到一个较短的词向量上来,而这个较短的词向量的维度可以由我们自己在训练时根据任务需要来自己指定。
例如,在我们的词汇库中我们拥有 (中国,俄罗斯,美国,乌克兰) 这四个词,然后我们再选用 (亚洲国家,友好关系) 这两个维度来描述词汇库里面的词。“中国”这个词对应的词向量可能是(0.9,0.9);“俄罗斯”这个词对应的词向量可能是(0.75,0.8)。但是在实际情况中,我们并不能做到对每一个词向量维度做很好且完整的解释。
Word2Vec的工作原理
Word2Vec模型包含了CBOW和 Skip-gram两种训练模型。CBOW适合于数据集较小的情况,而Skip-Gram在大型语料中表现更好。CBOW和Skip_gram模型均包含输人层投影层和输出层。其中,CBOW模型通过上下文来预测当前词;Skip_gram模型则通过当前词来预测其上下文。如下图所示:
另外,Word2vec提供了两套优化方法来提高词向量的训练效率,分别是 HierachySoftmax和Negativ Sampling。
Word2Vec的训练模型本质上是只具有一个隐含层的神经元网络:
它的输入是采用One-Hot编码的词汇表向量,它的输出也是One-Hot编码的词汇表向量。使用所有的样本,训练这个神经元网络,等到收敛之后,从输入层到隐含层的那些权重,便是每一个词的采用Distributed Representation的词向量。下面进行对word2vec两个模型运行原理的详细讲解。
CBOW
前提假设:词汇库中含有V个单词,C代表上下文单词个数。例如"This is a good test.",当C=4时,模型输入(this,is,good,test)的one-hot编码向量
1,输入层:输入C个维度为V的词向量(one-hot词向量)
2,初始化一个V x N大小的权重矩阵,然后用所有输入的one-hot词向量左乘矩阵,由线性代数中向量与矩阵的乘法得知,会得到 C 个1 x N的向量。
3,将所有得到的C个向量进行相加求平均,合成一个N维向量作为隐藏层向量h。
4,再初始化一个N x V大小的权重矩阵,用隐藏层向量h左乘 这个权重矩阵,在经过激活函数处理得到V维的向量y,y的每一个元素代表相对应的每个单词的概率分布。
5,y中概率最大的元素所指示的单词为预测出的单词,将它与实际要预测的单词作比较,要求误差越小越好。这就需要通过误差不断去更新前面的两个权重矩阵。
注意:在训练前需要定义好损失函数,采用梯度下降算法更新两个权重矩阵。训练完毕后,输入层的每个单词的one-hot向量与第一个权重矩阵相乘得到的向量的就是我们想要的Distributed Representation表示的词向量。
Skip-Gram
Skip-gram是一种用于训练词嵌入模型的算法,它的目标是学习每个单词的向量表示,使得语义相似的单词在向量空间中距离较近。模型结构图如下:
1,将训练语料库中的每个单词表示为一个one-hot向量,其中只有一个维度为1,其他维度为0。假设语料库中有V个单词,那么每个单词都可以表示为一个V维的向量。
2,定义一个神经网络模型,它包含一个输入层、一个隐藏层和一个输出层。输入层的大小为V(因为输入层是一个V维向量),隐藏层的大小为N维的向量,输出层的大小仍为V维的向量。
3,在模型中,输入层接收一个one-hot向量,将其转换为一个V维的实数向量。这个向量经过一个权重矩阵乘法操作,矩阵为V x N大小,得到一个大小为N维度的隐藏层向量,这个向量称之为中心词向量,再经过另一个权重矩阵乘法操作,矩阵为 N x V大小,得到一个大小为V维的输出层向量,这个向量称之为背景词向量。输出层向量表示在当前单词下,其他单词出现的概率,可以使用softmax函数对输出层向量进行归一化,使得每个单词的概率之和为1。(输出层得到一个V维的向量,但是经过softmax函数处理后,每个位置上的数值可能并不相同。而后根据窗口大小C的设置,从所有概率中选择C个最大概率值,在把他们转为one-hot编码与真实值相比较)
4,对于每个单词(中心词),我们可以定义一个“上下文窗口”,表示在当前单词前后固定的N个单词,称为“上下文单词”。在训练过程中,我们需要从语料库中提取出所有的这样的上下文窗口。
5,对于每个上下文窗口,我们将窗口中的每个单词依次作为输入,用模型预测窗口中心单词的概率。我们的目标是最小化模型预测值与实际值之间的差距,通常使用交叉熵作为损失函数。
6,使用梯度下降等优化算法对模型参数进行更新,使得模型在训练集上的预测值逐渐接近真实值。经过多次迭代,模型的参数会收敛,得到每个单词的向量表示。
参考文献
周练. Word2vec 的工作原理及应用探究[J]. 科技情报开发与经济, 2015 (2): 145-148.
https://zhuanlan.zhihu.com/p/61635013
https://zhuanlan.zhihu.com/p/29305464
https://blog.csdn.net/weixin_41843918/article/details/90312339
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。有问题大家随时留言讨论 ,我们下期见。