欢迎光临 x-algo
关注算法在工业界应用
Hi, 这是一个关注大数据算法在工业界应用的网站

使用Tensorflow实现word2vec模型

其实这是一篇翻译,这篇文章的目的是介绍如何使用Google的deep learning工具Tensorflow实现word2vec模型,首先会介绍一下word2vec模型原理,接着是如何使用Tensorflow实现,[戳我查看官方完整可以行代码]

本文采用的是Skip-gram + 负采样的方式。

词的向量表示

word2vec的模型是大神Mikolov et al.提出来的,这个模型用来学习词的向量表示,也被称为——『word embeddings』。

默认认为大家对word2vec的原理比较了解,这里只说一些对接下来使用Tensorflow部分的理论。

word2vec的模型和损失函数

其实word2vec使用的模型非常简单,最终目标就是最大化一个目标函数,求词 \(w_t\) 在给定上下文 \(h\) 的时候的最大概率,softmax function为:

\(\begin{align}P(w_t | h)&=\text{softmax}(\text{score}(w_t, h)) \\&=\frac{\exp \{ \text{score}(w_t, h) \} }{\sum_\text{Word w' in Vocab} \exp \{ \text{score}(w', h) \}}\end{align}\)

极大化似然函数之后的形式为:

\(\begin{align}J_\text{ML} &= \log P(w_t | h) \\&=\text{score}(w_t, h)-\log \left( \sum_\text{Word w' in Vocab} \exp \{ \text{score}(w', h) \} \right)\end{align}\)

上面式子是一个标准的概率语言模型的形式,但是上面式子求解起来成本非常高,因为第二项中有个Vocab,也就是字典的大小。

用一张图表示可以表示为:

softmax-nplm

word2vec对上面图进行了改进,不在计算在整个词典中生成当前词的概率,而是从词典中『采样』k个,新的图变为:

nce-nplm

所以目标函数就变为:

\(J_\text{NEG} = \log Q_\theta(D=1 |w_t, h) +k \mathop{\mathbb{E}}_{\tilde w \sim P_\text{noise}}\left[ \log Q_\theta(D = 0 |\tilde w, h) \right]\)

The Skip-gram Model

Skip-gram模型和CBOW模型过程刚好相反,他是通过当前词预估上下文词出现的概率,例如句子:

x-algo.cn is  a  good website.

如果使用窗口宽度为1的CBOW模型,而已得到训练样本为:([x-aog.cn, a] , is), ( [ is  ,  good] , a ), ( [ a , website ] , good  ),也就是形式为(context, target)的pair。

如果使用Skip-gram模型就变为:(is, x-algo.cn),(is , a ),( a , is ),(a , good)....,形式为(input, output)。

如果负采样的k值为1,在第一个窗口目标函数可以表示为:

\(J^{(t)}_\text{NEG} = \log Q_\theta(D=1 | \text{x-algo.cn, is}) +\log(Q_\theta(D=0 | \text{website, is}))\)

我们接下来的目标就比较简单,就是通过使用SGD的方法迭代求解 \(\theta\) ,即每轮通过其梯度 \(\frac{\partial}{\partial \theta} J_\text{NEG}\) 进行优化。

使用Tensorflow创建图

定义占位符

确定每次训练的时候,batch的形式每次输入多少个训练样本

定义参数

整个过程中,有两部分参数需要学习,一部分是所有词向量组成的矩阵,另一部分是链接隐层和输出层的权重矩阵和对应的偏置。 用下面三组变量分别表示为:

设置损失函数和优化算法

正常情况下需要通过tf.Operation类定义节点计算,但是由于要配合负采样操作,系统默认提供了一个默认实现,只要简单设置一下参数即可。

迭代训练

原文链接

https://www.tensorflow.org/versions/r0.7/tutorials/word2vec/index.html

未经允许不得转载:大数据算法 » 使用Tensorflow实现word2vec模型

评论 抢沙发

*

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

关注大数据算法在工业界应用

本站的GitHub关于本站