《TensorFlow自然语言处理》—3.5 连续词袋算法
3.5 连续词袋算法
CBOW模型的原理类似于skip-gram算法,但是在对问题建模的公式中有一个重大变化。在skip-gram模型中,我们从目标单词预测上下文单词。但是,在CBOW模型中,我们将从上下文单词预测目标单词。让我们通过前面的例句来比较skipgram和CBOW的数:
对于skip-gram,数据元组(即(输入词,输出词))可能如下所示:
(dog, the), (dog, barked), (barked, dog),等等。
对于CBOW,数据元组如下所示:
([the, barked], dog), ([dog, at], barked),等等。
因此,CBOW的输入具有2×m×D的维度,其中m是上下文窗口大小,D是嵌入的维度。CBOW的概念模型如图3.13所示。
我们不会详细介绍CBOW的细节,因为它与skip-gram非常相似。但是,我们会讨论其算法实现(虽然不深入,因为它与skip-gram有许多相似之处),以便清楚地了解如何正确实现CBOW。CBOW的完整实现可以在ch3练习文件夹的ch3_word2vec.ipynb中找到。
在TensorFlow中实现CBOW
首先,我们定义变量,这与skip-gram模型一样:
图3.13 CBOW模型
在这里,我们创建了一组堆叠的嵌入,代表每个上下文单词的位置,所以,我们将有一个大小为[batch_size,embeddings_size,2 * context_window_size]的矩阵。然后,我们使用降维运算符,通过平均最后一个轴上的堆叠嵌入,将堆叠矩阵大小减小到[batch_size,embeddings_size]:
之后,损失和优化的定义与在skip-gram模型中一样:
- 点赞
- 收藏
- 关注作者
评论(0)