2 Distributed Word Representation
2.2 Global Generalization of Distributed Representation
2.3 Distributed Representation: How?
2.3.2 How to make neighbors represent words?
2.3.3 Solution 1:Matrix Factorization
2.1 Representation of Text
我们试图使用 n 维的 连续向量(Dense Vector)来表达某个词的意思,而不是使用离散的向量。
One-Hot 编码只能表示词是否出现过,没有办法捕捉词之间的关联。比如相近的词,我们没有办法通过 One-Hot编码来判断词的意思是否相近。
One-Hot 编码对新词是很难泛化的。比如若出现新词,One-Hot 需要重新编码,增加维度,泛化性能较差。
而使用 Dense Vector 可以解决以上两个问题。
2.2 Global Generalization of Distributed Representation
首先来举个例子,通过这个例子可以很直观的看出分布式表示的优点。
首先我们有以下五个带有颜色的图形,对他们进行 One-Hot 编码,可得到下面几个向量。
如果此时我们添加一个新的蓝色的三角形,这在我们之前的 Vocab 中没有出现过。因此对其我们需要拓展到 6 维。思考下,如何编码才能实现易扩展,同时维度也不那么大呢?
我们可以 分别对颜色和形状进行编码,形成一个二维的向量。
通过这种编码,我们可以 对任意带颜色的形状进行编码。并且可以 衡量两个元素之间的相似性。例如:蓝色的三角形编码为 [1, 3],蓝色的菱形编码为 [1, 4],黄色的五边形 [4, 5],通过距离可以判断相似性。
2.3 Distributed Representation: How?
2.3.1 Word Embedding
前面讲了这么多 Dense Vector 的优点,那么我们怎么做才能将词转换为 Dense Vector,并且很好的表示词的意思呢?
Goal:learn a vector representation for each word w.
Distributional hypothesis (Harris, 1954; Firth, 1957):You shall know a word by the company it keep.
In practice, learn representation to predict well words in context.
即,通过某个词的上下文去表示该词的意思。
2.3.2 How to make neighbors represent words?
我们使用 共现矩阵(cooccurrence matrix) 来表示词的上下文。
我们选择一个窗口大小,然后扫描句子,构建共现矩阵。假设取窗口大小为1,则在每个词前后距离为1的单词在共现矩阵上的对应位置上+1。例如:window_size = 1,扫描到第一句话的 deep,则在(deep, like)对应位置+1,(deep, learning)对应位置+1。
很显然,共现矩阵是一个 n×n 的对称矩阵。第一行代表着那些单词经常出现在 ”I“ 的上下文中,同理。有了这些统计信息,我们就可以在一定程度上使用这些单词的共现信息来表示每个单词的意思。
cooccurrence matrix 的缺点:
-
Increase in size with vocabulary.
-
High dimensional.
-
Sparsity issue.
2.3.3 Solution 1:Matrix Factorization
Idea:Store “most” of the important information in a fixed, small number of dimensions: a dense vector.
即,对向量进行压缩,使其维度减小,同时保留原始向量中的大部分信息。
现有的矩阵压缩工具:SVD
通过矩阵压缩后得到的相近词向量在空间表示上也很相近,很好的表示了词的意思。
但这个问题还是存在一定 缺点:
-
High computational cost for SVD.
-
Hard to incorporate new words or documents.
-
Hard to integrate with other DL models.
-
LSA可以处理向量空间模型无法解决的一义多词 (synonymy) 问题,但不能解决一词多义 (polysemy) 问题。因为 LSA将每一个词映射为潜在语义空间中的一个点,也就是说一个词的多个意思在空间中对于的是同一个点,并没有被区分。
2.3.4 Solution2:Word2Vec
Idea:Predict surrounding words instead of counting surrounding words.
即,不通过统计,而是通过 预测 的方法去建模一个词的意思是由它的上下文表示的。如果一个词能够很好的预测其上下文,那么我们可以认为这个词的词向量一定程度上很好的捕捉了这个词的信息。
下面具体介绍基于预测去捕捉词的意思的方法。
2.4 Word2Vec:Skip-Gram Model
我们使用句子中间的一个词去预测该词的上下文,若能正确预测,则说明我们以及捕捉到该词的意思。
如下例子的第一行所示,我们能够优化的概率就是 P(We | working),P(are | working),P(on | working),以此类推。
我们最终能够 将词向量的学习过程转化为一个最优化问题。我们试图去优化的就是从中心词出发到上下文的条件概率分布。
进一步优化目标函数,如下:
另外,除了 Skip-Gram 以外,还有一个跟他比较相近的方法—CBOW(Continuous Bag-Of-Words)
对比一下 CBOW 和 Skip-Gram:
-
CBOW 是通过上下文来预测中心词,而Skip-Gram 是通过中心词去预测上下文;
-
Skip-Gram的优化目标更难;
-
CBOW对于出现次数比较少的单词,效果不好;
-
数据比较少的情况下Skip-Gram > CBOW
通过 Skip-Gram 得到的 word vectors 具有极其神奇的 线性相似性!比如,apple 和 apples 的表示非常相近,shirt 和 clothing 的表示非常相近,这也是为什么该技术成为爆炸点的原因。
2.5 Summary
总结一下 Counting Based 和 Prediction Based 的优缺点。
Counting Based:
-
Fast training;
-
Efficient usage of statistics;
-
Primarily used to capture word similarity;
-
Disproportionate importance given to large counts.
Prediction Based:
-
Scales with corpus size;
-
Inefficient usage of statistics;
-
Can capture complex patterns beyond word similarity;
-
Generate improved performance on other tasks.
2.6 GloVe
前面介绍了两种 Solution,分别是 LSA 和 Word2vec 。一个是利用了全局特征的矩阵分解方法,一个是利用局部上下文的方法。GloVe模型就是将这两中特征合并到一起的,即使用了语料库的 全局统计(overall statistics)特征,也使用了 局部的上下文特征(即滑动窗口)。为了做到这一点GloVe模型引入了Co-occurrence Probabilities Matrix。
该矩阵的第一个元素指的是在出现 ice 的情况下,出现 solid 的概率,第二个元素为出现 ice 的情况下,出现 gas 的概率,以此类推。由 Co-occurrence Probabilities Matrix 可以看出 p(k|i) / p(k|j) 是有一定规律的。
即是说, Ratio 值能够反应 word 之间的相关性,而 GloVe 模型就是利用了 Ratio 值。
我们想让等号左右两边的式子应该尽可能地接近,因此很容易想到用二者的差方来作为代价函数:
原理推导可参考:理解GloVe模型(Global vectors for word representation)_饺子醋的博客-CSDN博客_glove
实验结果: