In this tutorial we look at the word2vec model by Mikolov et al. This model is used for learning vector representations of words, called “word embeddings”.
1,Highlights (强调)
本教程旨在强调在TensorFlow中构建word2vec模型有趣的实质性部分。
- 我们首先给出了为什么我们想要将单词表示为向量的动机。
- 我们观察模型背后的直觉以及如何训练(用数学方法来衡量)。
- 我们还在TensorFlow中展示了一个简单的模型实现。
- 最后,我们看看如何让天真版本更好地扩展。
在本教程的后面,我们将逐步介绍代码,但是如果您希望直接进入,请参考tensorflow/examples/tutorials/word2vec/ word2vec_basic.py中的简单实现。此基本示例包含下载所需的代码一些数据,对它进行一些训练并将结果可视化。一旦你阅读和运行基本版本,你可以直接到models / tutorials / embedding / word2vec.py这是一个更实际的实现,展示了一些更高级的TensorFlow原则,关于如何有效地使用线程将数据移动到文本模型,训练期间如何检查点等
但首先,我们来看看为什么我们想要学习单词嵌入。如果你是一个嵌入式专家,你可以跳过这个部分,你只是想弄明白你的手。参考:一步一步理解自然语言处理之word2vec工具相关算法演进
2,Motivation(动机): Why Learn Word Embeddings?
图像和音频处理系统与作为图像数据的各个原始像素强度的矢量编码,可以提供丰富的高维数据集,或者例如音频数据的功率谱密度系数。对于对象或语音识别这样的任务,我们知道成功执行任务所需的所有信息都被编码在数据中(因为人类可以从原始数据执行这些任务)。
然而,自然语言处理系统传统上把单词当作离散的原子符号来处理,因此’猫’可以被表示为Id537和’狗’,如Id143。这些编码是任意的,并且不提供关于各个符号之间可能存在的关系的系统的有用信息。这意味着,模型在处理有关“狗”的数据(如动物,四足动物,宠物等)时,可以充分利用“猫”的知识。将单词表示为唯一的离散标识还会导致数据的稀疏性,通常意味着我们可能需要更多的数据才能成功地训练统计模型。使用向量表示可以克服一些障碍。
向量空间模型(VSM)表示(嵌入)连续向量空间中的单词,其中语义相似的单词被映射到附近的点(’彼此嵌入在一起’)。 VSM在NLP中有着悠久而丰富的历史,但是所有的方法都依赖于分布假说,即在相同语境中出现的单词共享语义。利用这个原理的不同方法可以分为两类:基于计数的方法(例如潜在语义分析)和预测方法(例如神经概率语言模型) count-based methods (e.g. Latent Semantic Analysis), and predictive methods (e.g. neural probabilistic language models)。
Baroni等人详细阐述了这种区别,但简而言之:
基于计数的方法:计算一个词在一个大文本语料库中与其邻居词共同出现的频率的统计,然后映射这些计数 - 统计到每个单词的小,密集的向量。
预测模型:直接尝试根据学习的小型密集嵌入向量(考虑到模型的参数)来预测来自其邻居的单词。
Word2vec是一个特别有效的计算预测模型,用于从原始文本中学习单词嵌入。它有两种口味,即连续词袋模型(CBOW)和Skip-Gram模型(Mikolov等人的3.1和3.2节)。从算法上来说,这些模型是相似的,除了CBOW从源上下文单词中预测目标单词(例如’mat’)(’cat坐在’上’),而跳跃单词则执行反向并且预测来自目标的源上下文单词话。这种倒置可能看起来像是一种任意的选择,但从统计上来看,它具有CBOW平滑许多分布信息的效果(通过将整个上下文视为一个观察)。大部