word2vec学习

来源:互联网 发布:js div左右滑动切换 编辑:程序博客网 时间:2024/06/10 00:03

word2vec是指通过神经网络学习将单词转换成特定长度的数值向量的过程。

这里的向量应当尽量满足:对于同义词如cat、kitty,二者对应的数值向量值应当比较接近。

通常,学习单词的向量表示的方法为通过类似于自编码器的网络,学习神经网络中的权重,

得到的权重即为我们需要的向量表示。

(这个看博客能理解:若输入数据为10000维的单一稀疏向量(只有一个为1),输入到隐藏层的W为10000*300,

则最后训练结束后,每一行表示一个单词对应的词向量。)

一个关于Word2Vec的结构、训练、实现的博客:

http://www.softcopyright.net/show.aspx?cid=103&id=111412

谷歌训练了一个包含3Million个词汇对应的词向量的网络,这个网络的训练数据来源于包括1000亿个词汇的google news。

当然google也实现了python的开源项目word2vec,可以通过语料库作为训练数据,训练数据的词向量表示。

(对于中文语料库来讲,需要首先进行分词,一个分词工具:ANSJ)

关于中文词向量的例子:http://www.cnblogs.com/hebin/p/3507609.html

——————————————————————————————————————————————————

词向量的tensorflow教程:https://www.tensorflow.org/tutorials/word2vec

——————————————————————————————————————————————————

在训练过程中,在经过softmax后(概率和为1),计算softmax结果与实际类别(只有一个值为1,剩下为0)的熵,

将这个熵作为loss函数,但是这样的训练速度非常慢。

为了加快速度,这里随机选择了几个错误类别(与实际类别不一样),计算sofmaxt结果与这个假结果的熵的负值,

将真熵与假熵共同作为梯度下降的loss函数,这样可以明显加快训练速度。这个算法为negative sampling(NCE)

tensorflow上的一个翻译:http://www.jeyzhang.com/tensorflow-learning-notes-3.html

至于怎么选择假结果,根据信息学来选择,出现概率大的被选择为负样本的概率较大。

如France与Paris,二者的结合给出的信息量很大,而France与the结合的信息量几乎为0,意思是说这种情况不应该发生。

——————————————————————————————————————————————————

为了进一步加快训练速度,在训练数据上也进行一定的操作:根据单词出现的概率,剔除掉一些训练数据。

总体剔除方法为:频率越大,被提出的概率越大,这样能不减少样本丰富度的情况下保证训练精度。