所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

word2vec的原理,词向量计算句子的概率是多少?

发布时间:2020-04-12 08:42:44

资讯分类:word2vec  词向量  句子  原理  向量  概率  更新
word2vec的原理,词向量计算句子的概率是多少?

我来说说word2vec的原理吧。

word2vec就是把一个词映射为一个向量表示,那么怎么去映射呢?首先随机分配一个向量,然后通过模型去更新这个向量,让它能更好的表示这个词的语义。现在问题变成了怎么来更新这个向量(我们选择最简单的一种作为说明,已知输入词预测输出词的概率,当然最流行的是CBOW和skip-gram方法)。

1. 首先看下模型图

从图中可以看出,V代表整个训练语料的词表大小,x_i代表某个词,W为词向量(也就是我们要计算得到的),y_i对应的预测词;

2. 通过这个,可以构建目标函数,如下:

3. 有了目标函数之后,再构建loss function,具体如下(如果对公式有疑问可以随时问我):

此时就有人会问,为什么是-logf(x),因为所有机器学习的目标都是最小化损失函数,而我们目的又是使得预测的概率更接近真实值,也就是预测的概率要尽可能大,所以损失函数就加了一个负号;

4. 有了loss function,我们再来优化它,使损失达到最优,具体公式如下(使用梯度下降法):

输出参数更新:

我们最终得到W和W`,所以对参数求导即可;

输入参数更新:

5. 我们最终得到的W就是我们要计算的词向量,此时基本就结束了;

6. 但是,我们每次更新一次权重,都需要计算最优的输出词,即对词表每个词求一次概率,这时计算量会非常大,几乎不可能完成。这里就进化出两个优化算法,Hierarchical Softmax和Negative Sampling。

7. Hierarchical Softmax思想是使用词频构造一颗哈夫曼树,每个末节点表示一个词,如果要预测某个词的概率,仅需要计算从根节点到该词路径的概率积,此时复杂度从O(V)降为O(log(V)),具体如下(需要注意输出层和隐层不变,仅仅改变输出层):

7.1 此时同样需要构建目标函数:

由此可见进入到左子树结果为1,进入到右子树结果为0,此性质符合sigmoid特性,这就是Hierarchical Softmax的由来。

7.2 同样构建loss function

7.3 更新参数

输出层的参数更新

输入层的参数更新

8. 这里基本上把word2vec的整个流程都介绍了一遍,像CBOW和skip-gram只是应用了上下文信息,其他内容和上文介绍类似。这里还有另外一种优化算法(Negative Sampling)没介绍到,如果感兴趣的话,后期再补充。

word2vec的原理,词向量计算句子的概率是多少?

Embedding问题一直是NLP领域里十分热门问题。近年来,有很多工作是利用RNN、CNN等神经网络对词进行组合(composition operators )以得到句子表示,但这大部分都是监督学习,针对特定领域的特定需求,得到的句子向量的通用型不强。

NIPS'15 的论文,来自 Ryan Kiros等人提出的skip-thought vectors受Word2vec中skip-gram的启发,把词级别的Embedding扩展到句子级别Embedding,模型称为skip-thought,得到的句子向量称为skip-thought vectors.

这篇论文的优点主要有2点:

1)skip-thought是无监督的通用式句子表示方法,利用书中文本的连续性,训练一个编码器-解码器模型,试图重建一个句子段落的周围句子,使得语义和句法上相似的句子有相似的向量表示。

2)skip-thought的另一个贡献是 vocabulary mapping。介绍了一种简单的词汇扩展方法,将未被视为训练的单词编码,使得词汇量可以扩大到一百万个单词。对于没在训练集出现的词,通过mapping from word embedding pre-trained from word2vec,用一个没有正则的 L2 学得映射矩阵W,使得任意的词向量都能在skip-thought中有一个合适的表示。Embedding问题一直是NLP领域里十分热门问题。近年来,有很多工作是利用RNN、CNN等神经网络对词进行组合(composition operators )以得到句子表示,但这大部分都是监督学习,针对特定领域的特定需求,得到的句子向量的通用型不强。

NIPS'15 的论文,来自 Ryan Kiros等人提出的skip-thought vectors受Word2vec中skip-gram的启发,把词级别的Embedding扩展到句子级别Embedding,模型称为skip-thought,得到的句子向量称为skip-thought vectors.

这篇论文的优点主要有2点:

1)skip-thought是无监督的通用式句子表示方法,利用书中文本的连续性,训练一个编码器-解码器模型,试图重建一个句子段落的周围句子,使得语义和句法上相似的句子有相似的向量表示。

2)skip-thought的另一个贡献是 vocabulary mapping。介绍了一种简单的词汇扩展方法,将未被视为训练的单词编码,使得词汇量可以扩大到一百万个单词。对于没在训练集出现的词,通过mapping from word embedding pre-trained from word2vec,用一个没有正则的 L2 学得映射矩阵W,使得任意的词向量都能在skip-thought中有一个合适的表示。


skip-thought的结构是一个encoder-decoder模型,encoder负责把词序列编码成一个句子向量,decode用来生成该句子的上下文向量。encoder 输出一个向量,decoder 在这个向量的基础上生成一个句子。有关encoder和decoder的结构选择上论文中也做了几个选择实验,包括 ConvNet-RNN, RNN-RNN,LSTM-LSTM,加入attention mechanism 等。

skip-thought在8个任务上使用线性模型对向量进行评估:语义关联、释义检测、图像句子排序、问题类型分类和4个情绪和主观性数据集分类问题。实验结果表明:skip-thought可以产生高度通用的稳健的句子表示,并在实践中表现良好。

下图就对句子进行向量表示之后,根据cosine相似度计算出来的句子结果:


留言与评论(共有 0 条评论)
   
验证码:
Top