理解word2vec的训练过程

生成词向量是自然语言处理中的基本过程,此前对此只知道使用但是一直不知道其原理。

最近补课,仔细学习了word2vec,上网查资料的时候发现很多博客资料上讲到的主要是理论,不好全面理解;而对于介绍应用的文章又偏重于某个工具的使用而不是训练的细节,所以特别参考了Tensorflow上的实现写下本篇文章,以防忘记。其中Tensorflow实现word2vec请点击这里


正文:

对于word2vec的原理这里不做过多解释,如果不熟悉可以看 [NLP] 秒懂词向量Word2vec的本质,下文中有些图片借用了文章中的图片,下面主要介绍训练过程。


词向量其实是将词映射到一个语义空间,得到的向量。而word2vec是借用神经网络的方式实现的,考虑文本的上下文关系,有两种模型CBOW 和Skip-gram,这两种模型在训练的过程中类似。Skip-gram 模型是用一个词语作为输入,来预测它周围的上下文,CBOW模型是拿一个词语的上下文作为输入,来预测这个词语本身。


词向量训练的预处理步骤:
  1. 对输入的文本生成一个词汇表,每个词统计词频,按照词频从高到低排序,取最频繁的V个词,构成一个词汇表。每个词存在一个one-hot向量,向量的维度是V,如果该词在词汇表中出现过,则向量中词汇表中对应的位置为1,其他位置全为0。如果词汇表中不出现,则向量为全0
  2. 将输入文本的每个词都生成一个one-hot向量,此处注意保留每个词的原始位置,因为是上下文相关的
  3. 确定词向量的维数N


Skip-gram处理步骤:
  1. 确定窗口大小window,对每个词生成2*window个训练样本,(i, i-window),(i, i-window+1),...,(i, i+window-1),(i, i+window)
  2. 确定batch_size,注意batch_size的大小必须是2*window的整数倍,这确保每个batch包含了一个词汇对应的所有样本
  3. 训练算法有两种:层次 Softmax 和 Negative Sampling
  4. 神经网络迭代训练一定次数,得到输入层到隐藏层的参数矩阵,矩阵中每一行的转置即是对应词的词向量


CBOW的处理步骤:
  1. 确定窗口大小window,对每个词生成2*window个训练样本,(i-window, i),(i-window+1, i),...,(i+window-1, i),(i+window, i)
  2. 确定batch_size,注意batch_size的大小必须是2*window的整数倍,这确保每个batch包含了一个词汇对应的所有样本
  3. 训练算法有两种:层次 Softmax 和 Negative Sampling
  4. 神经网络迭代训练一定次数,得到输入层到隐藏层的参数矩阵,矩阵中每一行的转置即是对应词的词向量


参数矩阵解释:
对输入层到隐藏层的参数包含W和b,我们需要的是W,这里的W是一个矩阵,shape=(N,V)。其中V是上文所述的词表的大小,N是需要生成的词向量的维数。N同样也是隐藏层(第一层)中的隐藏节点个数。
每次一个batch_size输入其实一个矩阵(batch_size, V),记为X,隐藏层输出为Y,公式为。所有的输入共享一个W,每次迭代的时候都在修改W,由于one-hot的性质,每次修改W只修改1对应的那一行。而这一行也就是词向量(转置后)


神经网络像是一个黑盒子,这其中的概念很难理解,这里给出我对词向量训练的个人理解:

对于每个词s,训练数据对应的标记是另一个词t,训练其实是想找到一种映射关系,让s映射到t。但很显然我们不是希望找到一个线性函数,使得给定s一定能得到t,我们希望的是能够通过s得到一类词T,包含t。对于T中的每个t,由于在s上下文中出现的频次不同,自然能得到一个概率,频次越高说明s与t相关性越高。

对于词向量,或者说参数矩阵W,可以认为是一个将词映射到语义空间的桥梁,s与t相关性越高,则认为其在语义空间中越近,那么对应的桥梁也越靠近。如果用向量来理解的话就是向量之前的夹角越小,我们使用向量来表示这个词的信息,重要的是得到了语义信息。在实际应用中,生成一段文本,我们可以判断词与词的向量之间相似度,如果过低则就需要怀疑是否正确了。


  • 19
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值