本系列分为四部分,这篇文章是本系列第二篇,一年前在公众号上有写过:Word embedding系列(二):word2vec详解,现在搬到CSDN上~
欢迎关注我的公众号,微信搜 algorithm_Tian 或者扫下面的二维码~
现在保持每周更新的频率,内容都是机器学习相关内容和读一些论文的笔记,欢迎一起讨论学习~
本文参考了 这个博客的系列文章,建议如果有空可以看一下原博客,写的容易理解又很深入详细~
word2vec我准备分为四部分介绍:
1.CBOW与Skip-gram
CBOW模型的训练输入是某个词的上下文相关词对应的词向量,输出就是这个词的词向量。
Skip-Gram模型和CBOW的思路是反着的,即输入是一个词的词向量,而输出是它对应的上下文词向量。
如图所示,是一个词w和它的上下文(context(w))的示意图:
2.基于HierarchicalSoftmax的模型
word2vec用霍夫曼树代替隐藏层和输出层的神经元,词频为霍夫曼树节点权重。
根节点的词向量: 投影后的词向量,
所有叶子节点: 之前神经网络softmax输出层的神经元,
叶子节点的个数: 词汇表的大小。
cbow和skipgram本质上一样,因为cbow输入的是上下文所有词向量的和,所以这里就只给出一个cbow的示意图。
skipgram和cbow的输出的区别就在于取概率最大的还是概率前n大的。
霍夫曼树中出现频次越高的词离树根越近,也就是说编码越短。在霍夫曼树中,隐藏层到输出层的softmax映射不是一下完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"。
在构建树时,高频放右边。规定沿着左子树走是负类(霍夫曼树编码1),沿着右子树走是正类(霍夫曼树编码0)。使用sigmoid函数来计算是正类还是负类: