嵌套(Embeddings)

2. 分类输入数据 Categorical data

分类数据是指用于表示一组有限选项中的一个或多个离散项的输入特征。例如,它可以是某用户观看过的一组影片,某文档中使用的一系列单词,或某人从事的职业。
分类数据的最高效表示方式是使用稀疏张量(sparse tensors)(一种含有极少非零元素的张量)。例如,如果要构建一个影片推荐模型,可以为每部可能的影片分别分配一个唯一的 ID,然后通过用户已观看影片的稀疏张量来表示每位用户:
在这里插入图片描述
在图 3 的矩阵中,每一行都是一个显示用户的影片观看记录的样本,并以稀疏张量的形式表示,因为每个用户只会观看所有可能的影片中的一小部分。根据影片图标上方所示的索引,最后一行对应于稀疏张量 [1, 3, 999999]。

类似地,我们还可将字词、句子和文档表示为稀疏矢量 - 在这种情况下,词汇表内每个字词所扮演的角色类似于推荐示例中的影片。
为了能够在机器学习系统中使用这类表示法,我们需要将每个稀疏矢量表示为数字矢量,从而使语义上相似的项(影片或字词)在矢量空间中具有相似的距离。但如何将字词表示为数字矢量呢?

最简单的方法是:定义一个巨型输入层,并在其中为词汇表内的每个字词设定一个节点,或者至少为您数据中出现的每个字词设定一个节点。如果您的数据中出现了 50 万个独一无二的单词,您可以使用长度为 50 万的矢量来表示每个单词,并将每个字词分配到相应矢量中对应的索引位置。

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

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

不过,无论您如何确定非零值,若将节点与字词一一对应,您得到的输入矢量就会比较稀疏 - 即:矢量很大,但非零值相对较少。稀疏表示法存在多项问题(如下所述),这些问题可能会致使模型很难高效地学习。

1)网络的规模

巨型输入矢量意味着神经网络的对应权重数目会极其庞大。如果您的词汇表内有 M 个字词,而神经网络输入层上方的第一层内有 N 个节点,您便需要为该层训练 MxN 个权重。权重数目过大会进一步引发以下问题

  • 数据量:模型中的权重越多,高效训练所需的数据就越多。
  • 计算量:权重越多,训练和使用模型所需的计算就越多。这很容易就会超出您硬件的能力范围。
2)矢量之间缺乏有意义的联系

如果您已将 RGB 通道的像素值馈入到图片分类器中,分析“邻近”值便行得通。不管是从语义上来看,还是从矢量之间的几何距离来看,红蓝色与纯蓝色都是邻近的。不过,对于在索引 1247 处设为 1 以表示“马”的矢量而言,如果说它与在索引 238 处设为 1 以表示“电视机”的矢量不够邻近,那么它与在索引 50430 处设为 1 以表示“羚羊”的矢量亦然。(其实就是太多了,马和羚羊本来应该距离很近但是变得不容易表示)

解决方案:嵌套

上述问题的解决方案就是使用嵌套,也就是将大型稀疏矢量映射到一个保留语义关系的低维空间。在此模块的随后几个部分中,我们将从直观角度、概念角度和编程角度来详细探讨嵌套。

嵌套 (Embeddings):转换到低维度空间

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

即便是小型多维空间,也能自由地将语义上相似的项归到一起,并将相异项分开。矢量空间中的位置(距离和方向)可对良好的嵌套中的语义进行编码。例如,下面的真实嵌套可视化图所展示的几何关系图捕获了国家与其首都之间的语义关系。
在这里插入图片描述
借助这种有意义的空间,机器学习系统能够检测出对学习任务可能有帮助的模式。

收缩网络

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

但是,如何转换字词矢量的稀疏包呢?要获得表示多个词汇项(例如,一句或一段中的所有字词)的稀疏矢量的密集矢量,您可以检索各项的嵌套,然后将它们相加。

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

这些运算可能看起来很眼熟吧。

嵌套查询充当矩阵乘法

我们刚刚阐述的查询、乘法和加法程序等效于矩阵乘法。假设有一个 1 X N 的稀疏表示 S 和一个 N X M 的嵌套表 E,矩阵乘法 S X E 可以得出密集矢量 1 X M。

但首要问题是,如何获取 E 呢?

  • 标准降维技术:目前有很多在低维空间捕获高维空间重要结构的数学技术。理论上,这些技术都可以用来创建用于机器学习系统的嵌套。例如,主成分分析 (PCA) 已用于创建字词嵌套。在给定一组实例的情况下,例如字词矢量包,PCA 会尝试查找高度相关且可以合并的维度。
  • Word2vec:Word2vec 是 Google 为了训练字词嵌套而研发的一种算法。Word2vec 基于分布假设,将语义上相似的字词映射到在几何图形上邻近的嵌套矢量。(分布假设指出经常具有相同相邻字词的字词往往在语义上相似。“狗”和“猫”这两个字词经常靠近“兽医”一词出现,这就 可以说明这两个字词在语义上相似。)
  • 将嵌套训练为大型模型的一部分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值