赞
踩
自然语言处理问题中,一般以词作为基本单元,例如我们想要分析“我爱中国”这句话的情感,一般的做法是先将这句话进行分词,变成我
,爱
,中国
。由于神经网络无法处理词,所以我们需要将这些词通过某些办法映射成词向量。词向量可以被认定为词的特征向量,可以用作代表这个词。通常把词映射为实数领域向量的技术也叫词嵌入(Word embedding).
假如我们要计算的文本中一共出现了4个词:猫、狗、牛、羊。向量里每一个位置都代表一个词。所以用one-hot来表示就是:
但是在实际情况中,文本中很可能出现成千上万个不同的词,这时候向量就会非常长。其中大部分都是0填充。
one-hot的缺点如下:
这种方式也非常好理解,用一种数字来代表一个词,对应钱买你的例子则是:
将句子里的每个词拼起来就是可以表示一句话的向量。
整数编码的缺点如下:
Word2vec 是google在2013年推出的一个NLP工具,它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的去度量它们之间的关系。挖掘词之间的联系。
Word2vec的训练模型本质上是只具有一个隐含层的神经元网络,如下图:
它的输入是采用One-Hot编码的词汇表向量,它的输出也是One-Hot编码的词汇表向量。使用所有的样本,训练这个神经元网络,等到收敛之后,从输入层到隐含层的那些权重,便是每一个词的Distributed Representation的词向量。比如,上图单词的Word embedding后的向量便是矩阵 W V ∗ N W_{V * N } WV∗N的第i行的转置。这样我们就把原本维度为 V V V的词向量变成了维数为N的词向量,并且词向量间保留了一定的相关关系。
Google在关于Word2Vec的论文中提出了CBOW和Skip-gram两种模型,CBOW适合于数据集较小的情况,而Skip-Gram在大型语料中表现更好。其中CBOW如上图左部分所示,使用围绕目标单词的其他单词作为输入,在映射层做加权处理后输出目标单词。与CBOW根据语境预测目标单词不同,Skip-gram根据当前单词预测语境,如下图右部分所示。假如我们有一个句子“There is an apple on the table”作为训练数据,CBOW的输入为(is,an,on,the),输出为apple.而Skip-gram的输入为apple,输出为(is, an, on , the)。
好吧,上面这些是从其它地方copy来的。其实讲得挺好的了,大致可以理解其中的工作原理。我又针对其中的细节进行进一步分析,可以根据下图进一步梳理其中的运作流程(将上述将上面的输入输出流程拆分为最小单元
,即输入一个字的one-hot得到一个输出结果,例如输入一个
x
1
x_{1}
x1得到一个
Y
1
Y_{1}
Y1):
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。