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有效果.
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是否有用的标准之一.(另一种是看各种任务效果的提升)
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 V , 词向量维度 , Embedding C C , shape , 通过前 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 映射得到前 个词的词向量 { 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)