机器学习14-嵌入Embedding

举报
一颗小树x 发表于 2021/06/18 21:52:33 2021/06/18
【摘要】 介绍稀疏矢量、数字矢量、嵌套(也可以叫嵌入)。

前言

本文介绍稀疏矢量、数字矢量、嵌套(也可以叫嵌入)。


 一、协同过滤

协同过滤是一项可以预测用户兴趣的任务。一影片推荐的任务为例,假设有100万个用户,以及每位用户观看过的列表,其中可供观看的影片共有50万部。目标是向用户推荐影片。

要解决这个问题,我们需要使用某种方法来确定哪些影片是相似的。我们可以通过将影片嵌套到低维空间,是的相似的影片彼此邻近,俩实现这个目标。

在介绍如果学习嵌套之前,我们先来了解一下,我们希望嵌套具备的特质类型,以及我们将如何表示训练数据以供学习嵌套。

 

在一维数轴上排列影片

为了更直观地了解嵌套过程,下面列举了一些数据;试着在一维数轴上排列以下影片,让越相关的影片考得越近。

影片 分级 说明
《蓝》 R 一位法国妇人在丈夫与爱女丧命于一场车祸后悲痛欲绝。
《蝙蝠侠:黑暗骑士崛起》 PG-13 这部影片是《黑暗骑士》的续集,以 DC 漫画的宇宙空间为背景,讲述蝙蝠侠尽力保护高谭市免遭核毁灭的故事。
《哈利·波特与魔法石》 PG 一个失去双亲的男孩发现自己会巫术,于是前去霍格沃茨魔法学校学习魔法,在这里他与邪恶的伏地魔展开了第一场激斗。
《超人总动员》 PG 被迫在郊区过着平民生活的超人一家重出江湖,拯救超人家族免遭辛拉登及其杀手机器人的迫害。
《怪物史莱克》 PG 可爱的怪物史莱克和他的伙伴驴子,启程营救被火龙囚禁在城堡的菲奥娜公主。
《星球大战》 PG 卢克·天行者和汉·索洛与两个义军机器人结成一队,共同拯救莱娅公主并保卫星球。
《疯狂约会美丽都》 PG-13 专业骑行者查宾在环法自行车大赛期间被挟持,他的奶奶带着他家的胖狗漂洋过海,并在爵士歌手三姐妹的帮助下救出了他。
《记忆碎片》 R 一位短期记忆丧失症患者将线索纹在身上,竭尽全力寻找杀害自己妻子的凶手。

一个可行(但极不完善)的解决方案:把所以影片一行排列

虽然中嵌套有助于捕获影片的适宜观赏年龄段,但在推荐影片时还需要考虑影片的许多其它方面。我们进一步分析此示例,在添加一个嵌套维度。

 

在二维空间中排列影片

使用这种二维嵌套,我们可以定义影片之间的距离,从而是得在适宜儿童或成人的相近程度上影片,以及属于大片或艺术影片的程度上相近的影片,位于相近的位置。当然,这是影片诸多重要特征中的两个。

简单来说,我们所做的是将这些影片映射到一个嵌套空间,其中的每个字词都有一组二维坐标来表示。例如,在这个空间中,《怪物史菜克》映射到了(-1.0 , 0.95);而《蓝》映射到了(0.65 , -0.2)。

通常情况下,在学习d维嵌套时,每部影片都由d个实值数字表示,其中每个数字都分别表示在一个维度中的坐标。


在此示例中,我们为每个维度指定了名称。在学习嵌套时,每个维度的学习跟它们的名字无法。有时我们可以查看嵌套并为维度赋予语义,但有时则无法做到这一点。

通常,每个此类维度都称为一个潜在维度,因为它代表的特征没有明确显示在数据中,而是需要根据数据推断得出。

最终,真正有意义的是嵌套空间中各个影片之间的距离,而不是单个影片在任意指定维度上的坐标。

参考:https://developers.google.cn/machine-learning/crash-course/embeddings/motivation-from-collaborative-filtering

 

 

二、分类输入数据

分类数据是指用于表示一组有限选项中的,一个或多个离散项的输入特征。例如,它可以是某用户观看过的一组影片,某文档中使用的一系列单词,或某人从事的职业。

分类数据的最高效表示方式是使用稀疏张量(一种含有极少非零元素的张量)。例如,如果要构建一个影片推荐模型,可以为每部的影片分别分配一个唯一的ID,然后通过用户已观看影片的稀疏张量来表示每位用户,如图下图所示。

在上图中,每行都是一个样本,这个样本显示用户的影片观看记录;上图以稀疏张量的形式表示,因为每个用户只会观看所有可能的影片中的一小部分。

根据影片图标上方所示的索引,最后一行对应于稀疏张量[1,3,999999]

类似地,我们还可以将字词、句子和文档表示为稀疏矢量;在这种情况下,词汇表内每个字词所扮演的角色类似于推荐示例中的影片。

 

三、稀疏矢量 表示为 数字矢量

为了能够在机器学习系统中使用这类表示法,我们需要将每个稀疏矢量表示为数字矢量,从而使语义上相识的项(影片或字词),在矢量空间中具有相似的距离。

但如何将字词的稀疏矢量表示为数字矢量呢?

最简单的方法是:

【1】定义一个巨型输入层,并在其中为词汇表的每个字词设定一个节点,或者只是为数据中出现的每个字词设定一个节点。

如果我们的数据中出现了50万个独一无二的单词,可以使用长度为50万的矢量来表示每个单词,将每个字词分配到相应矢量中对应的索引位置。

如果为“马”分配的索引是1247,当“马”输入到网络中,可以将第1247个输入节点设成1,其余节点设成0。这种表示法称为独热编码(one-hot encodering),因为只有一个索引具有非零值。

【2】更常见的是,使用一个包含各个单词在大块文本中出现次数的向量。这杯称为“词袋”(bag of words)表示法。在一个词袋矢量中,50万个节点中的若干个节点将具有非零值。

不过,无论我们如何确定非零值,若将节点与字词一一对应,我们得到的输入矢量就会比较稀疏:矢量很大,但非零值相对较少。

 

四、稀疏表示法存在的问题

稀疏表示法会使模型很难高效地学习。

4.1 网络规模

巨型输入矢量意味着神经网络的对应权重数目会机器庞大。

如果我们的词汇表找那个有M个字词,而神经网络输入层上方的第一层有N个节点,需要为该层训练MxN个权重。权重数目过大会进一步引发以下问题:

  • 数据量:模型中的权重越多,高效训练所需的数据就越多。
  • 计算量:权重越多,训练和使用模型所需的计算就越多。这很容易就会超出硬件的能力范围。

 

4.2 矢量之间缺乏有用意义的联系

如果将RGB通道的像素值输入到图片分类器中,分析“邻近”值是可行的。不过是从语义上来看,还是从矢量之间的几何距离来看,红蓝色与纯蓝色都是邻近对的。

不过,对于在索引1247处设为1,来表示“马”的矢量而言;如果说它在索引238处设为1,来表示“电视机”的矢量不够邻近;那么它与在索引50430处设为1,来说表示“羚羊”的矢量依然。

 

4.3 解决方案:嵌套

上述问题的解决方案是使用嵌套,也就是将大型稀疏矢量映射到一个保留语义关系的低维空间

 

五、转换到低维空间

背景

要解决稀疏输入数据的核心问题,我们可以将高维度数据映射待低维度空间。

 

分析

即便是小型多维空间,也能自由地将语义上相似的项归到一起,并将相异项分开。

矢量空间中的位置(距离和方向)可以良好的嵌套中的语义进行编码。

例如,下面的真实嵌套可视化图展示的几何关系图捕获了国家与首都之间的语义关系。

嵌套可以产生精彩的模拟;借助这种有意义的空间,机器学习系统能够检测出对学习任务可能有帮助的模式。

 

收缩网络

尽管我们需要足够的维度来编码丰富的语义关系,但我们也需要足够小的嵌套空间来更快速地训练我们的系统。

使用嵌套的量级大致有数百个维度,这可能比我们在自然语言任务中使用的词汇规模要小好几个数量级。

 

嵌套充当查询表

嵌套是一个矩阵,每列表示我们词汇中一项所对应的矢量。要获得某个词汇项的密集矢量,可以检索该项所对应的列。

但是,如何转换字词矢量的稀疏包呢?

要获得表示多个词汇项;例如,一句或一段中的所有字词,的稀疏矢量的密集矢量,可以检索各项的嵌套,然后将它们相加。

 

稀疏矢量包含词汇项的计数?

如果稀疏矢量包含词汇项的计数,则可以将每项嵌套与其对应项的计算相乘,然后再求和。

嵌套查询充当矩阵乘法

查询、乘法和加法程序等效于矩阵乘法。假设有一个1xN的稀疏表示S和一个NxM的嵌套表E,矩阵乘法SxE可以得出密集矢量1xM。

但如果获取E呢?下一节介绍如何获取嵌套。

 

参考:https://developers.google.cn/machine-learning/crash-course/embeddings/translating-to-a-lower-dimensional-space

 

 

六、获取嵌套

我们可以通过多种方式来获取嵌套,包括Google研发的一流算法。

6.1 标准降维技术

目前有很多在低维空间 捕获 高维空间重要结构 的数学技术。理论上,这些技术都可以用来创建于机器学习系统的嵌套。

例如,主成分分析(PCA)已用于创建字词嵌套。在给定一组实例的情况下,例如字词矢量包,PCA会尝试查找高度相关且可以合并的维度。

 

6.2 Word2vec

简介

Word2Vec 是 Google 为了训练字词嵌套而研发的一种算法。

 

原理

Word2vec基于分布假设,将语义上相似的字词 映射到 几何图形上邻近的嵌套矢量

分布假设,是指经常具有相同邻字词的字词,往往在语义上相似。简单来说,就是分布相互邻近的字词,往往语义也相似。

例如,“狗”和“猫”这两个词经常靠近“兽医”一词,这就可以说明这两个字词在语义上相似。

 

结构

Word2Vec 通过训练神经网络来区分实际共同出现的多组字词随机出现在一起的字词,从而充分利用此类上下文信息。

输入层采用一种稀疏表示法用于,组合一个目标字词 与一个或多个上下文字词。这一输入层会连接到一个较小的隐藏层。

在训练模型后,我们得到的是一组嵌套,借助将输入层连接到隐藏层的权重;可以将字词的稀疏表示映射到小型矢量。这类嵌套可在其他分类中重复使用。

 

6.3 将嵌套训练 作为 大型模型的一部分

简介

我们可以将 嵌套 作为目标任务的神经网络的一部分,然后进行学习训练。通过这个方法,可以为自己的特定系统量身定制嵌套,不过耗费的时间可能比单独训练嵌套的时间长。

 

应用

一般来说,当我们有稀疏数据时,可以创建一个嵌套单元。

或者当我们想要嵌套的密集数据时,也可以创建一个嵌套单元。

这个嵌套单元其实是大小为d的一个特殊类型的隐藏单元;此嵌套层可与任何其它特征和隐藏层组合。和任何DNN中一样,最终层将是要进行优化的损失函数。

 

案例1

假设我们正在执行协同过滤,目标是根据其他用户的兴趣,预测某位用户的兴趣。

我们可以将这个问题作为监督学习问题进行建模,具体做法是随机选择用户看过的一小部分影片作为正类标签,然后再优化Softmax损失。

根据协同过滤数据学习影片嵌套的DNN架构示例:

案例2

如果想在DNN中针对房地产广告词,创建嵌套层来预测房价,则可以将训练数据中的已知房屋价用作标签来优化来L2损失。

在学习d维嵌套时,每一项都会映射到d为空间中的一个点,这样相似项就会在该空间内彼此邻近。

嵌套层权重的几何视图:

上图说明了在嵌套层中学到的权重与几何视图之间的关系;输入节点与d维嵌套层中的节点之间的边的权重,对应于d维坐标轴中每一维的坐标值。

比如,d = 3,把每一项,映射到3位空间汇总的一个点,比如是(0.9,0.2,0.4)。

 

参考:https://developers.google.cn/machine-learning/crash-course/embeddings/obtaining-embeddings

 



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。