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?

  1. 泛化性更强
  2. 在多种任务中效果更好, 如文本生成, 名词实体识别, sentiment analysis, text summarization, co-reference resolution, parsing等.
  3. 迁移学习

similarity:intuition

通过学习获得的word embedding可以捕捉语义和语法规律 Mikolov et al 2013. 可以帮助理解为什么word embedding有效果.

emanewomanekingequeen
eappleeapplesecarecars

这种语义语法的相似性使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

词数量V, 词向量维度m, Embedding C, shape (V×m), 通过前n1个词来预测第n个词的likelihood.

输入: {wtn1,...,wt2,wt1}, 以通过C映射得到前n个词的词向量{C(wtn+1),...,C(wt2),C(wt1)}, 输入就是将这n个词向量合并的向量, 长度为(n1)×m. 这样理解,每个词以one-hot表示输入,经过Embedding layer,一个没有**函数的隐藏层,得到特征向量.

经过只有一个隐藏层(#hidden units = h)的神经网络,隐藏层W(h×(n1)m),然后经过一个tanh**函数, 进入输出层H(V×h).

输出: 一个长度为V的向量y^(y^1,y^2,...,y^i,...y^V),计算softmax.相当对词库V中每一个词i计算出现的可能性

p^(wt=i|context)=eyijVeyj

模型要最大化p^(targetword|context).

目标函数:

J(θ)=1TtTlogf(wt,wt1,...,wtn+1;θ)+R(θ)

T是一段文本,对每个位置t,对其的预测计算likelihood, 反向传播minimize J(θ), R(θ)是正则化. θ是模型参数,**包括**embedding层C.

模型复杂度: 对每个训练样本 word embedding有n×m个参数, 中间隐藏层有h×nm个参数,输出层有V×h个参数.

Q=n×m+h×nm+V×h

其中占大头的是V×h, 但是通过hierarchical softmax,这一part要考虑的参数可以减少到log(V).这下子模型参数的大头变成了h×nm.也就是隐藏层.

word2vec: 理解nnlm, cbow, skip-gram

2.1.2 Recurrent NNLM

我并没有深入看这一part, 但网上的有个blog不错.

RNNLM的模型复杂度: Q=h×h+V×h.

同样通过hierarchical softmax, V×h可以被减小到log(V)×h. 大多数复杂度来自RNNLM的隐藏层h×h.

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的词向量不再合并, 而是求平均

1nCi=1nwi

reminder: n个上下文词, CBOW使用的是目标词前4个词和后4个词,相比NNLM更考虑了上下文. C是embedding矩阵, wi是one-hot编码, 结果出来是一个m维的词向量. 值得一提, 实现的时候应该不是将one-hot加起来之后进行矩阵-向量乘法, 这样太费时了, 应该是直接对词向量取平均吧

然后直接到输出层H(V×h), 得到V维向量,softmax. 后面的目标函数,反向传播,更新参数和NNLM如出一辙.

OK, 将隐藏层丢掉之后, 模型复杂度:

Q=n×m+log(V)×h

这里直接考虑用了hierarchical softmax的方法,所以是log(V).

word2vec: 理解nnlm, cbow, skip-gram

2.2.2 Skip-gram

首先,为什么叫skip-gram,因为n-gram是根据n个相邻的词进行学习的模型,skip的idea相当于是从中心词上下文的一个window中选择一个或n个词,增加了随机性,所以叫skip.

SG相当于CBOW的逆过程. 通过中心词预测上下文. 一个中心词c, n个上下文词o. 论文中,window大小为10, 随机一个1到10的数r, 就会在中心词左边和右边分别选r个词作为上下文词target word.

每次输入只有一个词的one-hot编码, 得到词向量vc后, 直接进入输出层.
**这里我看了很多blog对输出层结构的解释都有些不同,不得不去看Mikolov另一篇论文(Distributed Representations of Words and Phrases
and their Compositionality)**

输出层的参数,还是一个Embedding 矩阵C,shape V×m, 针对每个target word o, softmax公式计算

p(wo|wc)=evoTvcwVevwTvc

中心词c的词向量vc和Embedding 矩阵C中的每一个词向量vw 做点乘求和计算. 以此预计在给定中心词的条件下,预测出附近词的概率. 目标当然是要这个概率最大,所以要minimize目标函数

J(θ)=1Tt=1Trjr,j0logp(wo+j|wc)

训练得到了两个Embedding CC, 取平均就行.

SG的模型复杂度

Q=n×(m+m×log(V))

n决定要预测几个附件的词, 因为输入只有一个词, 就是m个参数, 加上通过hierarchical softmax 和 negative sampling 的简化的输出层参数使得V变成log(V).

*同时在Distributed Representations of Words and Phrases
and their Compositionality中提到了hierarchical softmax 和 negative sampling这两种简化softmax计算的方法,由于时间有限,留个坑*

result

最后再来说一下论文提到的检验Embedding的方法,前人一般会观察和理解两个相似的词向量比如FranceItaly,列一些表什么的.

而Mikolov又用了他在另一篇自己的论文Linguistic Regularitics in Continuous Space Word Representaions上用的方式,也就是上面提到过的

emanewomanekingequeen
eappleeapplesecarecars

怎么发现这种关系的呢,以emanewomanekingequeen为例, 只要找到一个词的词向量ewekingequeen+ewoman最接近就行, 可以用余弦相似性:

augmaxwVCos(ew,ekingequeen+ewoman)

所以理想情况下, w会是man.

参考

  1. Skip-gram
  2. Skip-gram原论文
  3. cs224n
  4. CBOW
  5. deeplearning.ai
  6. 花书12.4
  7. 知乎
  8. nnlm1
  9. nnlm2

相关文章:

  • 2021-11-02
  • 2021-06-07
  • 2022-01-05
  • 2022-01-24
  • 2021-08-09
猜你喜欢
  • 2021-05-02
  • 2021-09-07
  • 2021-09-20
  • 2021-04-13
  • 2021-12-14
相关资源
相似解决方案