理解每个word的意思是自然语言处理的一大核心,那么怎样才能很好的描述word与word之间的 syntactic & semantic similarity 呢? 这里介绍几种主流的 word embedding 方法,即把word映射到维度为d的向量,然后用向量间的cosine距离或内积描述word与word间的句法和语义相似度。
大家一定知道 word2vec,它发表于2013年,由于其在 word analogy, word similarity 等多个 linguistic tasks 上面的 excellent performance,而且它比其余大部分 neural network embedding 方法 (如NNLM,RNN,LSTM)training 时更加的有效,使得它名噪一时。word2vec 最后可以得到一些有趣的线性关系,比如 Beijing – China + France ~= Paris。那么 word2vec 以及后来的 Glove, 相比其它的embedding模型 (如LSA),是否真的有模型上无比的优越性呢?答案是否定的。首先我们来介绍 word embedding 模型。
1. LSA: Latent Semantic Analysis
Singular Value Decomposition (SVD),也就是大家熟知的 latent semantic indexing (LSI), 它成功的应用于 word embedding,基本思想既优美又直观: 给定 word-document 矩阵 Mmxn,每一行代表一个word,每一列代表一个document,M中每个 entry M(i,j) 代表第i个word在第j个document中出现的频率,如果我们用SVD 把矩阵M 分解成:M = UDVT, 每个矩阵UDV的秩为k,其中 k<<m, k<<n, 那么我们就可以使用 W = UD 中的每一行(k维)来作为每个word的embedding vector,W就称为 word embedding matrix。可以很容易的证明:M*MT = W*WT,那么为什么不使用M中的每一行当作embed words 呢? 原因有两个:首先,M中的每一行都是一个高维的向量,务必会带来更多的计算量;其次,一个高维的向量的generalizability, 往往不如低维向量 (arguable)。
那么为什么SVD得到的 embedding vectors 能描述word与word间的 semantic similarity 呢?首先我们强调下:LSI 能(部分)解决 synonym (同义词) 问题, 而不能解决 polysemy (一词多义) 问题。那么它怎样解决同义词问题的呢? 比如 car 和 automobile,为什么它们间的 embedding vector 具有较大的相似度?原因是:如果 car 和 automobile 总是会同时出现在同一个document中,那么它们见的相似度很大(即 car 和 automobile 在 word-document 矩阵中对应的行向量间的correlation 很大,接近1);如果我们考虑下面这种情况:automobile 和 car从来不会同时出现在同一document中, 那么SVD得到的embedding,它们还有相似度吗?没有,因为M矩阵中,automobile 的向量与car的向量是perpendicular的,内积为0,cosine 也为0,因此得到的W矩阵中, automobile 和 car 的embedding vector 同样是垂直的;好了,我们考虑最真实的情形:有些document中只有car, 有些只有 automobile, 而有些同时出现 car & automobile, 这种情况下,M矩阵中automobile 的向量与car的向量就会有affinity,所以embedding后的向量也会相似。
后记:1999年,Thomas Hofmann 提出了 probabilistic latent semantic indexing (pLSI),把M矩阵(word-document矩阵)分解用概率图模型来描述, 即 p(d,w) = Σp(w|t)p(t|d)p(d), 其中t代表了 latent topics。不过值得注意的:通过 maximum likelihood estimation (MLE), 得到了每个topic 下word的distribution p(w|t) 和每个 document 中 topic 的 distribution p(t|d), 并没有得到每个word的一个 vector embedding。pLSI最大的弱点是: 对于一个新的document, 要想得到它的 topic distribution p(t|d),必须要再做一次inference, 使得pLSI的算法复杂度很高。
2. Pointwise mutual information (PMI)
LSI的input是一个 word-document 频率矩阵,PMI的input是一个word-context矩阵。那么 document 和 context 的区别和联系在哪里呢?其实 document 是一种context, 所以PMI的input理论上也可以是 word-document。最常用的context是 L个连续的words (大家可以想象 skip-gram中的context, 它们是一样的概念)。那么PMI用信息论中的mutual information来描述每个word 和 每个context间的association, 即:PMI(w,c) = log{p(w,c)/[p(w)p(c)]},其中p(w,c),p(w) 和 p(c) 分别表示特定的 word-context pair, word, context 在 所有的 word-context pairs 中出现的频率。
给定了一个PMI矩阵,每行就是一个word的embedding, 两个word间的相似度, 就可以通过他们embedding vector 的cosine或内积来算出。
可以知道: PMI 中每个word的vector embedding同样是个非常高维的向量, 因为往往context的个数非常多,而且还是dense的(word-document矩阵中每个word的 embedding vector 是sparse的,因为每个word并不是在每个document中都会出现),不仅如此,它还是ill-defined, 因为会有 -∞出现。那么实际中怎么使用PMI矩阵呢? 实际中, 我们使用 PPMI metric来描述 word-context见的association, 即 PPMI(w,c) = max(PMI(w,c), 0),PPMI embedded vector 在实际中能较好的描述word间的相似度。
后记: 使用PPMI 的行向量来描述word, 同样是个高维的embedding vector, 我们可以把PPMI当作LSI的input, 使用SVD来得到word的K维空间中的embedding。
3. skip-gram
Skip-gram 在2013年由 Mikolov, Sutskever and Chen 提出,用于找到word embeddings that are useful for predicting surrounding words。skip-gram的目标函数是 最大化log probabilities, 最后可以得到每个word的embedding。2014 年, levy & Goldberg 证明了skip-gram word embedding模型等价于分解 shifted positive PMI word-context 矩阵,即: shifted PPMI = W*C, 其中W矩阵的每行就是每个word的embedded vector。
我们上面提到: SVD 也可以对PPMI矩阵分解,即: PPMI = UDV’,其中 W = UD矩阵的每一行是一个word的embedding vector。既然, skip-gram 和 SVD 都是对同一个矩阵分解,那么 为什么一般情况下, skip-gram 在 word analogy, word similarities 等等tasks上的performance 会好于 SVD呢? skip-gram分解的过程是symmetric的,即: W,C 都是任意矩阵, 它们不正交,而SVD得到的U,V矩阵是正交的,而且SVD得到的word embedding 是 UD, context embedding 是v, 这也是一种non-symmetric 的表征; 还有很多原因影响到了skip-gram 和 SVD在实际中不同的performance, 比如 context distribution smoothing, dynamic context window 等等, 具体参照 Levy et al. 2015的文章: Improving distributional similarity with lessons learned from word embeddings.
我们这里描述了3中常见的、流行的word embedding 方法, 其中PPMI是直接用 word-context 矩阵的每行 描述每个word的embedding, 而 LSI (SVD) 和 skip-gram是对PPMI矩阵的分解,然后用低维空间中的向量来描述每个word。这三者的关系犹豫:用原始的向量描述每个点,还是用PCA降维后的低维向量来描述每个点。总之,PPMI,LSI & skip-gram是基于相同的input 矩阵的,不同的是它们的优化方法。那么我们可想而知,一种embedding 方式会明显好于其它的吗?其余的吗? 答案是否定的,之所以skip-gram一般情况下会有好与其余方式的结果, 正是因为skip-gram优化过程中用了很多hyper-parameters, 它的好的performance不用来自模型本身(因为它实质也是矩阵分解),而是hyper-parameter tuning的结果。具体参照 Levy et al. 2015的文章: Improving distributional similarity with lessons learned from word embeddings.
转载DeepLearning中文论坛公众号