1.词嵌入的由来:
1.1 提到这个,你自然的想到:1-of-N Encoding
apple=[1 0 0 0 0]
bag=[0 1 0 0 0]
cat=[0 0 1 0 0]
dog=[0 0 0 1 0]
elephant=[0 0 0 0 1]
这种词表示方式缺点很明显:维度大,稀疏,各个词之间关系完全被忽略,无法表示一词多义
1.2 Word Class
Dimension Reduction的方法,化繁为简
2.Word Embedding
一看就知道这个方法维度比1-of-N Encoding要少很多很多。
2.1 概念:
Word Embedding是一种非监督的机器学习方法(Generating Word Vector is unsupervised)。做法很简单,就是让Machine 阅读很多的文章,自然会知道词的Embedding是什么样子。
它的输入是一个词,输出是一个词对应的向量。
精神:
因为看过了小红宣布就职,彩英宣布就职,所以它虽然不知输出是什么,但最起码知道,小红和彩英就是同样地位,后面输出可能一样。
那怎么用这个精神找出word embendding 的vector呢
2.2 怎样一个大量数据学习得出结论的过程:
输入本来就是独热编码,单词之间本来就没有关系,这样学出来的词向量也是无用的。因此要考虑上下文来理解单词。
word的embedding结果,可以将word的one hot向量输入神经网络之前进行embedding,通过训练得到每个word的embedding结果。
例如,让机器学习:
马冬梅爱吃西瓜。
牛春菊爱吃西瓜。
机器就会得到结论:马冬梅、牛春菊are something very similar
2.3如何找出词的含义vecor
2.31 Count based :找相同程度
常见的算法是斯坦福的:Glove Vector:
Glove Vector:GloVe是一种用于获取单词向量表示的无监督学习算法。
其中心思想是:
左边是vector的内积,右边是出现的次数,左边和右边越接近越好。
2.32Prediction based:做的事是predict
这个算法的输入是:1-of-N Encoding,输出:每一个词作为下一个词出现的概率。如果有输入10W个词,那么输出就是10W维。每一维表示被当成W i的几率。
由于输入每个一个词的表示都不一样,所以可以把隐藏层的第一层input拿出来,Z1,Z2,,也就是词嵌入:
当无论蔡某、马某作为输入的时候,我们都希望模型的输出中,说上班应该有最大的概率是下一个词。那么蔡某、马某应该有相似的词嵌入(如下图),才会有这个结果:
Prediction based可以用在推文接话
也可以用在Language Modeling(预测一句话出现的概率)
2.321:扩展-Sharing Parameters**
只看wi-1预测wi很快困难,一个词后面可能出现的词的可能性太多种了,于是对这个算法进行了扩展。
在预测时,可以观察前n个单词,但是在输入到embedding层时,共享weight,保证网络的课拓展性。
也就是考虑Wi-1 和Wi-2
训练的时候Wi-1 和Wi-2两个向量的第一个位置同时对应隐藏层的z1 z2,
这样做有两个好处:1.共享参数,减少计算量;2. 一个词对应一个词嵌入,否则会有多个词嵌入。
2.4 怎样让Wi和Wj的偏微分一样呢?
首先训练时一样的初始值,然后算wi-wj的偏微分和wj-wi的偏微分,,确保训练过程update的weight时一样的额。
3.训练
首先搜集数据,然后训练,红色箭头是代表Minimizing cross entropy关系。
比如潮水,退了,和,就(就也是one-of -n),的cross entropy 的Minimizing越小越好,同样,退了,就和,知道,的cross entropy 越小越好
CBOW:用前后预测中间
Sjip-gram:用中间预测两边
同样类型的vector摆在一起,会有一定的联系
同类相减也很相近。
不同语言,中英文做word vector,发现中英文没有任何关系,有对应关系的就可以找到
总结:
就是说,正常的word embedding 可以知道auto,周围都是小汽车,这是以前就已经知道的。但是呢cat 周围是猫这件事之前没有学过,可是我们的embedding还是可以给他vector到cat的周围,这就是embedding 的功劳。
:已经通过自己的无监督学习,给每个词语义vector(通过找相同或者习惯)了,所以知道性质(embedding),就方便分类了。