word2vec 论文笔记
1 word rep
怎么表示词的意思?
传统的想法有查字典. 近义词,缺点:主观,费人力, 难记算相似性
one-hot 缺点:维度灾难,正交,无法计算similarity.
那么,通过借鉴近义词,学习将similarity编码到词向量中去.
1.1 one-hot
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)
为解决以上问题,可以借鉴查字典的方法去计算相似性,通过向量本身编码相似性.
1.2 embedding
why called embedding?
embedding 和 encoding 意思一样就是用一个dense vector 去表示词的特征.可以想象将这个词嵌入到高维空间的一个点. 本质上就是映射,将原空间的词映射到另一空间的高维向量, 这样的表示也叫word representation. 同理, image embedding也是这么理解的.
对一个corpus,假设有10k个词,词向量特征维度是300, embedding就是一个10k*300 的密集矩阵
why better than one-hot?
- 泛化性更强
- 在多种任务中效果更好, 如文本生成, 名词实体识别, sentiment analysis, text summarization, co-reference resolution, parsing等.
- 迁移学习
similarity:intuition
通过学习获得的word embedding可以捕捉语义和语法规律 Mikolov et al 2013. 可以帮助理解为什么word embedding有效果.
这种语义语法的相似性使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是否有用的标准之一.(另一种是看各种任务效果的提升)
2 模型
实际上通过训练模型学习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)
这里再提一下一下模型的核心思想.
2.1 A Neural Probabilistic Language Model
03年Bengio提出的learning a distributed representation by words的模型.
2.1.1 Feedforward Neural Net Language Model
词数量 , 词向量维度 , Embedding , shape , 通过前 个词来预测第n个词的likelihood.
输入: , 以通过 映射得到前 个词的词向量 , 输入就是将这n个词向量合并的向量, 长度为 . 这样理解,每个词以one-hot表示输入,经过Embedding layer,一个没有激活函数的隐藏层,得到特征向量.
经过只有一个隐藏层(#hidden units = h)的神经网络,隐藏层 ,然后经过一个tanh激活函数, 进入输出层 .
输出: 一个长度为
的向量
,计算softmax.相当对词库V中每一个词i计算出现的可能性
模型要最大化 .
目标函数:
是一段文本,对每个位置t,对其的预测计算likelihood, 反向传播minimize , 是正则化. 是模型参数,**包括**embedding层 .
模型复杂度: 对每个训练样本 word embedding有 个参数, 中间隐藏层有 个参数,输出层有 个参数.
其中占大头的是 , 但是通过hierarchical softmax,这一part要考虑的参数可以减少到 .这下子模型参数的大头变成了 .也就是隐藏层.
2.1.2 Recurrent NNLM
我并没有深入看这一part, 但网上的有个blog不错.
RNNLM的模型复杂度: .
同样通过hierarchical softmax, 可以被减小到 . 大多数复杂度来自RNNLM的隐藏层 .
2.2 word2vec
既然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.
2.2.1 CBOW
CBOW和feedforward NNLM非常相似, 只是将中间的隐藏层除去了,同时,用来预测object word的context word的词向量不再合并, 而是求平均
reminder: n个上下文词, CBOW使用的是目标词前4个词和后4个词,相比NNLM更考虑了上下文. 是embedding矩阵, 是one-hot编码, 结果出来是一个m维的词向量. 值得一提, 实现的时候应该不是将one-hot加起来之后进行矩阵-向量乘法, 这样太费时了, 应该是直接对词向量取平均吧
然后直接到输出层 , 得到V维向量,softmax. 后面的目标函数,反向传播,更新参数和NNLM如出一辙.
OK, 将隐藏层丢掉之后, 模型复杂度:
这里直接考虑用了hierarchical softmax的方法,所以是 .
2.2.2 Skip-gram
首先,为什么叫skip-gram,因为n-gram是根据n个相邻的词进行学习的模型,skip的idea相当于是从中心词上下文的一个window中选择一个或n个词,增加了随机性,所以叫skip.
SG相当于CBOW的逆过程. 通过中心词预测上下文. 一个中心词 , n个上下文词 . 论文中,window大小为10, 随机一个1到10的数r, 就会在中心词左边和右边分别选r个词作为上下文词target word.
每次输入只有一个词的one-hot编码, 得到词向量
后, 直接进入输出层.
**这里我看了很多blog对输出层结构的解释都有些不同,不得不去看Mikolov另一篇论文(Distributed Representations of Words and Phrases
and their Compositionality)**
输出层的参数,还是一个Embedding 矩阵
,shape
, 针对每个target word
, softmax公式计算
中心词c的词向量
和Embedding 矩阵
中的每一个词向量
做点乘求和计算. 以此预计在给定中心词的条件下,预测出附近词的概率. 目标当然是要这个概率最大,所以要minimize目标函数
训练得到了两个Embedding 和 , 取平均就行.
SG的模型复杂度
n决定要预测几个附件的词, 因为输入只有一个词, 就是m个参数, 加上通过hierarchical softmax 和 negative sampling 的简化的输出层参数使得 变成 .
*同时在Distributed Representations of Words and Phrases
and their Compositionality中提到了hierarchical softmax 和 negative sampling这两种简化softmax计算的方法,由于时间有限,留个坑*
result
最后再来说一下论文提到的检验Embedding的方法,前人一般会观察和理解两个相似的词向量比如France和Italy,列一些表什么的.
而Mikolov又用了他在另一篇自己的论文Linguistic Regularitics in Continuous Space Word Representaions上用的方式,也就是上面提到过的
怎么发现这种关系的呢,以
为例, 只要找到一个词的词向量
和
最接近就行, 可以用余弦相似性:
所以理想情况下, w会是man.