应用这些概念来解决深度学习中的实际行业问题
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第1张-四海吧 使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第1张](https://miro.medium.com/v2/resize:fit:640/format:webp/1*JUXKFFHjjSfkG4pxDoeLCQ.png)
远离传统机器学习(ML),嵌入是大多数深度学习(DL)用例的核心。掌握这个概念使您能够在特征空间中执行灵活的任务,并以不同方式重新构建ML/DL问题,特别是在计算机视觉和自然语言处理中处理高维数据。
嵌入目前已经在许多应用领域产生了显著影响,包括大型语言模型(LLMs)。尽管这些伟大的概念在嵌入周围零散地存在,但文献中缺乏不同行业应用的连贯蓝图以及如何在该领域入门!这就是为什么本文将带您了解如何利用嵌入并将它们应用于实际的行业问题。
“本文是两篇系列文章的第一篇。它旨在作为初学者指南介绍不同类型的流行开源模型,同时让您熟悉嵌入的核心概念。”
嵌入的直观解释
嵌入是离散变量的低维、学习得到的连续向量表示[1]。
我们可以将这个定义分解并吸收其中的重要点:
- 比输入数据的维度低
- 对数据进行压缩表示
- 作为线性表示来捕捉模型学习到的复杂非线性关系
- 通过存储相关信息并丢弃噪声来减少维度
- 通常从神经网络的最后几层(分类器之前)中提取
让我们通过一个例子直观地理解定义和嵌入的真正潜力。假设我们根据客户调查表分析呼叫中心操作员的绩效。这些表格由数千名客户提交,包含数百万个唯一的单词。为了执行任何文本分析,我们的输入参数集将会非常庞大,并且可能导致性能不佳。这就是嵌入发挥作用的地方!
我们不使用原始的输入参数集,而是将所有唯一的单词表示为嵌入。通过这种方式,我们减少了维度,并将输入特征集减少到了更易处理的9个。通过可视化操作员的嵌入,很容易发现操作员B和C收到了类似的客户反馈。这里还有另一个例子。[2]
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第2张-四海吧 Image by author](https://miro.medium.com/v2/resize:fit:640/format:webp/1*N0a-NTCRH1NNL7tj2O5cMA.png)
我们可以用嵌入做什么?
在本系列的第一部分中,我们将探索以下嵌入的应用:
- 使用文本嵌入来查找相似的文本
- 使用视觉嵌入来查找相似的图像
- 使用不同类型的嵌入来查找相似的项目
- 使用不同权重的嵌入来查找相似的项目
- 将图像和文本嵌入放在同一个空间中(多模态)
每个点都建立在前一个点的基础上,产生了一个乘法效应。代码片段是独立的,适合初学者玩耍。它们可以用作创建更复杂系统的基石。现在,让我们深入探讨下面每个用例。
I. 使用文本嵌入来查找相似的文本
文本嵌入 = 在较低维空间中将文本(单词或句子)表示为实数向量。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第3张-四海吧 Text Embeddings](https://miro.medium.com/v2/resize:fit:640/format:webp/1*d_vK3JDebQNJB_IQIoGwIQ.png)
现在,假设我们想知道上述句子之间的相似度或不相似度。我们可以使用文本编码器来实现。在这里,我们使用了Hugging Face的预训练DistilBERT来计算文本嵌入,并使用余弦相似度来计算相似度!
使用余弦相似度比较不同文本的DistilBERT文本嵌入
我们观察到,包含相似和匹配词汇的文本将获得更高的相似度分数。另一方面,词汇选择、意义和上下文(取决于模型!)不同的文本将导致较低的相似度分数,如下所示。因此,文本嵌入旨在利用词汇的语义接近性建立有意义的关系。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第4张-四海吧 使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第4张](https://miro.medium.com/v2/resize:fit:640/format:webp/1*dhmgi-sf3KO_q0y2ZyDMGA.png)
实际应用:文件搜索、信息检索、情感分析、搜索引擎[3]
II. 使用视觉嵌入查找相似图像
视觉嵌入 = 将图像(即像素值)表示为低维空间中的实值向量。
现在我们想知道两个图像在视觉上有多相似。我们可以使用图像编码器来实现这一点。在这里,我们使用预训练的ResNet-18来计算视觉嵌入。您可以在此处下载图像[4]。
与文本类比,从图像中学到的嵌入是基于类似的视觉特征来判断相似性。例如,视觉嵌入可能学会识别猫的耳朵、鼻子和胡须,得分为0.81。另一方面,狗与猫具有不同的视觉特征,导致较低的相似度得分为0.50。请注意,根据所选择的图像可能存在一些偏差,但这是一般的基本原则。因此,视觉嵌入旨在利用图像像素的接近性建立有意义的关系。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第5张-四海吧 左侧和右侧图像之间的相似度分数](https://miro.medium.com/v2/resize:fit:640/format:webp/1*o7yQj9C0-r74dG29NrIcPg.png)
实际应用:推荐系统、图像检索、相似性搜索
III. 使用不同类型的嵌入查找相似项
之前,我们讨论了嵌入是一种以压缩形式表示输入信息的方式。这些信息可以是任何类型的,从各种文本属性到视觉属性等等。自然地,我们可以使用更多属性来描述一个项,相似性的信号就越强。
让我们通过一个简单的例子来一起理解这个概念。下面,我们有一个包含五个食品项的数据集。我自己创建了这些属性,并使用了Pillow库生成了样本颜色(在此处浏览脚本)。您可以在此处下载数据(产品图像由[5]提供)。对于每个项,我们有5个文本属性和2个视觉属性。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第6张-四海吧 使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第6张](https://miro.medium.com/v2/resize:fit:640/format:webp/1*eUgRay4ccv8pI75ZwXXcOQ.png)
对于这些属性中的每一个,我们可以提取一个表示特定属性的嵌入向量。现在会出现一个自然的问题:我们如何决定什么是相似的?例如,我们看到两个句子可能是相似的,但如果我们将它们可视化,它们看起来会一样吗?相反,两个动物可能具有相似的分数,因为它们看起来相似,但如果我们使用特征来描述它们,它们还是相似吗?在这里就有利用我们可以获得的不同类型的嵌入的机会。
我们首先通过简单地连接这些单词来创建一个称为“TEXTUAL_ATTR”的文本特征。请注意,这里我们只是举了一个简单的例子。在实际应用中,我们需要在连接之前应用先进的自然语言处理技术来清理文本数据。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第7张-四海吧 将各个文本属性合并为一个属性](https://miro.medium.com/v2/resize:fit:640/format:webp/1*aykY_LeZaJr7equIN8J-1g.png)
下面的GIF演示了当我们考虑到文本嵌入或视觉嵌入时会发生什么。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第8张-四海吧 仅使用'TEXTUAL_ATTR'嵌入进行相似性比较](https://miro.medium.com/v2/resize:fit:640/1*TLSYoEAZkp6ntpKlRsDyvg.gif)
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第9张-四海吧 仅使用‘PRODUCT_IMAGE’嵌入的相似度](https://miro.medium.com/v2/resize:fit:640/1*DFmkocTaI59WXZ0deZgbdw.gif)
如上所述,这两种方法都有局限性。因此,我们可以采用机器学习中的集成方法,将上述嵌入组合起来,以尽可能提供有关物品的更多信息。这有助于我们获得更强的相似性信号。例如,我们可以通过使用文本、产品图像和产品颜色嵌入来找到相似的物品。
让我们看看当我们结合所有嵌入时会发生什么!
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第10张-四海吧 使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第10张](https://miro.medium.com/v2/resize:fit:640/1*8DavhHxI5ueuIi9cOASNKg.gif)
实际应用:推荐系统,替代搜索
IV. 使用不同的权重来找到相似的物品
这个概念建立在第三点的基础上,是一种更灵活的扩展。让我们以以下三种不同的情景为例:
- 你在Costco寻找一台替代的烤面包机。你希望它具有与之前的烤面包机相同的功能。在这种情况下,你不在乎你的烤面包机是否与旧的相同,但你关心它提供的功能(即文本特征)。在这种情况下,你只需要使用文本嵌入。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第11张-四海吧 作者提供的图片](https://miro.medium.com/v2/resize:fit:640/format:webp/1*mn1Yc6DmMQ3BaYRNKpBMkg.png)
- 我撕破了我最喜欢的裤子,因为我非常喜欢它们,所以我希望找一条尽可能接近的替代品。我愿意放弃一些我旧裤子的特点,但我关心它们的美观和适合我穿的样子。在这种情况下,我们可以在视觉嵌入上放置更多权重,并在文本嵌入上稍微降低权重。
- 如果给定的数据具有某些背景元素,比如人体模型,我们有可能学习到人体模型的特征而不是我们感兴趣的实际产品。在下面的示例中,我们想要学习篮球的特征而不是持球的模型。在这种情况下,我们可以简单地在全身图像上放置较低的权重,并在文本属性以及产品颜色上放置更高的权重,以捕捉所需的嵌入。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第12张-四海吧 [6]提供的图片](https://miro.medium.com/v2/resize:fit:640/format:webp/1*Fq9taYS1MDiiUFx-8m1fkQ.png)
在这些情况下,使用不同的权重使我们能够控制哪些嵌入集对我们重要,以及如何操纵它们。这个想法可以用来构建灵活的系统,解决不同类型的业务问题。
实际应用:减少偏差,可调节的推荐系统,可调节的相似性搜索[7][8]
V. 将图像和文本嵌入放入相同的空间(多模态)
到目前为止,我们一直将文本和视觉数据视为完全独立的输入。我们最接近的是在第三点的推理阶段将它们的效果结合起来。但如果我们将文本和图像视为对象呢?我们如何共同表示这些对象?
答案是多模态和CLIP(对比语言-图像预训练[9])。如果你不确定多模态是什么意思,它简单地将不同类型的数据(文本、图像、音频、数值)结合起来,以进行更准确的预测。使用CLIP,我们可以将对象(在这种情况下,文本或图像)表示为数值向量(嵌入),以帮助将它们投影到相同的嵌入空间。
CLIP的多模态性的真正价值在于将文本和图像中的类似概念转化为相似的向量。然后根据它们的相似程度将这些向量放置在彼此附近。这意味着如果一个文本很好地捕捉到了一个图像的概念,它就会被放置在靠近该图像的位置。类似地,如果一个图像被一个句子很好地描述,它就会靠近该句子。在下面的示例中,文本“狗在海滩玩耍”输出与一张狗在海滩玩耍的图像相似的嵌入。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第13张-四海吧 相似的对象(例如文本、图像)在向量空间中靠近彼此编码。GIF由作者制作,图像由[10]提供](https://miro.medium.com/v2/resize:fit:640/1*L-xy0aBKaJojlRXoXahs1g.gif)
如上图所示,CLIP通过将文本的语义与图像的视觉相结合,解锁了在文本和图像领域之间移动的能力(从图像到文本,从文本到图像)。我们还可以在特定领域内进行移动,例如从文本到文本或从图像到图像。这为从推荐系统到自动驾驶汽车、文档分类等强大应用提供了可能性!
让我们使用HuggingFace的CLIP演示一个文本到图像的示例。我们将使用食物图片[5],如第III点所示。这个想法是直接从文本到图像进行遍历。
观看下面的视频,我将在现场演示中为您演示,或在这里自己尝试!
我们在上面的演示中看到了一些很酷的结果!数据集包含两张蛋糕的图片。在查找“蛋糕”时,我们首先得到一张包含巧克力蛋糕的图片。然而,当我添加更多描述性关键词,如“红丝绒”,它给我一个红丝绒蛋糕的切片。尽管这两张图片在某种意义上都描绘了一个蛋糕,但只有其中一张是模型识别出来的红丝绒蛋糕。同样地,当我们查找“鱼和薯条”时,我们得到一盘鱼和薯条,但只有“薯条”给我们一盒炸薯条。尽管炸薯条和油条看起来很相似,但模型也能区分它们。
现在,让我们以类似的方式进行图像到文本的操作。在这里,我们从第II点中使用示例[4]来分类图像是狗还是猫。
对于每张图片,我们得到文本匹配图像的概率。在猫图像的情况下,标签“猫”具有很高的概率。另一方面,狗图像被分类为“狗”。
![使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第14张-四海吧 使用嵌入(Embeddings)可以做的10件酷事![第一部分] 四海 第14张](https://miro.medium.com/v2/resize:fit:640/format:webp/1*RuiVHr6vmKgZbQMFZXUI3w.png)
现实世界的应用:文本到图像(查找),图像到图像(相似性),图像到文本(分类)
在系列的第二部分中,我们将探讨更多应用,涵盖从艺术到酷炫的可视化。敬请关注!
如果您觉得这篇文章有用,并且相信其他人也会觉得有用,请鼓掌!如果您想保持联系,您可以在这里找到我的LinkedIn。
Zubia是一位高级机器学习科学家,致力于产品发现、个性化和生成设计方面的工作。她是一位导师、讲师,也是与计算机视觉、数据科学、STEM领域的女性/有色人种以及科技职业相关的演讲者。
参考资料
[1]: 嵌入的定义
[2]: 嵌入的解释
[3]: 谷歌使用BERT文本编码器的搜索引擎
[4]: 来自Dogs vs. Cats(Kaggle)的图像
[5]: 来自Food Images(Food-101)的图像
[6]: Malik Skydsgaard在Unsplash上的照片
[7]: 结合不同类型的嵌入
[8]: 用于推荐系统的嵌入
[9]: OpenAI的CLIP
[10]: 图像由Oscar Sutton、Hossein Azarbad在Unsplash上提供
[11]: CLIP博客