怎么表示词的意思?
传统的想法有查字典. 近义词,缺点:主观,费人力, 难记算相似性
one-hot 缺点:维度灾难,正交,无法计算similarity.
那么,通过借鉴近义词,学习将similarity编码到词向量中去.
n-gram language model见我之前写的csdn Blog:
1. BOW
2. TF-IDF
BOW, TF-IDF这类n-gram表示,在文本分类还是挺有用的,利用统计学的优势.
其对词意的表示还是以one-hot encoding的形式,稀疏向量, 任意两向量都是正交的,点乘为0, 没有相似性的一个自然的表达.
key: A word’s meaning is given by the words that
frequently appear close-by
“You shall know a word by the company it keeps” (J. R. Firth 1957: 11)
为解决以上问题,可以借鉴查字典的方法去计算相似性,通过向量本身编码相似性.
embedding 和 encoding 意思一样就是用一个dense vector 去表示词的特征.可以想象将这个词嵌入到高维空间的一个点. 本质上就是映射,将原空间的词映射到另一空间的高维向量, 这样的表示也叫word representation. 同理, image embedding也是这么理解的.
对一个corpus,假设有10k个词,词向量特征维度是300, embedding就是一个10k*300 的密集矩阵
通过学习获得的word embedding可以捕捉语义和语法规律 Mikolov et al 2013. 可以帮助理解为什么word embedding有效果.
eman−ewoman≈eking−equeen e m a n − e w o m a n ≈ e k i n g − e q u e e n
eapple−eapples≈ecar−ecars e a p p l e − e a p p l e s ≈ e c a r − e c a r s
这种语义语法的相似性使word embedding具有很好的泛化性:
- The cat is walking in the bedroom
- A dog was running in a room
- The cat is running in a room
- A dog is walking in a bedroom
- The dog was walking in the room
这种相似性也是检验word embedding是否有用的标准之一.(另一种是看各种任务效果的提升)
实际上通过训练模型学习word embedding的方法非常悠久. 像众多问题一样,模型的演化是从复杂到简单,人们发现用一个看起来非常简单的模型,在corpus数据量巨大的情况下进行训练依然能得到效果非常不错的word embedding.
13年word2vec的目标其实是提出针对数据量达到特别大,十亿级的文本库,百万级的单词的corpus,高效的学习word embedding. 论文的核心也是围绕各种模型的复杂度进行比较的,衡量模型复杂度的是模型的参数数量.
key: A word’s meaning is given by the words that
frequently appear close-by
“You shall know a word by the company it keeps” (J. R. Firth 1957: 11)
这里再提一下一下模型的核心思想.
03年Bengio提出的learning a distributed representation by words的模型.
词数量 V V , 词向量维度 m m , Embedding C C , shape (V×m) ( V × m ) , 通过前 n−1 n − 1 个词来预测第n个词的likelihood.
输入: {wt−n−1,...,wt−2,wt−1} { w t − n − 1 , . . . , w t − 2 , w t − 1 } , 以通过 C C 映射得到前 n n 个词的词向量 {C(wt−n+1),...,C(wt−2),C(wt−1)} { C ( w t − n + 1 ) , . . . , C ( w t − 2 ) , C ( w t − 1 ) } , 输入就是将这n个词向量合并的向量, 长度为 (n−1)×m ( n − 1 ) × m . 这样理解,每个词以one-hot表示输入,经过Embedding layer,一个没有激活函数的隐藏层,得到特征向量.
经过只有一个隐藏层(#hidden units = h)的神经网络,隐藏层 W(h×(n−1)m) W ( h × ( n − 1 ) m ) ,然后经过一个tanh激活函数, 进入输出层 H(V×h) H ( V × h ) .
输出: 一个长度为 V V 的向量 y^(y^1,y^2,...,y^i,...y^V) y ^ ( y ^ 1 , y ^ 2 , . . . , y ^ i , . . . y ^ V ) ,计算softmax.相当对词库V中每一个词i计算出现的可能性
目标函数:
模型复杂度: 对每个训练样本 word embedding有 n×m n × m 个参数, 中间隐藏层有 h×nm h × n m 个参数,输出层有 V×h V × h 个参数.
其中占大头的是 V×h V × h , 但是通过hierarchical softmax,这一part要考虑的参数可以减少到 log(V) l o g ( V ) .这下子模型参数的大头变成了 h×nm h × n m .也就是隐藏层.
我并没有深入看这一part, 但网上的有个blog不错.
RNNLM的模型复杂度: Q=h×h+V×h Q = h × h + V × h .
同样通过hierarchical softmax, V×h V × h 可以被减小到 log(V)×h l o g ( V ) × h . 大多数复杂度来自RNNLM的隐藏层 h×h h × h .
既然NNLM的复杂度主要来自隐藏层,word2vec提出了接下来的两个模型,既能和NNLM一样准确的表达词义,又能再更大的数据集上更高效的训练.
两个模型的核心思想和NNLM是一样的,再次强调
“You shall know a word by the company it keeps” (J. R. Firth 1957: 11)
非常奇怪的是网上的各种课程,blogs都是先从skip-gram模型开始介绍word2vec(可能SG效果更好,更高效?),甚至不提CBOW模型, 但是从模型相似程度和理解的角度, CBOW和NNLM更像, 所以我也先说CBOW.
CBOW和feedforward NNLM非常相似, 只是将中间的隐藏层除去了,同时,用来预测object word的context word的词向量不再合并, 而是求平均
然后直接到输出层 H(V×h) H ( V × h ) , 得到V维向量,softmax. 后面的目标函数,反向传播,更新参数和NNLM如出一辙.
OK, 将隐藏层丢掉之后, 模型复杂度:
首先,为什么叫skip-gram,因为n-gram是根据n个相邻的词进行学习的模型,skip的idea相当于是从中心词上下文的一个window中选择一个或n个词,增加了随机性,所以叫skip.
SG相当于CBOW的逆过程. 通过中心词预测上下文. 一个中心词 c c , n个上下文词 o o . 论文中,window大小为10, 随机一个1到10的数r, 就会在中心词左边和右边分别选r个词作为上下文词target word.
每次输入只有一个词的one-hot编码, 得到词向量 vc v c 后, 直接进入输出层.
**这里我看了很多blog对输出层结构的解释都有些不同,不得不去看Mikolov另一篇论文(Distributed Representations of Words and Phrases
and their Compositionality)**
输出层的参数,还是一个Embedding 矩阵 C′ C ′ ,shape V×m V × m , 针对每个target word o o , softmax公式计算
中心词c的词向量 vc v c 和Embedding 矩阵 C′ C ′ 中的每一个词向量 v′w v w ′ 做点乘求和计算. 以此预计在给定中心词的条件下,预测出附近词的概率. 目标当然是要这个概率最大,所以要minimize目标函数
训练得到了两个Embedding C C 和 C′ C ′ , 取平均就行.
SG的模型复杂度
*同时在Distributed Representations of Words and Phrases
and their Compositionality中提到了hierarchical softmax 和 negative sampling这两种简化softmax计算的方法,由于时间有限,留个坑*
最后再来说一下论文提到的检验Embedding的方法,前人一般会观察和理解两个相似的词向量比如France和Italy,列一些表什么的.
而Mikolov又用了他在另一篇自己的论文Linguistic Regularitics in Continuous Space Word Representaions上用的方式,也就是上面提到过的
eman−ewoman≈eking−equeen e m a n − e w o m a n ≈ e k i n g − e q u e e n
eapple−eapples≈ecar−ecars e a p p l e − e a p p l e s ≈ e c a r − e c a r s
怎么发现这种关系的呢,以 eman−ewoman≈eking−equeen e m a n − e w o m a n ≈ e k i n g − e q u e e n 为例, 只要找到一个词的词向量 ew e w 和 eking−equeen+ewoman e k i n g − e q u e e n + e w o m a n 最接近就行, 可以用余弦相似性:
所以理想情况下, w会是man.