向量嵌入是什么?理解LLM数据表示的基础

2024-08-21 18:52

本文主要是介绍向量嵌入是什么?理解LLM数据表示的基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

向量嵌入将数据转换为数学方程,赋予了人工智能的认知能力,但它们是如何使机器能够“学习”和“成长”的呢?

向量嵌入是什么?

向量嵌入是数据的数值表示,它捕捉了语义关系和相似性,使得对数据执行数学运算和比较成为可能,这些操作和比较可用于文本分析和推荐系统等各种任务。

随着关于生成性人工智能的讨论越来越多,支撑生成性人工智能背后的概念可能会有些令人望而生畏。在这篇文章中,我们将专注于一个功能性概念,这个概念赋予了人工智能的基础认知能力,并提供了机器学习模型学习和成长的能力,那就是向量嵌入。

向量嵌入,本质上是将数据表示为数学方程的能力。谷歌对向量嵌入的定义是“一种将数据表示为n维空间中的点的方法,使得相似的数据点聚集在一起”。

对于在数学上有很强背景的人来说,我确定这些话完全讲得通,但对于那些在数学概念的视觉表示上有所挣扎的人来说,这可能听起来像天书。

理解向量嵌入以及数据的数学表示

那么,让我们换一种方式来看这个问题。假设你有一碗你喜欢吃的M&M巧克力,而你最年幼的孩子决定调皮捣蛋,把一碗彩虹糖(Skittles)也混了进去。对于那些不一定熟悉这两种东西的人来说,M&M巧克力和彩虹糖都是两种色彩缤纷的糖果壳包裹的美味,看起来非常相似,但一个是巧克力,另一个是柑橘味,这两种口味并不搭配。所以为了解决这个问题,我们需要将糖果进行分类,我们决定按类型和颜色进行分类。所以所有的绿色M&M巧克力放在一起成一堆,所有的绿色彩虹糖放在一起成另一堆,所有的红色M&M巧克力和所有的红色彩虹糖,以此类推。当我们完成时,我们就有了按颜色分开的M&M巧克力和彩虹糖的明显堆,我们可以将它们视觉上排列,以便我们能够迅速看出新糖果属于哪一类。

 

在对我们的糖果进行分类的过程中,我们已经开始了布局模式和分组,这可以使糖果之间的关系更加容易,并在我们找到新的糖果时,快速找到我们需要的堆。向量嵌入则是将这种视觉表示应用数学表示到其位置。一个简单的思考方式是,如果我们给每个位置分配一个不同的值。

对于我们的糖果来说,现在可以根据它们的属性给每颗糖果分配一个值,然后根据这个数值将新的糖果放到正确的位置。这最终就是向量嵌入的本质,尽管其复杂性要远远超过这个比喻。

正是这种数学表示构成了认知能力的基础,赋予了生成性人工智能和机器学习模型(如自然语言处理、图像生成和聊天机器人)以类似神经的输入进行整理并做出决策的能力。单一的嵌入就像一个神经元,就像单个神经元不能构成大脑一样,单一的嵌入也不能构成一个人工智能系统。嵌入越多,这些嵌入之间的关系越多,就能拥有越来越复杂的认知能力。当我们将大量的嵌入组合到一个单一的存储库中,能够提供快速可扩展的访问,就像大脑一样,这被称为向量数据库。

但要真正理解向量嵌入是什么,以及它们为生成性人工智能提供的深远价值,我们必须了解它们的用途、它们的创建方式,以及它们能够表示哪些类型的数据。

示例:使用向量嵌入

我们在使用向量嵌入时面临的一个挑战是,它们几乎可以表示任何类型的数据。如果您查看计算机科学/编程语言中使用的大多数数据类型,它们都代表了数据的有限形式。字符(Chars)被设计来表示字符,整数(ints)被设计来表示整数,而浮点数(floats)被设计来表示具有小数点的更有限的数值表示。为了增强这些基础数据类型,已经创建了新的数据类型,如字符串和数组,然而这些类型仍然只能表示特定类型的数据。

从表面上看,向量数据类型似乎只是数组的一个扩展,允许数组是多维的,并且在绘制时提供方向性。然而,向量的最大进步是意识到从功能上讲,任何类型的数据都可以表示为向量,更重要的是,数据可以与其他数据进行比较,并且最终可以在这些多维平面内映射相似性。

好的,我们需要在这里解决一个问题,即使在写了上述内容之后,它仍然感觉像是词汇汤。所有这些到底意味着什么?我认为要真正理解向量是什么以及如何使用它,来自于Word2Vec的早期实现,这是谷歌在2013年发明的。

Word2Vec是一种技术,它将单词作为输入,将它们转换为向量,并使用这些向量创建图形,在这些图形中可视化同义词的聚类。

Word2Vec的工作方式实质上是为每个单词创建一个n维坐标映射或向量。在我们上述的例子中,我们有一个5维坐标映射,真正的向量映射可以有数百或数千个维度,这些维度太多,我们的思维无法可视化或理解。正是这些高维数据为机器学习模型提供了关联和绘制数据点的能力,用于语义搜索或向量搜索等功能。

在我们的上述图表中,你可以看到某些单词基于相似性的方面自然地聚集在一起。"Bunny"(小兔)和"rabbit"(兔子)彼此之间的关系比与"hamster"(仓鼠)更近,而所有这三个单词——"bunny"、"rabbit"和"hamster"——基于向量属性,与"hutches"(仓鼠笼)相比,它们彼此之间的关系更为紧密地聚集在一起。正是在n维空间内的这种方向性,允许神经网络处理最近邻搜索等功能性。

向量嵌入的应用是什么?

那么,这是如何应用的呢?嗯,最容易想象的方法之一是在推荐引擎中。以你正在流式传输你最喜欢的节目为例,如果我取这个节目的质量和方面将其向量化,然后取所有其他节目的质量和方面也将它们向量化,现在我可以使用这些质量来找到与我正在观看的节目在方向性上密切相关的其他节目。有了机器学习和人工智能,我观看并喜欢的节目越多,系统就从我在n维图中感兴趣的区域获得更多信息,并根据这些质量为我做出推荐。

另一个应用示例是在搜索中,例如谷歌的反向图像搜索。使用向量进行反向图像搜索非常快速和容易,因为当图像被输入时,反向搜索引擎可以将其转换为向量,然后使用向量搜索,它可以在n维图中找到图像应该在的特定位置,并为用户提供围绕该图像的任何额外元数据。

数据向量化的应用在这一点上确实是无限的。一旦数据被转换为向量,就可以进行欺诈或异常检测。作为机器学习模型的一部分,可以进行数据处理、转换和映射。聊天机器人可以输入产品文档,并提供一个自然语言界面,与试图弄清楚如何使用特定功能的用户体验交互。

向量嵌入是实现机器学习和人工智能的核心组件。一旦数据被转换为向量,我们需要将所有向量存储在一个高度可扩展、高性能的存储库中,称为向量数据库。一旦数据被转换并以向量形式存储,那么这些数据现在就可以驱动多种不同的向量搜索用例。

创建向量嵌入

那么向量嵌入包含哪些内容,又是如何创建的呢?创建向量嵌入首先从一个离散数据点开始,该数据点被转换为高维空间中的向量表示。对于我们的目的来说,在低维的3D空间中可视化可能是最容易的。假设我们有三个离散数据点,分别是单词"cat"(猫)、"duck"(鸭子)和"mudskipper"(泥跳鱼,一种能在陆地上行走的鱼类)。我们将根据它们是行走、游泳还是飞行来评估这些单词。以单词"cat"为例。猫主要行走,所以让我们为行走分配一个值为3,猫可以游泳,但大多数猫不喜欢游泳,所以让我们为游泳分配一个值为1,最后,我不知道有任何猫能够自行飞行,所以让我们为飞行分配一个值为0。

所以猫的数据点是:

Cat: (Swims - 1, Flies - 0, Walks - 3)

如果我们对单词"duck"和"mudskipper"做同样的事情,我们得到:

Duck: (Swims - 2, Flies - 2, Walks - 2) Mudskipper: (Swims - 3, Flies - 0, Walks - 1)

根据这个映射,我们可以将每个单词绘制到一个三维图表中,所创建的线就是向量嵌入。Cat [1,0,3],Duck [2,2,2],Mudskipper [3,0,1]。

一旦我们所有的离散对象(单词)都转换为向量,我们就可以基于语义相似性看到它们彼此之间的关系有多密切。例如,很容易看出所有三个单词都绘制在z轴上,因为所有这些动物都能行走。当你在图的平面上查看向量表示时,机器学习等事物的真正力量就显现出来了。例如,如果我们比较这些动物在行走和游泳方面的表现,我们可以看到猫与鸭子的关系比与泥跳鱼更近。

在我们的示例中,我们只有3维空间,但在真正的向量嵌入中,向量跨越了一个N维空间。正是这种多维表示被机器学习和神经网络用来做出决策,并启用层次化的最近邻搜索模式。创建向量嵌入时可以采取两种方法:特征工程,它需要利用领域知识和专业技能来量化用于定义向量不同顶点的“特征”集合;或者使用深度神经网络来训练模型,将对象转换为向量。训练模型往往是最常用的方法,因为尽管特征工程提供了对领域的深入理解,但它在扩展时需要太多时间和成本,而训练模型可以生成密集的高维(数千维)向量。

预训练模型

预训练模型是为解决一般问题而创建的模型,可以原样使用或作为起点来解决复杂、有限的问题。有许多不同类型的数据都有预训练模型的示例。BERT、Word2Vec和ELMo是用于文本数据的众多模型中的一些。这些模型已经在非常大的数据集上进行了训练,可以将单词、句子以及整个段落和文档转换为向量嵌入。但预训练模型并不仅限于文本数据。图像和音频数据通常也有一些普遍可用的预训练模型。像使用卷积神经网络(CNN)模型的Inception,以及使用扩散模型的Dall-E 2这样的模型。

向量嵌入可以嵌入哪些类型的事物?

向量嵌入提供的一个关键机会是能够将任何类型的数据表示为向量嵌入。目前有许多例子,其中文本和图像嵌入被大量用于创建解决方案,例如使用GPT-4等工具的自然语言处理(NLP)聊天机器人,或者像Dall-E 2这样的生成性图像处理器。

文本嵌入

文本嵌入可能是最容易理解的,我们大多数例子的基础。文本嵌入从基于文本的对象的数据语料库开始,例如大型语言模型Word2Vec,它们使用来自像维基百科这样的大型数据集。但文本嵌入几乎可以用于任何类型的基于文本的数据集,以便快速轻松地搜索最近邻或语义相似的结果。

例如,假设您想创建一个NLP聊天机器人来回答有关您的产品的问题,您可以使用产品文档和产品常见问题解答(FAQs)的文本嵌入,使聊天机器人能够根据提出的问题做出回应。或者,您想要将多年来收集的所有食谱作为数据语料库,并使用这些数据提供基于您厨房中所有食材的食谱?文本嵌入带来的能力是将单词、段落和文档等非结构化数据以结构化形式表示。

图像嵌入

像文本嵌入一样,图像嵌入可以表示图像的多个不同方面。从完整的图像到单个像素,图像嵌入提供了对图像具有的特征集进行分类的能力,并将这些特征以数学方式呈现,供机器学习模型分析或供像Dall-E 2这样的图像生成器使用。

图像嵌入最常见的用途之一是用于分类和反向图像搜索。例如,如果我有一张在后院拍摄的蛇的图片,我想知道它是什么类型的蛇,它是否有毒。有了所有不同类型蛇的大型数据语料库,我可以将我的蛇的图像输入到所有蛇的向量数据库中,并找到与我的图像最接近的邻居。从那次语义搜索中,我可以提取与我的蛇最接近的邻居图像的所有“属性”,并确定它是什么类型的蛇,以及我是否应该担心。

向量嵌入的另一个使用示例是像Google Magic Photo Editor这样的自动图像编辑,它允许通过生成性AI编辑图像,对图像的特定部分进行编辑,例如从背景中移除人物或添加更好的构图。

产品嵌入

向量嵌入在推荐引擎中的另一个使用示例。产品嵌入可以是电影、歌曲或洗发水等任何东西。有了产品嵌入,电子商务网站可以通过搜索结果、点击流和购买模式观察购物者的行为,并基于语义相似性进行推荐。

例如,假设我访问了我最喜欢的在线零售商。我在浏览网站,为我刚得到的新小狗添加了很多东西到购物车。我添加了快要用完的小狗食物、一个新的皮带、一个狗碗和一个水碗。然后我搜索网球,因为我想让我的新小狗有一些玩具可以玩。现在我真的对网球感兴趣,还是对狗玩具感兴趣?如果我在当地宠物店,有人帮助我,他们会清楚地看到我实际上对网球不感兴趣,我实际上对狗玩具感兴趣。产品嵌入带来的能力是从我的购买体验中获取这些信息,使用为每个产品生成的向量嵌入,专注于狗,并预测我实际上在寻找什么,那就是狗玩具,而不是网球。

文档嵌入

文档嵌入将文本嵌入的概念扩展到更大的文本体,如整个文档或文档集合。这些嵌入捕获文档的整体语义含义,使文档分类、聚类和信息检索等任务成为可能。例如,在企业环境中,文档嵌入可以帮助根据它们的语义内容从大型内部存储库中分类和检索相关文档。它们也可以在法律技术中用于分析和比较法律文件。

音频嵌入

音频嵌入将音频数据转换为向量格式。这一过程涉及从音频信号中提取特征,如音高、音调和节奏,并以可以被机器学习模型处理的方式表示它们。音频嵌入的应用包括语音识别、基于声音特征的音乐推荐,甚至从口语中检测情感。音频嵌入在开发可以理解语音命令的系统(如智能助手)或根据用户收听历史推荐音乐的应用程序中至关重要。

句子嵌入

句子嵌入将单个句子表示为向量,捕获句子的含义和上下文。它们在情感分析等任务中特别有用,其中理解句子的微妙情感至关重要。句子嵌入也可以在聊天机器人中发挥作用,使它们能够更准确地理解并响应用户输入。此外,它们在机器翻译服务中至关重要,确保翻译的句子保留原始含义和上下文。

词嵌入

词嵌入是文本嵌入的最细粒度形式,将单个词转换为向量。这些嵌入捕获词之间的语义关系,如同义词和反义词,以及上下文用法。它们是自然语言处理任务(如文本分类、语言建模和同义词生成)中的基础。词嵌入还用于搜索引擎,通过理解搜索查询的语义含义来提高搜索结果的相关性。

这篇关于向量嵌入是什么?理解LLM数据表示的基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093996

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝