首页 > 编程知识 正文

word2vec向量怎么相加,word2vector词向量

时间:2023-05-05 05:25:39 阅读:33163 作者:1636

1、word2vector简介2013年,谷歌团队发布了word2vec工具。 word2vec工具主要包括两种模式。 即skip-gram和连续词袋模型,简称continuous bag of words、CBOW。 还有两种高效的训练方法:负采样和层序soft max (高水平采样)

2、单词向量如某城市词汇表(北京、上海、宁夏、纽约、巴黎、南京)、热编码器表示如下。

杭州[ 0,0,0,0,0,1,0,…,0,0,0,0,0,0,0,0,0,1,0,0,0,0,…,0 0,0,0 )例如,在上面的例子中,语料库中杭州、上海、宁波、北京分别对应于一个向量,向量中只有一个值是1,剩下的都是0。 但是,使用One-Hot Encoder存在以下问题: 另一方面,城市代码是随机的,向量之间相互独立,看不到城市之间可能存在的关联关系。 其次,向量维的大小取决于语料库中单词的数量。 如果将与世界所有城市名称相对应的向量组合成一个矩阵,则该矩阵过于稀疏,会引起维数灾难。 使用3http://www.Sina.com/(分布式wordvectorrepresentations )可以有效解决此问题。 Word2Vec将One-Hot Encoder转换为低维连续值,即密集向量,其中意义相近的词被映射到向量空间较近的位置。

分布式词向量是一定大小的实数向量,其大小例如预先确定为N=300维或N=1000维,各要素是实数,实数的具体值是在词典中各词作出不同的贡献而得到的,因此称为分布式。 word2vec是学习这个分布式词向量的算法。 的馀弦夹角可以表示词语之间的相似度。 该方法与One-hot方式相比,另一个区别是维数极端下降。 对于10W的同义词词典,n维(n可以自由设置,例如,n=10 )的实数向量可表示单词,而One-hot需要10W维。

3、模型简介one-hot向量作为word2vec的输入,在word2vec上训练低维词向量(word embedding )。

word2vec模型其实是一个简化的神经网络。 图:

输入级别: One-Hot Vector

隐藏图层:没有激活函数,即线性单元格。

输出级别:维与输入级别的维相同,使用Softmax回归。

4、cbowcbow (continuous bag-of-word model )又称连续词袋模型,是一种三层神经网络。 如下图所示,该模型的特点是输入已知上下文,输出对当前单词的预测。 图:

更详细的图:

网络计算步骤:

输入级别:上下文单词的onehot。 [设单词向量空间dim为v,上下文单词数为c ]注意所有onehot乘以共享的输入权重矩阵w(w是V*N矩阵,n是自己设定的数,因此需要初始化权重矩阵w )后的向量(onehot向量乘以矩阵的结果) size是1*N .输出权重矩阵w’{ n * v }乘以向量{1*V}激活函数处理得到的V-dim概率分布{PS:为onehot,所以其中各维代表一个单词}、 概率最大的索引指示的单词是预测的中间词(target word ) loss function (一般是交叉熵成本函数),w是从输入层到隐藏层的权重矩阵,维为{V*N},w’

因此,需要定义loss function (一般为交叉熵成本函数)分布式词向量。 训练结束后,输入层的各单词乘以矩阵w而得到的向量,就是我们想要的单词向量(word embedding ),该矩阵(所有单词的word embedding )也称为look up table (其实这个lood embedding ) 有了可以挂在任何单词onehot上的look up table,就可以消除训练过程直接查表得到单词的词向量。

请看例子:

文: I drink coffee everyday!

软件最大公式:

这里,drink稀疏表示[0 1 0 0]经过嵌入式成为密集的矩阵[2 2 1]。

5、skip-gram Skip-gram与CBOW正好相反,知道现在的语言,预测上下文。 图:

详图:

eg:语句:“thequickbrownfoxjumpsoverlazydog”,我们设置skip_window的参数。 这表示我们从当前input word的一侧(左侧或右侧)选择单词的数量,并将我们的窗口大小设置为2 ) skip_wind

ow=2),也就是说我们仅选输入词前后各两个词和输入词进行组合。下图中,蓝色代表input word,方框内代表位于窗口内的单词。Training Samples(输入, 输出)。

比如:训练样本取(The,quick),根据句子[The,quick, brown ,fox ,jumps, over,the, lazy, dog],它们被编码成one-hot向量后,The是(1,0,0,0,0,0,0,0,0),quick是(0,1,0,0,0,0,0,0,0)。因此输入是1 * 9维的one-hot向量The(1,0,0,0,0,0,0,0,0),乘以9 * 5(9是单词个数,5是随机取的数字)的输入层到隐藏层的权重矩阵W,得到1 * 5维的隐藏层神经元向量,该神经元向量乘以5 * 9的权重矩阵,得到1*9的向量,对该向量的每个元素值做softmax函数运算,得到另一个1 * 9的向量,该向量的每个值代表每个词的概率,而且之和为1,每个值的大小是什么意思呢?这个向量是the这个词经过训练得到的输出,该输出是一个包含9个概率值分布的向量,向量中的每个概率值代表着对应词汇表中9个单词的概率大小,理想情况是这个向量等于给定的labels向量quick,但由于softmax函数的特性,这种情况永远达不到,所以只能通过反向传播的过程让它们不断逼近。

具体步骤如下:
第一步,输入层到隐藏层:

该图输入的The的one-hot向量称为x,乘以9*5维的权重矩阵W,得到5维的隐藏层神经单元,每个值代表一个神经元,看下计算过程,计算后得到的隐藏层神经元的值其实就是W矩阵的第1行。因为每次输入都是像The这样的向量,one-hot向量中第几列值为1,隐藏层就是W矩阵的第几行。因此对任何输入而言,隐藏层就是W矩阵的某一行,所以:每个词的one-hot向量输入到隐藏层后,隐藏层的值就是权重矩阵W某一行的值,该行的值也就是该词的词向量,因此我们要更新迭代的模型就是W矩阵(即每个词的词向量),w矩阵即是我们模型输出的最终结果
第二步,隐藏层到输出层:

步骤1计算得到的1 * 5维矩阵,作为隐藏层神经元的值[3,0,5,2,4],再乘以一个5 * 9维的权重矩阵Q,得到上述等式右边1 * 9维的矩阵Z[z1,z2,…,z9],对该矩阵的每个值作softmax函数运算,得到Z’[z’1,z’2,…,z’9],其中z’1+z’2+…+z’9 = 1, 这9个z’值,最大那个,就对应着The这个词本应该的输出,而The的labels是quick,quick这个词的one-hot向量为(0,1,0,0,0,0,0,0,0),那么我们训练并且迭代W权重矩阵的目的就是使z’2这个值最大。同理对应其他单词输入输出对(The, brown),(quick,The)等等,采用同样的训练过程,可以不断的调整输入层到隐藏层的W向量9 * 5中每行的值,一共9行9个主要词汇,因此得到9个词向量。

小结:无论是CBOW还是skip-gram,最终我们需要的是训练出来的输入层到隐藏层的权重矩阵w,w每行对应每个词的词向量。

6、训练及优化

在第一部分讲解完成后,我们会发现Word2Vec模型是一个超级大的神经网络(权重矩阵规模非常大)。

举个栗子,我们拥有10000个单词的词汇表,我们如果想嵌入300维的词向量,那么我们的输入-隐层权重矩阵和隐层-输出层的权重矩阵都会有 10000 x 300 = 300万个权重,在如此庞大的神经网络中进行梯度下降是相当慢的。更糟糕的是,你需要大量的训练数据来调整这些权重并且避免过拟合。百万数量级的权重矩阵和亿万数量级的训练样本意味着训练这个模型将会是个灾难。

下面主要介绍两种方法优化训练过程。
1.负采样(negative sampling)
负采样(negative sampling)解决了这个问题,它是用来提高训练速度并且改善所得到词向量的质量的一种方法。不同于原本每个训练样本更新所有的权重,负采样每次让一个训练样本仅仅更新一小部分的权重,这样就会降低梯度下降过程中的计算量。至于具体的细节我在这里就不在介绍了。
2.层序softmax(Hierarchical Softmax)也是解决这个问题的一种方法。

参考:
https://blog.csdn.net/lilong117194/article/details/81979522
https://blog.csdn.net/free356/article/details/79445895
https://blog.csdn.net/mylove0414/article/details/61616617
https://blog.csdn.net/yu5064/article/details/79601683
https://zhuanlan.zhihu.com/p/29020179

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。