koocn

导航

CS224n笔记2 词的向量表示:word2vec

本文转自:http://www.hankcs.com/nlp/word-vector-representations-word2vec.html

如何表示一个词语的意思

  先来看看如何定义“意思”的意思,英文中meaning代表人或文字想要表达的idea。这是个递归的定义,估计查询idea词典会用meaning去解释它。2017-06-07_15-24-56.png

  中文中“意思”的意思更加有意思:

他说:“她这个人真有意思(funny)。”她说:“他这个人怪有意思的(funny)。”于是人们以为他们有了意思(wish),并让他向她意思意思(express)。他火了:“我根本没有那个意思(thought)!”她也生气了:“你们这么说是什么意思(intention)?”事后有人说:“真有意思(funny)。”也有人说:“真没意思(nonsense)”。(原文见《生活报》1994.11.13.第六版)[吴尉天,1999]

——《统计自然语言处理》

  语言学中“meaning”近似于“指代、所指、符号”。

计算机如何处理词语的意思

  过去几个世纪里一直用的是分类词典。计算语言学中常见的方式是WordNet那样的词库。比如NLTK中可以通过WordNet查询熊猫的hypernyms (is-a,上位词),得到“食肉动物”“动物”之类的上位词。也可以查询“good”的同义词——“just品格好”“ripe熟了”。

discrete representation的问题

  • 这种discrete representation虽然是种语言学资源,但丢失了韵味。比如这些同义词的意思实际上还是有微妙的差别:adept, expert, good, practiced, proficient, skillful

  • 缺少新词

  • 主观化

  • 需要耗费大量人力去整理

  • 无法计算准确的词语相似度

  无论是规则学派,还是统计学派,绝大多数NLP学家都将词语作为最小单位。事实上,词语只是词表长度的one-hot向量,这是一种localist representation(大概是借用localist“局部”的意项)。

  在不同的语料中,词表大小不同。Google的1TB语料词汇量是1300万,这个向量的确太长了。

从symbolic representations到distributed representations

  词语在符号表示上体现不出意义的相似性,比如Dell notebook battery size和Dell laptop battery capacity。而one-hot向量是正交的,无法通过任何运算得到相似度。

  

hankcs.com 2017-06-07 上午10.58.24.png

  需要找到一种用向量直接编码含义的方法。

Distributional similarity based representations

  语言学家J. R. Firth提出,通过一个单词的上下文可以得到它的意思。J. R. Firth甚至建议,如果你能把单词放到正确的上下文中去,才说明你掌握了它的意义。

  这是现代统计自然语言处理最成功的思想之一:

hankcs.com 2017-06-07 上午11.04.07.png

  

通过向量定义词语的含义

  通过调整一个单词及其上下文单词的向量,使得根据两个向量可以推测两个词语的相似度;或根据向量可以预测词语的上下文。这种手法也是递归的,根据向量来调整向量,与词典中意项的定义相似。

  另外,distributed representations与symbolic representations(localist representation、one-hot representation)相对;discrete representation则与后者及denotation的意思相似。切不可搞混distributed和discrete这两个单词。

学习神经网络word embeddings的基本思路

  定义一个以预测某个单词的上下文的模型:p(context|wt)=

  损失函数定义如下:J=1p(wt|wt)

  这里的wtw−t表示wtwt的上下文(负号通常表示除了某某之外),如果完美预测,损失函数为零。

  然后在一个大型语料库中的不同位置得到训练实例,调整词向量,最小化损失函数。

直接学习低维词向量

  这其实并不是多么新潮的主意,很早就有一些研究了:

    • Learning representations by back-propagating errors (Rumelhart et al., 1986)

    • A neural probabilistic language model (Bengio et al., 2003)

    • NLP (almost) from Scratch (Collobert & Weston, 2008)

    • A recent, even simpler and faster model: word2vec (Mikolov et al. 2013) 

  只不过以前一直没有引起重视,直到Bengio展示了它的用处之大。后来研究才开始火热起来,并逐渐出现了更快更工业化的模型。

word2vec的主要思路

  通过单词和上下文彼此预测,老生常谈了。

  两个算法:

  • Skip-grams (SG):预测上下文

  • Continuous Bag of Words (CBOW):预测目标单词

  两种稍微高效一些的训练方法:

  • Hierarchical softmax

  • Negative sampling

  但在这门课里,只会讲Naïve softmax。好在我早就把两种算法和两种训练方法的四种组合过了一遍:http://www.hankcs.com/nlp/word2vec.html

Skip-gram预测

hankcs.com 2017-06-07 下午2.47.31.png

  注意这里虽然有四条线,但模型中只有一个条件分布(因为这只是个词袋模型而已,与位置无关)。学习就是要最大化这些概率。

word2vec细节

  目标函数定义为所有位置的预测结果的乘积:

hankcs.com 2017-06-07 下午2.55.51.png

  要最大化目标函数,最小化损失函数,需要对目标函数取个负对数,得到损失函数——对数似然的相反数:

  目标函数和损失函数通常是相反的过程:

hankcs.com 2017-06-07 下午2.57.28.png

目标函数细节

  这些术语都是一样的:Loss function = cost function = objective function,不用担心用错了。对于softmax来讲,常用的损失函数为交叉熵。

Word2Vec细节

  预测到的某个上下文条件概率p(wt+j|wt)可由softmax得到:

hankcs.com 2017-06-07 下午3.07.22.png

  o是输出的上下文词语中的确切某一个,c是中间的词语。u是对应的上下文词向量,v是词向量。

点积

  复习一下课程开头所说的baby math:

hankcs.com 2017-06-07 下午3.09.43.png

  公式这种画风这种配色真的有点幼儿园的感觉。

  点积也有点像衡量两个向量相似度的方法,两个向量越相似,其点积越大。

Softmax function:从实数空间到概率分布的标准映射方法

hankcs.com 2017-06-07 下午3.13.57.png

  指数函数可以把实数映射成正数,然后归一化得到概率。

  softmax之所叫softmax,是因为指数函数会导致较大的数变得更大,小数变得微不足道;这种选择作用类似于max函数。

Skipgram

2017-06-07_15-24-56.png

  别看这张图有点乱,但其实条理很清晰,基本一图流地说明了问题。从左到右的过程依次是one-hot向量乘以W于是找到词向量,再乘以W的转置得到对每个词语的“相似度”,对相似度取softmax得到概率,与答案对比计算损失。真清晰。官方笔记里有非手写版,一样的意思:

Skip-Gram.png

训练模型:计算参数向量的梯度

  把所有参数写进向量θθ,对d维的词向量和大小V的词表来讲,有:

2017-06-07_15-34-33.png

  模型的学习当然是梯度法了,Manning还耐心地推导了十几分钟:

hankcs.com 2017-06-07 下午5.18.54.png

hankcs.com 2017-06-07 下午5.19.15.png

hankcs.com 2017-06-07 下午5.20.24.png

hankcs.com 2017-06-07 下午5.20.42.png

  更清晰的公式参考:http://www.hankcs.com/nlp/word2vec.html#h3-5 

损失/目标函数

  梯度有了,参数减去梯度就能朝着最小值走了。

hankcs.com 2017-06-07 下午8.34.41.png

梯度下降、SGD

hankcs.com 2017-06-07 下午8.42.22.png

hankcs.com 2017-06-07 下午8.40.33.png

  只有一句比较新鲜,神经网络喜欢嘈杂的算法,这可能是SGD成功的另一原因。

posted on 2017-10-19 19:09  koocn  阅读(423)  评论(0编辑  收藏  举报