《TensorFlow自然语言处理》—3.4.3 使用TensorFlow实现skip-gram

举报
华章计算机 发表于 2019/07/21 22:05:50 2019/07/21
【摘要】 本节书摘来自华章计算机《TensorFlow自然语言处理》一书中的第3章,第3.4.3节,[澳] 图珊·加内格达拉(Thushan Ganegedara) 著 马恩驰 陆 健 译。

3.4.3 使用TensorFlow实现skip-gram

我们现在将介绍使用TensorFlow实现skip-gram算法。在这里,我们仅讨论学习嵌入所需要的TensorFlow操作的定义,而不是执行操作。完整练习可在ch3练习目录的ch3_word2vec.ipynb中找到。

首先,让我们定义模型的超参数。你可以自由更改这些超参数,以查看它们如何影响最终性能(例如,batch_size = 16或batch_size = 256)。但是,相比于更复杂的实际问题,这是一个简单的问题,你可能看不到任何显著差异(除非你将它们更改为极端值,例如,batch_size = 1或num_sampled = 1):

 image.png

接着,为训练集输入、标签和验证集输入定义TensorFlow占位符:

 image.png

然后,定义TensorFlow嵌入层的变量以及softmax层的权重和偏置:

 image.png

接下来,我们将定义一个嵌入查找操作,用于对给定批次的训练输入收集相应的嵌入:

 image.png

之后,使用负采样定义softmax损失:

 image.png

在这里,我们定义一个优化器来优化(最小化)前面定义的损失函数。你可以尝试使用https://www.tensorflow.org/api_guides/python/train中列出的其他优化器进行试验:

 image.png

使用余弦距离,计算验证集输入示例和所有嵌入之间的相似性:

 image.png

在定义了所有TensorFlow变量和操作后,我们现在可以执行操作以获得一些结果。这里我们将概述执行这些操作的基本过程,你可以参考练习文件来得到执行操作的完整概念。

  • 首先使用tf.global_variables_initializer().run()初始化TensorFlow变量

  • 对于预先定义的总步骤数中的每个步骤,请执行以下操作:

使用数据生成器生成一批数据(batch_data - 输入,batch_labels-输出)

创建一个名为feed_dict的字典,将训练输入/输出占位符映射到数据生成器生成的数据:

 image.png

执行优化步骤并得到损失值,如下所示:

 image.png

下面将讨论另一种主流的Word2vec算法,称为连续词袋(CBOW)模型。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。