上一篇文章Lecture 1: Introduction and Word Vectors笔记,主要介绍Word2Vec模型,它是一种基于上下文窗口的预测模型,但对于学习word vector,还有另一类模型是,这篇文章主要讲解此模型以及Manning教授组结合两者优点提出的GloVe模型。
到目前为止,我们研究两类词嵌入方法:
- 第一类是基于统计并且依赖矩阵分解(例如LSA,HAL),有效地利用了**全局的信息**,它们主要用于捕获单词的**相似性**,但是对例如单词类比的任务上表现不好
- 另一类方法是基于浅层窗口(例如,Skip-Gram 和 CBOW 模型),通过在局部上下文窗口通过预测来学习词向量,除了在单词相似性任务上表现良好外,还展示了捕获**复杂语言模式**能力,但未能利用到全局共现统计数据。
1、Glove算法
相比之下,GloVe 是利用全局统计量,以最小二乘为目标,预测单词j出现在单词i上下文中的概率。基于全局word-word共现计数进行训练,从而有效地利用全局统计数据。模型生成了包含有意义的子结构的单词向量空间,在词类比任务上表现非常出色。
X 表示 word-word 共现矩阵,其中
先定义一些符号:对于矩阵
计算这个矩阵需要遍历一次整个语料库获得统计信息。对庞大的语料库,这样的遍历会产生非常大的计算量,但是这只是一次性的前期投入成本,还是值得的。
Encoding meaning in vector differences【将两个流派的想法结合起来,在神经网络中使用计数矩阵】
关键思想:共现概率的比值可以对meaning component进行编码
如何利用co-occurrence probability来表示词汇含义:
重点不是单一的概率大小,重点是他们之间的比值,其中蕴含着meaning component。
例如我们想区分热力学上两种不同状态ice冰与蒸汽steam,它们之间的关系可通过与不同的单词的co-occurrence probability 的比值来描述,例如对于solid固态,虽然与本身很小,不能透露有效的信息,但是它们的比值却较大,因为solid更常用来描述ice的状态而不是steam的状态,所以在ice的上下文中出现几率较大,对于gas则恰恰相反,而对于water这种描述ice与steam均可或者fashion这种与两者都没什么联系的单词,则比值接近于1。所以相较于单纯的co-occurrence probability,实际上co-occurrence probability的相对比值更有意义。
我们如何在词向量空间中以线性meaning component的形式捕获共现概率的比值?
log-bilinear 模型 :
向量差异 :
回想一下 Skip-Gram 模型,我们使用 softmax 来计算词
训练时以在线随机的方式进行,但是隐含的全局交叉熵损失可以如下计算:
同样的单词i和j可能在语料库中出现多次,因此首先将i和j相同的值组合起来更有效:
其中,共现频率的值是通过共现矩阵XX给定。
交叉熵损失的一个显着缺点是要求分布
其中
另外一个问题是权值因子
总结一下:
- 如果使向量点积等于共现概率的对数,那么向量差异变成了共现概率的比率
- 使用平方误差促使点积尽可能得接近共现概率的对数
- 使用
对常见单词进行限制
优点
- 训练快速
- 可以扩展到大型语料库
- 即使是小语料库和小向量,性能也很好
2、Evaluation of Word Vectors
与NLP的一般评估相关:内在与外在
- 内在
- 对特定/中间子任务进行评估
- 计算速度快,计算性能好
- 有助于理解这个系统
- 不清楚是否真的有用,除非与实际任务建立了相关性
- 外在
- 对真实任务的评估
- 计算精确度可能需要很长时间
- 不清楚子系统是问题所在,是交互问题,还是其他子系统
- 如果用另一个子系统替换一个子系统可以提高精确度
2.1 内在评估
内部评估通常应该返回给我们一个数值,来表示这些词向量在评估子任务上的表现。
2.2.1 Word Vector Analogies
一个比较常用的内部评估的方法是词向量的类比。在词向量类比中,给定以下形式的不完整类比:
然后内部评估系统计算词向量的最大余弦相似度:
这个指标有直观的解释。理想的情况下,我们希望
man:woman :: king:?
抛出问题:如果有信息但不是线性的怎么办?
PS:使用诸如词向量类比的内部评估技术应该小心处理(要考虑到预训练的语料库的各个方面)
例如,考虑以下的类比形式:
City1:State containing City1::City2:State containing City2
上图是可能在不同时间点有不同首都的国家的**语义**词向量类比(内在评估)。上面很多的例子,这个任务中生成的城市仅仅是近期的国家首都,可能会受到不同国家在不同时间点拥有不同首都的影响。例如,1997 年之前 Kazakhstan 的首都是 Almaty。因此,如果我们的语料库过时就会出现问题。
之前的两个例子说明如何使用词向量进行语义测试。我们也可以使用词向量类似进行**语法**测试。下面是测试形容词最高级概念的句法词向量类比(内在评价),如下图所示:
类似地,下图的内部评估展示了测试词向量捕获过去时态概念的能力
2.1.2 Analogy Evaluations
首先来看看在类比评估任务中,在相同的超参数下,由不同方法创建的词向量表现效果:
根据上表,我们可以看到 3 点:
模型的表现高度依赖模型所使用的词向量的模型:
-
- 这点是可以预料到的,因为不同的生成词向量方法是基于不同的**特性**的(例如共现计数,奇异向量等等)。
语料库更大模型的表现更好:
-
- 这是因为模型训练的语料越大,模型的表现就会更好。例如,如果训练的时候没有包含测试的词语,那么词类比会产生错误的结果。
对于极高或者极低维度的词向量,模型的表现较差:
-
- 低维度的词向量不能捕获在语料库中不同词语的意义。这可以被看作是我们的模型复杂度太低的高偏差问题。例如,我们考虑单词“king”、“queen”、“man”、“woman”。直观上,我们需要使用例如“性别”和“领导”两个维度来将它们编码成 2 字节的词向量。维度较低的词向量不会捕获四个单词之间的语义差异,而过高的维度的可能捕获语料库中无助于泛化的噪声-即所谓的高方差问题。
注:GloVe 中使用中心词左右的窗口大小为 8 时模型表现较好。
下图可以看到训练时间对模型表现的影响
下图可以看到增加语料库规模对模型准确度的影响
下图可以看到不同超参数对 GloVe 模型准确度的影响
超高维向量:
直观地说,这些向量似乎会在语料库中捕获不允许泛化的噪声,即导致高方差。
但是Yin等人在On the Dimensionality of Word Embedding上表明,skip-gram 和 Glove 对这种过拟合具有鲁棒性。
2.1.3 Correlation Evaluation
两个相似度的词人工打分(例如 0-10),然后将其与对应向量的余弦相似度进行对比。这已经在包含人为评估的各种数据集上尝试过。
下图是使用不同的词嵌入技术与不同的人类判断数据集的词向量相似性之间的相关性
2.1.4 Dealing With Ambiguity
我们想知道如何处理在不同的自然语言处理使用场景下,用不同的的词向量来捕获同一个单词在不同场景下的不同用法。例如,“run”是一个名词也是一个动词,在不同的语境中它的词性也会不同。论文 Improving Word Representations Via Global Context And Multiple Word Prototypes 提出上述问题的的解决方法。该方法的本质如下:
- 收集所有出现的单词的固定大小的上下文窗口(例如前 5 个和后 5 个)。
- 每个上下文使用上下文词向量的加权平均值来表示(使用idf加权)。
- 用
spherical k-means
对这些上下文表示进行聚类。 - 最后,每个单词的出现都重新标签为其相关联的类,同时对这个类,来训练对应的词向量。
要对这个问题进行更严谨的处理,可以参考原文。
将常用词的所有上下文进行聚类,通过该词得到一些清晰的簇,从而将这个常用词分解为多个单词,例如bank_1, bank_2, bank_3
虽然这很粗糙,并且有时场景之间的划分也不是很明确甚至相互重叠
2.2 外在评估
单词向量的外部评估:词向量可以应用于NLP的很多任务
2.2.1 Problem Formulation
很多 NLP 的外部任务都可以表述为分类任务。
例如,给定一个句子,我们可以对这个句子做情感分类,判断其情感类别为正面,负面还是中性。相似地,在命名实体识别(NER),给定一个上下文和一个中心词,我们想将中心词分类为许多类别之一。对输入,“Jim bought 300 shares of Acme Corp. in 2006”,我们希望有这样的一个分类结果:
对这类问题,我们一般有以下形式的训练集:
其中