《TensorFlow自然语言处理》—3.4.3 使用TensorFlow实现skip-gram
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):
接着,为训练集输入、标签和验证集输入定义TensorFlow占位符:
然后,定义TensorFlow嵌入层的变量以及softmax层的权重和偏置:
接下来,我们将定义一个嵌入查找操作,用于对给定批次的训练输入收集相应的嵌入:
之后,使用负采样定义softmax损失:
在这里,我们定义一个优化器来优化(最小化)前面定义的损失函数。你可以尝试使用https://www.tensorflow.org/api_guides/python/train中列出的其他优化器进行试验:
使用余弦距离,计算验证集输入示例和所有嵌入之间的相似性:
在定义了所有TensorFlow变量和操作后,我们现在可以执行操作以获得一些结果。这里我们将概述执行这些操作的基本过程,你可以参考练习文件来得到执行操作的完整概念。
首先使用tf.global_variables_initializer().run()初始化TensorFlow变量
对于预先定义的总步骤数中的每个步骤,请执行以下操作:
使用数据生成器生成一批数据(batch_data - 输入,batch_labels-输出)
创建一个名为feed_dict的字典,将训练输入/输出占位符映射到数据生成器生成的数据:
执行优化步骤并得到损失值,如下所示:
下面将讨论另一种主流的Word2vec算法,称为连续词袋(CBOW)模型。
- 点赞
- 收藏
- 关注作者
评论(0)