机器学习20:嵌入-Embeddings

news2024/10/5 21:21:44

嵌入(Embeddings)是一个相对低维的空间,我们可以将高维向量转换到其中嵌入使得对大型输入(例如表示单词的稀疏向量)进行机器学习变得更加容易。理想情况下,嵌入通过将语义相似的输入紧密地放置在嵌入空间中来捕获输入的一些语义。嵌入可以在模型中学习和重用。

1.嵌入:协作过滤的动机

协同过滤 是基于大量其他用户的兴趣来预测目标用户的兴趣的方法之一。在本节,我们以协同过滤算法为例,来看一下电影推荐的实现。假设我们有 500,000 个用户,以及这些用户观看过的电影列表(来自 1,000,000 部电影的目录)。我们的目标是向用户推荐电影。

为了解决这个问题,需要某种方法来确定哪些电影彼此相似。我们可以通过将电影嵌入到一个低维空间中来实现这一目标,如此一来,相似的电影在这个“空间”中应该是邻近的。

在描述如何学习嵌入之前,我们首先探讨我们希望嵌入具有的质量类型,以及如何表示用于学习嵌入的训练数据。

1.1 在一维数轴上排列电影

为了更好地理解嵌入的含义,如下表所示,我们尝试在一张纸上将以下电影排列在一维数轴上,以便彼此最接近(最相似)的电影具有最密切的相关性:

电影评分描述
布鲁R一名法国寡妇在丈夫和女儿因车祸去世后悲痛不已。
黑暗骑士崛起PG-13在这部以 DC 漫画宇宙为背景的《黑暗骑士》续集中,蝙蝠侠致力于拯救哥谭市免遭核毁灭 。
哈利·波特与魔法石PG一名孤儿发现自己是一名巫师,并就读于霍格沃茨魔法学校,在那里他与邪恶的伏地魔展开了第一次战斗。
超人总动员PG一个超级英雄家庭被迫在郊区过着平民生活,他们从退休生活中恢复过来,以拯救超级英雄种族免受综合症和他的杀手机器人的侵害。
怪物史莱克PG一个可爱的食人魔和他的驴伙伴出发执行营救被龙囚禁在城堡里的菲奥娜公主的任务。
星球大战PG卢克·天行者和汉·索罗与两个机器人联手营救莱娅公主并拯救银河系。
贝尔维尔的三胞胎PG-13当职业自行车手冠军在环法自行车赛期间被绑架时,他的祖母和超重的狗在三位老年爵士歌手的帮助下远赴海外营救他。
纪念R一名失忆症患者迫切希望通过在身上纹上线索来侦破妻子的谋杀案。

如图 1 所示,虽然这种嵌入确实有助于了解电影针对儿童和成人的程度,但人们在提出推荐时还需要了解电影的更多方面。让我们更进一步地了解这个示例,添加第二个嵌入维度。

图 1. 可能的一维排列

1.2 在二维空间中排列电影

如图 2 所示,我们尝试将相同的电影排列在二维空间中。

图 2. 可能的二维排列

通过这种二维嵌入,我们定义了电影之间的距离,如果电影在面向儿童与成人的程度以及面向成人的程度方面相似,那么电影就在附近(因此推断为相似)。它们是大片与艺术电影。当然,这些只是电影的众多重要特征中的两个。

更一般地说,我们所做的是将这些电影映射到 嵌入空间 中,其中每部电影都由一组二维坐标来描述。例如,在此空间中,“Shrek” 映射到 (-1.0, 0.95),“Bleu” 映射到 (0.65, -0.2)。一般来说,在学习 d 维嵌入时每部电影都由 d 个实数值表示,每个实数值给出一维的坐标。

在此示例中,我们为每个维度指定了名称。学习嵌入时,各个维度不是通过名称来学习的。有时,我们可以查看嵌入并为维度分配语义,但有时则不能。通常,每个这样的维度称为 潜在维度,因为它代表数据中不明确的特征,而是从中推断出来的特征。

最终,有意义的是 嵌入空间 中电影之间的距离,而不是单个电影沿任何给定维度的值。

2.嵌入:分类输入数据

分类数据是指代表有限选择集中的一个或多个离散项目的输入特征。例如,它可以是用户观看过的一组电影、文档中的一组单词或一个人的职业。

分类数据通过稀疏张量来有效地表示,稀疏张量是具有很少非零元素的张量。例如,如果我们正在构建电影推荐模型,我们可以为每个可能的电影分配一个唯一的 ID,然后用每个用户观看过的电影的稀疏张量来表示,如图 3 所示。

图 3.我们的电影推荐问题的数据

图 3 中矩阵的每一行都是捕获用户观看电影历史记录的示例,并表示为稀疏张量,因为每个用户仅观看所有可能电影的一小部分。最后一行对应于稀疏张量 [1, 3, 999999],使用电影图标上方显示的词汇索引。

同样,我们可以将单词、句子和文档表示为稀疏向量,其中词汇表中的每个单词扮演的角色类似于我们推荐示例中的电影。

为了在机器学习系统中使用这种 表示,我们需要一种方法将每个稀疏向量表示为数字向量,以便语义相似的项目(电影或单词)在向量空间中具有相似的距离。但是如何将单词表示为数字向量呢?

最简单的方法是定义一个巨大的输入层,其中包含词汇表中每个单词的节点,或者至少为数据中出现的每个单词一个节点。如果数据中出现 500,000 个唯一单词,您可以表示一个长度为 500,000 向量的单词,并将每个单词分配给向量中的一个槽。

如果将 “horse” 分配给索引 1247,那么要将 “horse” 输入到网络中,就可以将 1 复制到第 1247 个输入节点,将 0 复制到所有其余输入节点。这种表示形式称为 one-hot 编码(在【机器学习8:特征组合-Feature Crosses】中有介绍),因为只有一个索引具有非零值。

更常见的是,您的向量可能包含较大文本块中的单词计数。这被称为 “词袋” 表示。在词袋向量中,500,000 个节点中的几个节点将具有非零值。

但是,无论我们如何确定非零值,每个单词一个节点都会提供非常 稀疏的 输入向量——即具有相对较少非零值的非常大的向量。稀疏表示存在一些问题,这些问题可能导致模型难以有效学习。

2.1 网络规模

巨大的输入向量意味着神经网络的权重数量巨大。如果您的词汇表中有 M 个单词,并且输入上方网络的第一层中有 N 个节点,则您有 MxN 权重来训练该层。大量的权重会导致进一步的问题:

  • 数据量。模型中的权重越多,有效训练所需的数据就越多。

  • 计算量。权重越多,训练和使用模型所需的计算量就越多。很容易超出硬件的能力。

2.2 向量之间缺乏有意义的关系

如果将 RGB 通道的像素值输入图像分类器,那么讨论 “接近” 值就有意义了。无论是在语义上还是在向量之间的几何距离方面,红蓝色都接近纯蓝色。但是,索引 1247 处为 1 的 “马” 向量与索引 50,430 处为 1 的 “羚羊” 向量并不比索引 238 处为 1 的 “电视” 向量更接近。

2.3 解决方案:嵌入

这些问题的解决方案是使用嵌入,它将大型稀疏向量转换为保留语义关系的低维空间。我们将在本模块的以下部分中直观地、概念性地和编程地探索嵌入。

3.嵌入:转换到低维空间

在实践中,我们可以通过将高维数据映射到低维空间来解决稀疏输入数据的核心问题。即使是一个小的多维空间也可以自由地将语义相似的项目组合在一起,并将不相似的项目分开。向量空间中的位置(距离和方向)可以在良好的嵌入中编码语义。例如,以下真实嵌入的可视化显示了捕获语义关系(例如国家与其首都之间的关系)的几何关系:

图 4 嵌入可以产生显着的类比

这种有意义的空间使您的机器学习系统有机会检测可能有助于学习任务的模式。

3.1 缩小网络规模

虽然我们需要足够的维度来编码丰富的语义关系,但我们还需要一个足够小的嵌入空间,以便我们能够更快地训练我们的系统。有用的嵌入可能是数百个维度的量级,不过,相较于自然语言处理,这里的词汇量小几个数量级。

4.嵌入:获取嵌入

获得嵌入的方法有很多种,包括 Google 创建的最先进的算法。

4.1 标准降维技术

有许多现有的数学技术可以在低维空间中捕获高维空间的重要结构。理论上,任何这些技术都可以用来创建机器学习系统的嵌入。例如,主成分分析(PCA)已被用来创建词嵌入。给定一组实例(例如词袋向量),PCA 尝试找到可以折叠为单个维度的高度相关的维度。

4.2 Word2vec

Word2vec 是 Google 发明的一种用于训练词嵌入的算法。Word2vec 依赖分布假设将语义相似的单词映射到几何上接近的嵌入向量。

分布假设指出,经常具有相同相邻单词的单词往往在语义上相似。“狗”和“猫”经常与“兽医”一词接近,这一事实反映了它们的语义相似性。正如语言学家约翰·弗斯 (John Firth) 在 1957 年所说的那样,“你应该通过它所拥有的同伴来认识一个单词”。

Word2Vec 通过训练神经网络来利用此类上下文信息,以区分实际同时出现的单词组和随机分组的单词。输入层采用目标单词以及一个或多个上下文单词的稀疏表示。该输入连接到单个较小的隐藏层。

在该算法的一种版本中,系统通过用随机噪声词替换目标词来形成反例。给定正例“飞机飞翔”,系统可能会替换“慢跑”以创建对比负例“慢跑飞翔”。

该算法的另一个版本通过将真实目标单词与随机选择的上下文单词配对来创建反例。因此,它可能会采用正面示例(the,plane),(flies,plane)和反面示例(compiled,plane),(who,plane)并学习识别哪些对实际上在文本中一起出现。

然而,分类器并不是这两个系统版本的真正目标。模型训练完成后,就得到了嵌入。我们可以使用连接输入层和隐藏层的权重将单词的稀疏表示映射到更小的向量。这种嵌入可以在其他分类器中重用。

有关 word2vec 的更多信息,请参阅 tensorflow.org 上的教程

4.3 将嵌入训练为更大模型的一部分

我们可以将学习嵌入作为目标任务神经网络的一部分。这种方法可以为特定系统提供良好定制的嵌入,但可能比单独训练嵌入需要更长的时间。

一般来说,当有稀疏数据(或您想要嵌入的密集数据)时,我们可以创建一个嵌入单元,它只是大小为 d 的特殊类型的隐藏单元。该嵌入层可以与任何其他特征和隐藏层组合。与任何 DNN 一样,最后一层将是正在优化的损失。例如,假设我们正在执行协作过滤,其目标是根据其他用户的兴趣来预测用户的兴趣。我们可以通过随机留出(或保留)用户观看过的少量电影作为正标签,将其建模为监督学习问题,然后优化 softmax 损失。

图 5. 用于从协作过滤数据学习电影嵌入的示例 DNN 架构

另一个例子,如果你想为房地产广告中的单词创建一个嵌入层作为 DNN 的一部分来预测房价,那么可以使用训练数据中已知的房屋售价来优化 L2 损失:标签。

当学习 维嵌入时,每个项目都会映射到 维空间中的一个点,以便相似的项目位于该空间中的附近。图 6 有助于说明嵌入层中学习到的权重与几何视图之间的关系。输入节点和 d 维嵌入层中的节点之间的边权重对应于每个 轴的坐标值。

图 6. 嵌入层权重的几何视图

5.参考文献

链接-https://developers.google.cn/machine-learning/crash-course/embeddings/video-lecture

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/716847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高中生用台灯哪种好?盘点好用的高中生护眼台灯

随着科技的进步,台灯的外观和造型都开始不断的变化,而且台灯的功能也越来越多元化,各式各样的台灯都有。论哪种台灯最适合高中生使用,我的回答是护眼台灯!因为台灯的主要作用就是照明,便于学习、阅读、工作…

基于Springboot+Vue的手机商城(源代码+数据库)081

基于SpringbootVue的手机商城(源代码数据库)081 一、系统介绍 本项目前后端分离(该项目还有ssmvue版本) 本系统分为管理员、用户两种角色 用户角色包含以下功能: 登录、注册、商品搜索、收藏、购物车、订单提交、评论、退款、收货地址管…

2023年5月 少儿编程 中国电子学会图形化编程等级考试Scratch编程一级真题解析(选择题)

2023年5月scratch编程等级考试一级真题 选择题(共25题,每题2分,共50分) 1、看图找规律,请问下图红框中是 A、 B、 C、 D、 答案:D 考点分析:

DS-font

paper:https://arxiv.org/pdf/2301.10008.pdf title: Few-shot Font Generation by Learning Style Difference and Similarity accepted: arXiv 2023 abstract 少镜头字体生成(FFG)旨在保留原始字符的底层全局结构,同时通过参考一些样本生成目标字体。它已应用于字体库创…

怎么解决找不到msvcp120.dll,msvcp120.dll一键修复方法

小伙伴们知道msvcp120.dll是什么文件吗?那么今天小编就来讲解电脑出现msvcp120.dll丢失的解决方法介绍,希望能够帮助到大家呢。 msvcp120.dll 是windows系统中必备的动态链接库文件。msvcp120.dll可以解决某些大型游戏、程序由于vs2010编译系统中缺失此dll的问题。…

R 语言的安装(详细教程)

文章目录 前言一、R 语言是什么?二、R 下载1. 官网2. download base3. download Rtools 三、Rstudio 下载1. 官网2. download Rstudio 四、R 安装五、Rtools 安装六、Rstudio 安装七、java 的环境配置八、运行 RStudio十、R 包安装策略1. 配置镜像1. 修改配置文件1.…

Microsoft遭遇DDoS攻击,3000万客户数据遭窃

6月初,微软部分服务遭遇严重中断,包括Outlook电子邮件、OneDrive文件共享应用程序和云计算基础设施Azure。 一个名为”匿名苏丹”的(又名“风暴-1359”)的组织声称对此次DDoS攻击负责。 匿名苏丹组织自2023年1月以来一直活动频繁,声称其目标…

SpinalHDL的使用和开发经验研讨会

SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。 达坦科技(DatenLord)致力于打造高性能跨云存储&#…

oracle 基础2

目录 1.oracle字符函数 2.oracle数值函数 3.Oracle日期函数 4.oracle转换函数 5.oracle多表实战 1.oracle字符函数 拼接 concat或 || 拼接三个参数 首字母大写函数 initcap 字符串改为小写 lower 转大写 upper 删除两边空格 trim 截取字符串 substr 替换字符串 repl…

html,css笔记1

这里写目录标题 一、快捷键及基础常识基础框架2.lang语言种类3.字符集4.HTML常用标签4.1标题标签(重要)4.2段落和换行标签(重要)4.3文本格式化标签 一、快捷键及基础常识 1.快速复制一行 快捷键:shiftalt下箭头 光标定位到要复制的一行 2.…

Python_元类

目录 什么是元类 理解类也是对象 动态地创建类 使用type创建类 使用type创建带有属性的类 使用type创建带有方法的类 那么再来思考一下,到底什么是元类 __metaclass__属性 自定义元类 究竟为什么要使用元类? 什么是元类 我们知道,实…

性能测试该怎么做,终于找到方法了

目录 开头 分类 服务器与场景设计 计算TPS 设计场景 场景运用 单交易最大压力: 单交易稳定性: 混合场景稳定性: 业务指标: 数据库 中间件 负载均衡: 最后: 开头 性能测试的工具有很多&#xf…

Unity中的Bezier曲线与曲面上点的计算

上代码: //获取基于4个控制点的Bezier曲线上的点 Vector3 GetBezierPoint(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) {t Mathf.Clamp01(t);float s 1f - t;return s * s * s * p0 3f * s * s * t * p1 3f * s * t * t * p2 t * t * t * p3; …

如何在 OpenCV 和 Python 中使用滑动窗口进行物体检测

文末附源代码的免费下载链接 目录 物体检测的滑动窗口技术讲解 使用 OpenCV 和 Python 实现滑动窗口技术 结论 代码下载链接

Python采集某漫画网站<灵剑尊>VIP漫画内容

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests 数据请求模块 parsel >>> pip install parsel 数据解析模块 安装方法: win R 输入cmd 输入安装命令…

【Django】列表数据Paginatior分页,动态返回页码,显示当前页、总页数、跳转页

问题 1、当返回数据较多,如设置每页展示10条,数据接近200条,返回页码范围1~20,前端每个页码都显示的话,就会出现页码超出当前页面,被遮挡的页码无法操作和显示不美观; 2、列表的所在页码,总分页数,跳转不在动态页面的页数 解决 在使用paginator转化为Page对象后,获…

BI测试(知识总结)

目录 前言 BI测试: 测试策略: 1、测试准备工作: 2、报表测试点 3、测试步骤(流程) 🎁更多干货 前言 由于之前做过一段时间大数据测试,故整理BI测试知识点以供学习。 BI测试&#xff1a…

2.网洛通讯模型

目录 osi七层参考模型 应用层——应用层序 表示层 会话层 传输层 网络层——ip地址,实现逻辑寻址 数据链路层(介质访问层MAC)(逻辑访问控制层LLC)——物理寻址 物理层——处理电信号 TCP/IP模型 TCP和UDP 不…

阿里领导给的Java八股文,包括15条技术线,已助1900人进入大厂!

为了更高的薪水跳槽无可厚非,但你要把握好一个度。 举个例子,如果你每次都只是为了能增长3%的年薪,而频繁地换工作。当HR看到你的简历时,你会被认为是一个对公司没有忠心、对自己的事业没有远见的人 如何准备? 除了…