CS224n 深度自然语言处理(一) - Language Model and Word2Vec
单词的含义
如何定义一个单词的意思?通过韦伯字典对于单词”meaning"的解释来看,有如下几点
- 单词或者短语呈现的意思。
- 人想要通过短语、符号表达的实际含义。
- 文章、艺术作品呈现的想法。
故最普通对meaning的理解,其实是表示符号(symbol)向想法(idea)的转换。
如何在计算机中计算语义。可以使用,wordnet,一个包含同义词集合和词间关系的词库。
但是WordNet仍有缺点,如下
- 缺少语境信息。如"proficient"被列为"good"的同义词,但这其实只在特定语境情况下满足。
- 缺少新派生的单词,不可能一直保持更新。
- 有一定偏见性。
- 需要人来进行适配。
- 不能精确的计算词语的相似性。
在传统的NLP中,我们把单词看作为离散的变量,如hotel, conference, motel这三个词使用one-hot(独热)均做局部表示,
但是这种表示方法,有很大的缺点,对于任意两个单词,他们之间是正交的,即没有办法计算任意两个单词之间的相似度。
分布式语义表示
一个单词的语义由其经常出现的周围的单词表示。对与一个单词w,他的上下文是固定大小的窗口附近的单词,并且使用这个窗口内的单词来表示中心词w.
之后,我们将会为每一个单词构建一个稠密向量,以便出现在相似上下文中的单词向量也相似。通常这个word vector被叫做word embedding(单词嵌入)或者word representations(单词表示)。他们都是分布式表示。
Word2vec
Word2vec的基本思想
Word2vec是一个学习单词向量的框架,其基本思想如下:
- 已经拥有包含大量文本的语料库。
- 在固定单词表中的每一个单词都将被表示为向量形式。
- 遍历文本的每一个位置,每遍历一个位置,将其分为中心词和上下文词。(使用滑动窗口,滑动窗口中心为中心词,其余词作为上下文词)
- 使用中心词和上下文词的词向量相似度来计算已知出现的概率,即(反过来也可以)。
- 随着遍历位置的变化,不断调整词向量,使得条件概率最大化。
Word2vec的目标函数
对于一个位置,使用长度固定为的滑动窗口,在已知中心词的情况下预测上下文。
其中是所有待优化变量。上式即,对于每一个中心词,求出对每一个上下文词的条件概率,做乘积做似然函数。由于连乘积很容易太小,这样导致求解不易,通常取处理;另外一般对目标函数求最小,故求负;最后对求平均,即将损失均摊到每一个位置上,可得:
那么问题转换成,如何求解?
对于每个单词,令表示一个中心词的向量表示,表示一个上下文词的向量表示。那么对于一个中心词和一个滑动窗口内的上下文单词,
其中表示语料库中所有的词;向量的点积用于衡量向量间的相似度(物理含义为向量投影);函数作为映射函数,将实数范围映射为正数,同时保证映射的大小关系;最后分母做归一化。
更准确说,这种求出概率的方式称为,其把任意值映射为概率分布,一般写作:
称为的原因为,其保证了最大的仍然最大且放大了其概率值;同时减小了其他值的概率值。
Word2vec的训练
我们使用梯度下降方法调整参数,使得目标函数不断下降到最小。表示所有的模型参数,表示每个单词的向量维度长度,是一个超参数,在训练前手动指定。每个单词有两个向量,因为有一个作为,一个作为(一个作为中心词的表示,一个作为上下文单词的表示)。
通过计算概率公式,也就是上面的可以得出在已知中心词的情况下,各个词(语料库中所有词)作为上下文单词的概率,但是我们窗口大小是(包括中心词在内),即找到最大的的概率所对应的词向量,与输入已知的ground truth(也就是上下文单词对应的)做交叉熵,作为单次迭代的损失,反向传播训练。
最后得到的各个单词的单词向量,即为每个单词的。
Word2vec的形式
Word2vec有两种形式,一种是输入中心词,预测周围上下文词,称为Skip-gram。另外一种是输入上下文词,预测中心词,称为Continue Bag Of Word(CBOW)。两种方法的核心思想是如出一辙的。