cbow与skip-gram

场景:上次回答word2vec相关的问题,回答的是先验几率和后验几率,没有回答到关键点。

词袋模型(Bag of Words, BOW)与词向量(Word Embedding)模型

  • 词袋模型就是将句子分词,而后对每一个词进行编码,常见的有one-hot、TF-IDF、Huffman编码,假设词与词之间没有前后关系。
  • 词向量模型是用词向量在空间坐标中定位,而后计算cos距离能够判断词于词之间的类似性。

先验几率和后验几率

先验几率和后验证几率是基于词向量模型。首先一段话由五个词组成:
A B C D E
对C来讲:先验几率指ABDE出现后C出现的几率,即P(C|A,B,D,E)
能够将C用ABDE出现的几率来表示 Vector(C) = [P(C|A), P(C|B), P(C|D), P(C|E) ]
后验几率指C出现后ABDE出现的几率:即P(A|C),P(B|C),P(D|C),P(E|C)html

n-gram

先验几率和后验几率已经知道了,可是一个句子很长,对每一个词进行几率计算会很麻烦,因而有了n-gram模型。
该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的几率就是各个词出现几率的乘积。
通常状况下咱们只计算一个单词先后各两个词的几率,即n取2, 计算n-2,.n-1,n+1,n+2的几率。
若是n=3,计算效果会更好;n=4,计算量会变得很大。网络

cbow

cbow输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量,即先验几率。
训练的过程以下图所示,主要有输入层(input),映射层(projection)和输出层(output)三个阶段。
cbow编码

skip-gram

Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量,即后验几率。训练流程以下:
.net

word2vec中的Negative Sampling概述

传统网络训练词向量的网络:
htm

word2vec训练方法和传统的神经网络有所区别,主要解决的是softmax计算量太大的问题,采用Hierarchical SoftmaxNegative Sampling模型。
word2vec中cbow,skip-gram都是基于huffman树而后进行训练,左子树为1右子树为0,同时约定左子树权重不小于右子树。
构建的Huffman树以下:

其中,根节点的词向量对应咱们的投影后的词向量,而全部叶子节点就相似于以前神经网络softmax输出层的神经元,叶子节点的个数就是词汇表的大小。在霍夫曼树中,隐藏层到输出层的softmax映射不是一会儿完成的,而是沿着霍夫曼树一步步完成的,所以这种softmax取名为"Hierarchical Softmax"。blog

由于时间有限,暂时总结这些,下一次详细看一下word2vec中的实现。ip

参考:
word2vec原理(一) CBOW与Skip-Gram模型基础
word2vec原理(二) 基于Hierarchical Softmax的模型
本身动手写word2vec (四):CBOW和skip-gram模型get

相关文章
相关标签/搜索