word embedding词嵌入


word embedding的功能一般提现在文字序列预测中,比如存在于LSTM网络中。它的功能类同将图片在计算机中以像素的存储方式一样,对序列中的每一个元素进行编码,形成自己的表达序列的独特方式。

序列中表达单词的方式有One hot representationDistributed representation

One hot representation

程序中编码单词的一个方法是one hot encoding。

比如:有1000个词汇量。排在第一个位置的代表英语中的冠词"a",那么这个"a"是用[1,0,0,0,0,…],只有第一个位置是1,其余位置都是0的1000维度的向量表示,如下图中的第一列所示。
word embedding词嵌入
可以发现在one hot representation编码的每个单词都是一个维度,并且单词之间都是彼此independent。

Distributed representation

现实中,通常单词与单词之间都是由上下连接关系的,并不能像one Distributed representation 那样只是简单的表示每一个单词,因此有了Distributed representation。

词类通常具有多种属性,比如语义、复数、时态等。

语义:girl和woman虽然用在不同年龄上,但指的都是女性。
复数:word和words仅仅是复数和单数的差别。
时态:buy和bought表达的都是“买”,但发生的时间不同。

词类通常具有多种属性,比如语义、复数、时态等。语义:girl和woman虽然用在不同年龄上,但指的都是女性。复数:word和words仅仅是复数和单数的差别。时态:buy和bought表达的都是“买”,但发生的时间不同。

另一个原因,也是由于数据量的原因。

机器学习学习的任务:从大量的个样本(xi,yi)中,寻找可以较好预测未见过xnew所对应ynew 的函数f:x→y 。把这个机器学习问题比作高考复习考试,已有样本(xi,yi)都是历年真题,xi是题目,而yi是对应的正确答案,高考时将会遇到的xnew往往是我们没见过的题目,希望可以通过做题训练出来的解题方法f:x→y,来求解出正确的ynew。因此这个机器学习的任务便是从有限的真题训练中学习训练出合理的f。所以数据量的大小,对任务的学习至关重要,数据量大,学习到的f也会更加合理。

神经网络分析

用神经网络的思路来分析,对比两种不同的表示方式有什么不同。

One hot representation,尽管我们知道他们彼此的关系,但是计算机并不知道。在神经网络的输入层中,每个单词都会被看作一个节点。而我们知道训练神经网络就是要学习每个连接线的权重。如果只看第一层的权重,下面的情况需要确定43个连接线的关系,因为每个维度都彼此独立,girl的数据不会对其他单词的训练产生任何帮助,训练所需要的数据量,基本就固定在那里了。
word embedding词嵌入
Distributed representation,手动的寻找这四个单词之间的关系。可以用两个节点去表示四个单词。每个节点取不同值时的意义如下表。 那么girl就可以被编码成向量[0,0],man可以被编码成[1,1]。
word embedding词嵌入
那么这时再来看神经网络需要学习的连接线的权重就缩小到了2
3。同时,当送入girl为输入的训练数据时,因为它是由两个节点编码的。那么与girl共享相同连接的其他输入例子也可以被训练到(如可以帮助到与其共享female的woman,和child的boy的训练)。
word embedding词嵌入

Word embedding

而上面的四个单词可以被拆成2个节点的是由我们人工提供的先验知识,所以才能够降低训练所需要的数据量。但是我们没有办法一直人工提供,机器学习的宗旨就是让机器代替人力去发现pattern。Word embedding就是要从数据中自动学习到Distributed representation。

训练方法

问题来了,我们该如何自动寻找到类似上面的关系,将One hot representation转变成Distributed representation。我们事先并不明确目标是什么,所以这是一个无监督学习任务。

无监督学习中常用思想是:当得到数据{(xi,yi)}后,我们又不知道目标(输出)时,有两个方向处理办法:
方向一:从各个输入 {xi}之间的关系找目标。 如聚类。
方向二:并接上以目标输出yi作为新输入的另一个任务g:y→z,同时我们知道的对应 zi,用数据{(xi,zi)}训练得到 k:x→z, ,也就是 z=g(f(x)),中间的表达y=f(x)则是我们需要的真正目标。比如对抗生成网络。

Word embedding更偏向于方向二。 同样是学习一个k:x→z,但训练后并不使用 k,而是只取前半部分的 f:x→y。到这里,我们希望所寻找的k:x→z既有标签 z,又可以让 f(x)转换得到的y的表达具有Distributed representation中所演示的特点。同时我们还知道,单词意思需要放在特定的上下文中去理解。那么具有相同上下文的单词,往往是有联系的。

比如:以下两个单词都狗的品种名,而上下文的内容已经暗指了该单词具有可爱,会舔人的特点。
这个泰迪很可爱。
这个金巴很可爱。
而从上面这个例子中我们就可以找到一个k:x→z :预测上下文。用输入单词x作为中心单词去预测其他单词z出现在其周边的可能性。这样既知道了对应的z, 同时该任务k又可以让f(x)所转换得到的y的表达具有Distributed representation中所演示的特点。 因为我们让相似的单词(如泰迪和金巴)得到相同的输出(上下文),那么神经网络就会将泰迪的输入和金巴的输入经过神经网络f得到的泰迪的输出和 金巴的输出几乎相同。

Skip-Gram:用输入单词作为中心单词去预测周边单词的方式叫做:Word2Vec The Skip-Gram Model。
CBOW:用输入单词作为周边单词去预测中心单词的方式叫做:Continuous Bag of Words (CBOW)。

Embedding Layer具有降维的作用。输入到网络的向量常常是非常高的维度的one-hot vector,比如8000维,只有一个index是1,其余位置都是0,非常稀疏的向量。Embedding后可以将其降到比如100维度的空间下进行运算。

同时还有额外的特点,比如:词向量“女人”与“男人”的距离 约定于 “阿姨”与“叔叔”距离。

W(‘‘woman")−W(‘‘man") ≃ W(‘‘aunt")−W(‘‘uncle")
W(‘‘woman")−W(‘‘man") ≃ W(‘‘queen")−W(‘‘king")