目录
用向量表示单词的方法大致可以分为两种:一种是基于计数的方法;另一种是基于推理的方法。本节主要讲基于推理的方法。
一、基于计数的方法存在的问题
基于计数的方法使用整个语料库的统计数据(共现矩阵和PPMI等),通过一次处理(SVD等)获得单词的分布式表示。而基于推理的方法使用神经网络,通常在mini-batch数据上进行学习。这意味着神经网络一次只需要看一部分学习数据(mini-batch),并反复更新权值。这种学习机制上的差异如图:
二、基于推理的方法概要
基于推理的方法主要操作是“推理”,即当给出周围的单词(上下文)时,预测“?”处会出现什么单词。
![](https://i-blog.csdnimg.cn/blog_migrate/22d7287004b7d23125ed8bb3654b51de.png)
从模型视角来看,推理任务如下图所示:
也就是基于推理的方法引入了某种模型,我们将神经网络作为这种模型。输入为:上下文,输出为:(可能出现的)各个单词的出现概率。
在这样的框架下,使用语料库来学习模型,使之能做出正确的预测。另外,作为模型学习的产物,我们得到了单词的分布式表示。
三、神经网络中单词的处理方法
也就是将单词转化为固定长度的向量,常用的方法是:采用one-hot编码。例如:
1、假设语料库中含有7个单词,分别为:"you"、"say"、"goodbye"、"i"、"hello"、"."。要想将单词转化为one-hot表示,就需要准备元素个数与词汇个数相等的向量,将单词ID对应得元素设置为1,其余元素设置为0.
将单词得向量元素得个数确定下来之后,神经网络中输入层得神经元个数也确定下来了。
输入层的神经元个数就等于向量的元素个数。
2、以基于神经网络的全连接层变换为例
经过一个矩阵的变换之后,将7维的向量压缩为3维。比如:
四、简单的word2vec
word2vec中主要使用的两个神经网络:CBOW和skip-gram。本节以CBOW为例。
1、CBOW模型的推理
CBOW模型是根据上下文预测目标词的神经网络(“目标词”是指中间的单词,它周围的单词是“上下文”)。
(1)CBOW模型的网络结构
它有两个输入层(上下文仅考虑两个单词),经过中间层到达输出层。这里,从输入层到中间层的变换由相同的全连接层(权重为Win)完成,从中间层到输出层的变换由另一个全连接层(权重为Wout)完成。
(2)语料库
语料库:"you"、"say"、"goodbye"、"i"、"hello"、"."。
(3)转化为one-hot形式
以"you"、"goodbye"为例:
you:[1,0,0,0,0,0,0];"goodbye":[0,0,1,0,0,0,0]
(4)实现CBOW推理
现在利用CBOW模型可以实现输入上下文,推测目标词了,但是准不准还需要多CBOW模型进行训练。
2、CBOW模型的学习
对CBOW模型进行学习只是使用以下softmax函数和交叉熵损失。首先使用softmax函数将得分转化为概率,再求这些概率和监督标签之间的交叉熵误差,并将其作为损失进行学习,这一过程如下图所示:
word2vec中使用的网络有两个权重,分别是输入侧的全连接层的权重(Win)和1输出侧的全连接层的权重(Wout)。一般而言,输入侧的权重的每一行对应于各个单词的分布式表示,输出侧的权重在列方向上保存了各个单词的分布式表示。如下图所示:
就word2vec而言,选择输入侧的权重作为单词的分布式表示。