Fork me on GitHub

CBOW与Skip-Gram模型基础

  • 词向量基础
    • 独热码表示虽然简单,但是到了百万级就会造成内存灾难
    • distributed representation可以解决这样的问题,他的思路是通过训练,将每个词都映射到一个较短的词向量上。这样就构成了向量空间,今儿可以采用普通的统计学问题来解决
    • "Royalty","Masculinity", "Femininity"和"Age"4个维度来表示,King这个词对应的词向量可能是(0.99,0.99,0.05,0.7)当然在实际情况中,我们并不能对词向量的每个维度做一个很好的解释。

用distributed representation我们可以较容易的分析词之间的关系了,比如将我们的词降到二维,我们会发现:

 

  • CBOW与Skip-Gram用于神经网络语言模型
    • 在word2vec之前,我们采用DNN神经网络来训练词向量进而处理词与词之间的关系。采用三层神经网络结构(input hidden softmax)

        其数据的输入输出分为CBOW和Skip-Gram

 

  • CBOW
    • 输入某特征词的上下相关的词对应的词向量,输出的就是这个特征词的词向量。由于CBOW使用的是词袋模型,因此前后的相关词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在上下文就可以

这样我们这个CBOW的例子里,输入八个词向量,输出的是所有词的softmax概率(训练的目标的期望训练样本特定次对应的softmax概率最大)隐藏层的神经元个数我们可以自己定,通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有词对应的词向量。这样当我们有新的需求,要求求出某八个词对应的最有可能的输出中心词的时候,我们可以通过DNN前向传播算法和softmax激活函数找到概率最大词对应的神经元即可。

 

  • Skip-Gram
    • 与CBOW相反(输入特定词的词向量,输出特定词对应上下文词向量)
    • 这样我们输入特定词,输出的就是softmax概率排名前八的词,对应Skip-Gram神经网络输入层有一个神经元,输出层有词汇表大小个神经元
    • 隐藏层神经元个数我们可以自己指定。通过DNN反向传播算法,我们可以求出DNN模型的参数,同时得到所有词对应的词向量

 

  • Word2vec基础之哈夫曼树
    • word2vec也使用了CBOW与Skip-Gram来训练模型与得到词向量,但是并没有使用传统的DNN模型。最先优化使用的数据结构是用霍夫曼树来代替隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大。 而内部节点则起到隐藏层神经元的作用。
    • 哈夫曼树中权重高的编码值较短,低权重编码值较长,这样保证树的带权路径最短,符合信息论。
    • 在Word2vec中编码方式与哈夫曼树的编码方式相反,约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小于右子树的权重

 

posted @ 2021-01-07 16:37  鲍鲍tql  阅读(321)  评论(0编辑  收藏  举报