视频链接
Word embedding:词向量
dimension reduction:维数缩减
Word embedding 其实是 dimension reduction一个非常好、非常广为人知的应用。
如果我们今天要你用一个vector 来表示一个Word,你会怎么做呢?
最经典的做法叫做 1-of-N encoding
每个word 对应的vector都不一样,但是从这个vector里面,你没有办法得到任何咨询。
比如说 cat 和 dog 都是动物这件事。
那怎么办呢?
有一个方法叫做建 Word class
把同样性质的Word cluster 成一群一群的,但class之间的关联没法表示
所以我们需要Word embedding(下图右上角)
Word embedding:把每一个word都project到一个high dimensional 的space 上面。
在Word embedding上,我们可以看到的是 类似词义的词汇,在这个图上是比较接近的。而且每一个dimension,可能都有它特别的含义。
比如说上图的横轴可能代表了生物与其他东西直接的差别,纵轴可能代表的跟动作有关的东西(动物会动)
那怎么做Word Embedding 呢?
Word Embedding 是一个unsupervised approach,也就是我们让machine知道每一个词汇的含义,是什么呢?
你只要让machine通过阅读大量的文章,它就可以知道每一个词汇它的embedding 的feature vector 应该长什么样子
我们要做的就是要learn 一个neural network 找一个function ,input是一个词汇,output就是那一个词汇所对应的Word Embedding的那一个vector。
而我们手上有点training data就是一大堆文字,这个问题是没办法用auto-encoder来解的。
那要怎么做呢?
它基本的精神就是你要了解一个词汇的含义,可以通过看词汇的contest,每一个词汇的含义可以通过上下文来得到。
那怎么用这个思想来找出Word Embedding 的vector 呢?
有两个不同体系的做法 Count based VS Predition based
如果两个词常常一起出现,V(w)会比较接近
我们希望V(wi)V(wj)的inner product 和 wi wj 在同一文章出现的次数 这两件事越接近越好。
它的想法是learn 一个neural network,它做的事情的prediction,predict什么呢?
这个neural network做的事情是given前一个word,predict下一个可能出现的Word是谁。
对于每个Word 我们动用 1-of-N encoding 可以把它表示成一个feature vector
所以如果我们要做prediction ,就是learn 一个neural network ,input就是w(i-1) 1-of-N encoding 的feature vector,output急速下一个Word (wi) 是某一个Word的几率。 这个model 的output的dimension就是vector 的size。
假设现在世界上有10万个Word 这个model的output就是10万维的,每一维代表l某一个Word是下一个word的几率。
接下来,我们把第一个hidden layer的input拿出来,假设第一个dimension是z1…
你input同一个词汇它有同样的1-of-N encoding在这边它的z就会一样,所以我们一共这个input 1-of-N encoding得到的Z的这个vector就可以来当做那一个Word的Embedding。
为什么用Prediction-based 的方法就可以得到这样的vector呢?
Prediction-based 是怎么根据上下文来了解一个词汇的含义呢?
假设我们Training data里面
有一个文章是 蔡英文(wi-1)宣誓就职(wi)
另一个文章是马英九(wi-1) 宣誓就职(wi)
你在训练Prediction model 的时候,不管是蔡英文,还是马英九 你都希望learn处理的结果是“宣誓就职”的几率比较大
所以,你会希望说input 马英九 和蔡英文的时候,它output对应到“宣誓就职”那一个词汇,它的dimension 的几率是高的。
为了要让不同的input 得到一样的output ,必须要让中间的hidden layer 把这两个不同的input,project 到同样的接近的空间。
如果只有(wi-1)去predict(wi)好像觉得太弱了,就算是人,你给一个词汇,去predict下一个词汇感觉也很难,下一个词汇的可能性是千千万万的,那怎么办呢?
你可以轻易把这个model 拓展到N个词汇,一般我们,如果你真的要learn这样的Word vector的话,可能你的input 通常是至少10个词汇这样才能learn出比较reasonable 的结果。
需要注意的是==(wi-2)的第一个dimension 跟第一个hidden layer的第一个neuron连接的weight== 和==(wi-1)的第一个dimension 跟第一个hidden layer的第一个neuron连接的weight== 必须是一样的。
如果我们不这么做,你把同一个Word放在(wi-2)的位置很放在(wi-1)的位置通过这个transform以后他得到的Embedding就会不一样。
还有一个好处是减少参数。
在实做上,怎么样才能让W1 跟W2 他们的weight 都一样呢?
事实上,我们在train CNN的时候也有同样的问题,我们也要让某一些参数,他们的weight必须是一样的
那怎么做呢?
首先要给wi 和 wj 一样的 initialization,训练的时候给他们一样的初始值
然后在更新参数的时候减去对方更新的项,这样就能保持一致了。
Prediction based 还有其它的变形:
CBOW:我们拿某一个词汇的context 去predict中间这个词汇
Skip-gram:拿wi去predict wi-1 跟wi+1
注意:这个neural network不是deep的,只是一个hidden layer
如果B 是属于A的, 那 A-B的结果是会跟类似的。
所以利用这个特性,我们可以做一些简单的推论:
图像上的应用: