embedding层作用

Word2Vec和Embeddings

Word2Vec其实就是通过学习文本来用词向量的方式表征词的语义信息,即通过一个嵌入空间使得语义上相似的单词在该空间内距离很近。Embedding其实就是一个映射,将单词从原先所属的空间映射到新的多维空间中,也就是把原先词所在空间嵌入到一个新的空间中去。我们从直观角度上来理解一下,cat这个单词和kitten属于语义上很相近的词,而dog和kitten则不是那么相近,iphone这个单词和kitten的语义就差的更远了。通过对词汇表中单词进行这种数值表示方式的学习(也就是将单词转换为词向量),能够让我们基于这样的数值进行向量化的操作从而得到一些有趣的结论。比如说,如果我们对词向量kitten、cat以及dog执行这样的操作:kitten - cat + dog,那么最终得到的嵌入向量(embedded vector)将与puppy这个词向量十分相近。(https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html

 

对文本提取特征

1、最简单直接的方式就是 用顺序数字表示不同的单词,进行特征提取

     比如:形容女人用漂亮,女孩用可爱

     形-0 容-1 女-2 人-3 用-4 漂-5 亮-6  孩-7 可-8 爱-9

    则 原句子的特征:0123456789

使用该种方式,由于不用词语的量纲不一样,无法进行特征的计算,所以 one-host 表示法就来了

2、使用一维数组表示一个字,句子就是 二维的稀疏矩阵

    比如:形容女人用漂亮,女孩用可爱

  

形-1000000000-0100000000-0010000000-0001000000-0000100000-0000010000-0000001000-0000000100-0000000010-0000000001
则原句子特征
1000000000
0100000000
0010000000
0001000000
0000100000
0000010000
0000001000
0000000100
0000000010
0000000001

这个相对上面特征表示一个好处是特征计算简单,直接将稀疏矩阵对应位置相乘相加即可。另外他的劣势是由于是稀疏矩阵,大部分信息都是0,浪费存储空间和计算空间,到这就推导出embeddding层的作用了

3、将one-host稀疏矩阵映射为一个 总特征个数/维数 更小的矩阵,叫做embedding层的作用

  第2点使用的稀疏矩阵

X = [
1000000000
0100000000
0010000000
0001000000
0000100000
0000010000
0000001000
0000000100
0000000010
0000000001
]
使用
w=[
w10   w11   
w20   w21
w30   w31
w40   w41
w50   w51
w60   w61
w70   w71
w80   w81
w90   w91
w100 w101
]

X * w = [
w10   w11   
w20   w21
w30   w31
w40   w41
w50   w51
w60   w61
w70   w71
w80   w81
w90   w91
w100 w101
]

 以上,10 x 10矩阵,乘以 10 x 2的矩阵,变成了10 x 2矩阵 ,特征大小缩小了 10 / 2 = 5倍。(注:这个地方可以设置为降维,当w取 10 x20 ,就可以实现升维的作用) 

看到以上embedding可以降维,你是不是会有信息丢失的担心的丢失或者这种降维实际有啥意义? 下面从文本降维的例子理解下

4、word-embedding

假设有1000个词汇量。第一个词是[1,0,0,0,0,...],其余的词都是某个位置为1,其余都是0的1000维度的向量,也即one-hot编码。

从one-hot编码原理可知,不同词仅仅是 随机或者排序后 从先到后在不同的位置设置为1,其余位置设置为0.也就是不同词之间没有关系,而这和现实不符。比如:

语义:girl和woman虽然用在不同年龄上,但指的都是女性。man和boy虽然用在不同年龄上,但指的都是男性。

复数:word和words仅仅是复数和单数的差别。

时态:buy和bought表达的都是“买”,但发生的时间不同。

我们更希望用诸如“语义”,“复数”,“时态”等维度去描述一个单词。每一个维度不再是0或1,而是连续的实数,表示不同的程度。这个就是Distributed representation的方式

神经网络分析

假设我们的词汇只有4个,girl, woman, boy, man,下面就思考用两种不同的表达方式会有什么区别。

One hot representation

尽管我们知道他们彼此的关系,但是计算机并不知道。在神经网络的输入层中,每个单词都会被看作一个节点。 而我们知道训练神经网络就是要学习每个连接线的权重。如果只看第一层的权重,下面的情况需要确定4*3个连接线的关系,因为每个维度都彼此独立,girl的数据不会对其他单词的训练产生任何帮助,训练所需要的数据量,基本就固定在那里了。

 

 

 

Distributed representation

我们这里手动的寻找这四个单词之间的关系 [公式] 。可以用两个节点去表示四个单词。每个节点取不同值时的意义如下表。 那么girl就可以被编码成向量[0,1],man可以被编码成[1,1](第一个维度是gender,,第二个维度是age)

 

 

 

那么这时再来看神经网络需要学习的连接线的权重就缩小到了2*3。同时,当送入girl为输入的训练数据时,因为它是由两个节点编码的。那么与girl共享相同连接的其他输入例子也可以被训练到(如可以帮助到与其共享female的woman,和child的boy的训练)。

 

 

 

Word embedding也就是要达到第二个神经网络所表示的结果,降低训练所需要的数据量。

而上面的四个单词可以被拆成2个节点的是由我们人工提供的先验知识将原始的输入空间经过 [公式](上图中的黄色箭头)投射到了另一个空间(维度更小),所以才能够降低训练所需要的数据量。 但是我们没有办法一直人工提供,机器学习的宗旨就是让机器代替人力去发现pattern。

Word embedding就是要从数据中自动学习到输入空间到Distributed representation空间的 映射[公式]

5、那 embedding怎么训练呢?

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

无监督学习中常用思想是:当得到数据[公式]后,我们又不知道目标(输出)时,

    • 方向一:从各个输入 {[公式] }之间的关系找目标。 如聚类。
    • 方向二:并接上以目标输出 [公式] 作为新输入的另一个任务 [公式] ,同时我们知道的对应 [公式]值。用数据 [公式] 训练得到 [公式] ,也就是 [公式] ,中间的表达 [公式] 则是我们真正想要的目标。如生成对抗网络。

 

Word embedding更偏向于方向二。 同样是学习一个 [公式] ,但训练后并不使用 [公式] ,而是只取前半部分的 [公式] 。

到这里,我们希望所寻找的 [公式] 既有标签 [公式] ,又可以让 [公式] 所转换得到的 [公式] 的表达具有Distributed representation中所演示的特点。

同时我们还知道,

单词意思需要放在特定的上下文中去理解。

那么具有相同上下文的单词,往往是有联系的。

实例:那这两个单词都狗的品种名,而上下文的内容已经暗指了该单词具有可爱,会舔人的特点。

  • 这个可爱的 泰迪 舔了我的脸。
  • 这个可爱的 金巴 舔了我的脸。

而从上面这个例子中我们就可以找到一个 [公式] :预测上下文。

用输入单词 [公式] 作为中心单词去预测其他单词 [公式] 出现在其周边的可能性。

我们既知道对应的 [公式] ,同时该任务 [公式] 又可以让 [公式] 所转换得到的 [公式] 的表达具有Distributed representation中所演示的特点。 因为我们让相似的单词(如泰迪和金巴)得到相同的输出(上下文),那么神经网络就会将泰迪的输入和金巴的输入经过神经网络 [公式] 得到的泰迪的输出和金巴的输出几乎相同。

posted @ 2020-03-03 23:36  哈哈哈喽喽喽  阅读(5815)  评论(0编辑  收藏  举报