理解相似性搜索(也称为语义搜索)的指南

news2025/1/18 7:27:25

了解人工智能相似性搜索
理解相似性搜索(也称为语义搜索)的指南,这是人工智能最新阶段的关键发现之一。

目录

  • 一、说明
  • 二、向量
  • 三、人工智能中的向量
  • 四、将文本转换为向量
  • 五、创建向量嵌入
  • 六、存储向量嵌入
  • 七、相似性搜索
  • 八、执行相似性搜索
  • 九、知识检索
  • 十、知识检索即服务
  • 十一、概括

一、说明

人工智能最新阶段的关键发现之一是能够基于相似性搜索来搜索和查找文档。相似性搜索是一种根据信息的含义而不是通过关键字来比较信息的方法。

相似性搜索也称为语义搜索。语义一词是指“特定上下文中单词、短语或符号的含义或解释”。通过语义搜索,用户可以提出这样的问题:“主角爬过 500 英尺的鸡粪的电影是什么?”人工智能将回应“肖申克的救赎”。通过关键字搜索来执行这种搜索是不可能的。

语义搜索开启了各种可能性,无论是研究人员试图从大学馆藏中查找特定信息,还是让开发人员在查询 API 文档时访问精确信息。

语义搜索的天才在于我们可以将整个文档和文本页面转换为其含义的表示。

本文的目的是提供语义搜索的基础知识及其背后的基础数学。通过深入了解,您可以利用这项新技术为用户提供非常有用的工具。

这项技术的关键是向量数学。

二、向量

您可能还记得高中或大学时向量的概念。它们在物理学中经常使用。在物理学中,矢量被定义为大小加上方向。例如,汽车以 50 公里/小时的速度向北行驶。

向量可以用图形表示:
在这里插入图片描述

向量
向量在人工智能中具有不同的含义,我们很快就会谈到。我将向您介绍如何从物理学中的向量转变为人工智能中的向量。

回到我们的图形表示,如果我们将其绘制在图表中,我们可以表示二维向量。
在这里插入图片描述

二维向量
向量的末端可以由其在 x 轴和 y 轴上的值表示。这个向量可以用点[4, 3]来表示。

有了这一点我们就可以用三角学来计算它的大小和方向。

如果我们创建一个 3 维向量,我们需要三个值来表示空间中的向量。
在这里插入图片描述
三维向量
该向量由点 [2, 3, 5] 表示。我们再次可以应用三角学来计算幅度和方向。

我们可以对 2 维或 3 维向量执行的有趣计算之一是确定向量之间的相似性。

在物理学中,我们需要执行的计算之一是向量相似度(这导致了人工智能相似度搜索)。例如,在材料科学的研究中,矢量可用于比较负载下材料内的应力或应变矢量。

在图中,如果我们有相似的应力矢量,我们可以看到材料上的应变方向相同。而相反的力会对材料施加特定的应力。

在这里插入图片描述

向量相似度
使用三角学,我们可以确定哪些向量最相似或最不相似。

三、人工智能中的向量

需要注意的是,向量可以用值数组来表示。对于三维向量,由三个点 [1, 3, 4] 描述。

在人工智能中,我们使用数组来表示一组数据中的不同信息。例如,如果我们使用机器学习来预测房价,我们可以用数组表示所有信息。

让我们看一个非常简单的例子,其中我们只有三个数据点来代表每栋房子。数组的每个元素都代表房子的不同特征。例如:

价格:一美元价值。
卧室数量:整数值。
尺寸:以平方英尺为单位测量。
假设的房子将表示为:

房屋:[300000, 3, 400]

使用我们的 3 维住房数据,我们现在可以创建一个算法来创建住房推荐引擎。这是由数据数组表示的三栋房屋:

1号屋:[300000, 3, 400]

2号楼:[320000, 3, 410]

3号楼:[900000, 4, 630]

将这三所房子绘制成三维图,我们得到下图。

在这里插入图片描述

房屋以三个维度绘制
如果用户想要找到与房屋 1 最相似的房屋,则可以快速确定房屋 2 是最相似的,并且推荐引擎可以将该房产的详细信息返回给用户。

在机器学习中,房屋数组被称为向量。向量之所以如此有趣,是因为物理向量中使用的数学同样适用于数字数组。因此,我们使用术语向量。

当向量包含三个以上数据点时,就无法可视化。房屋向量可以包含许多数据点,例如位置、质量得分、年龄、浴室数量等。完整的房屋向量可能如下所示:

[300000, 3, 400, 122.2, 83.4, 87, 43, 3]

这被称为高维向量。在这种情况下,维度是指数据的一个特征。价格是一个维度。尺寸是另一个维度,所以也是如此。高维向量不能在 3 维空间中表示,但是,相同的概念和数学适用。我们仍然可以通过查找最相似的高维向量来运行我们的推荐引擎。

四、将文本转换为向量

当我们开始将文本转换为向量时,事情开始变得真正有趣。现代人工智能的天才之处在于能够将单词、短语甚至文本页面转换为代表该信息含义的向量。

让我们从一个词开始:“猫”。

专门的人工智能模型可以将“猫”一词转化为向量。该向量代表了单词 cat 的含义,因为它与训练数据中的其他单词相关。这些专门的人工智能使用预先训练的模型,这些模型已经学会了如何将文本表示为高维向量。这些向量根据文本在训练数据中的使用情况来捕获文本之间的语义和关系。

将文本转换为向量称为向量嵌入。

“猫”可能由 300 维向量表示。

[ 0.49671415、-0.1382643、0.64768854、1.52302986、-0.23415337、-0.23413696、1.57921282、…]

另一方面,“狗”可以用向量表示:

[ 1.69052570, -0.46593737, 0.03282016, 0.40751628, -0.78892303, 0.00206557, -0.00089039, …]

如果我们将 Cat 和 Dog 向量简化为二维,它可能看起来像这样。

在这里插入图片描述

猫和狗矢量
我们可以采用第三个单词“Kitten”,创建向量嵌入并将其表示在这个二维空间中。

小猫向量:[-0.05196425、-0.11119605、1.0417968、-1.25673929、0.74538768、-1.71105376、-0.20586438、…]

在这里插入图片描述

猫、狗和小猫矢量
假设我们有一系列有关喂养猫和狗的文章,并且我们的用户提出以下问题:

我该如何喂养我的小猫?

通过使用相似性搜索,人工智能确定小猫在语义上更接近猫而不是狗,因此返回有关如何喂养猫的文章。

这就是相似性/语义搜索的根本基础。通过将文本转换为向量嵌入,我们有一种方法来确定与其他信息的语义相似性。

另一个例子可能是获取图书馆书籍的摘要并将其转换为向量嵌入。下图显示了按类型分类的书籍。您会发现这些书往往会分成几组。
在这里插入图片描述

书籍向量嵌入的视觉表示
如果用户正在寻找与《沙丘》类似的书籍的推荐,它会看到《沙丘》聚集在“科幻小说”类型中,并返回诸如“2001:太空漫游”之类的推荐。

五、创建向量嵌入

矢量嵌入是由专门的人工智能模型创建的。 OpenAI 有他们的text-embedding-ada-002模型。

通过简单的 API 调用,文本可以传递到模型,该模型将生成向量嵌入。 OpenAI 向量嵌入通常在 1500 到 3500 个元素之间,具体取决于所使用的具体模型。

有关使用 OpenAI 嵌入端点的信息,请查看:https://platform.openai.com/docs/guides/embeddings

Anthropic 及其 Claude 模型还提供 1024 个元素的向量嵌入:https://docs.anthropic.com/claude/docs/embeddings

从编程的角度来看,每个嵌入人工智能模型都会以数组的形式返回向量,这使得使用起来很容易。

只需调用 API 即可创建向量嵌入。

六、存储向量嵌入

向量嵌入可以存储在任何类型的数据存储中。我在早期测试期间使用了 CSV 文件(尽管绝对不推荐用于任何严肃的应用程序)。

然而,过去几年开始出现了专门的向量数据库。它们与传统数据库的不同之处在于它们针对处理向量进行了优化。这些数据库提供了有效计算这些高维向量之间相似性的机制。

让我们看看矢量数据库的架构是什么样的。假设我们正在运营一家金融科技公司,可以访问数千份财务报表,我们希望能够使用人工智能来查询这些文档。

在这里插入图片描述

矢量数据库行。
该矢量数据库具有三个字段:

doc_name:文档的名称。
doc_url:原始源文档的存储位置。
doc_vector:PDF文档的向量嵌入。
实际上每个主要的数据库管理系统都发布了矢量数据库的版本。

PostgreSQL:他们发布了一个扩展调用 pgvector https://www.postgresql.org/about/news/pgvector-050-released-2700/

Redis:矢量搜索
https://redis.io/solutions/vector-search/

MongoDB:Atlas矢量搜索
https://www.mongodb.com/products/platform/atlas-vector-search

Pinecone:专门的矢量数据库
https://www.pinecone.io/

矢量数据库的选择实际上取决于您的开发偏好。

七、相似性搜索

矢量数据库针对相似性搜索进行了优化。有几种不同的数学方法,最常见且最容易实现的是使用余弦相似度。

余弦相似度是一种三角度量,用于确定两个向量的相似程度。数学计算确定两个向量之间角度的余弦。小角度的余弦接近 1,90 度角的余弦为 0。非常相似的向量的余弦将接近 1。

在这里插入图片描述

两个向量的余弦相似度
没有必要涵盖计算余弦相似度的数学知识,除非您是像我一样的数学极客,在这种情况下,该视频很好地解释了它:https://www.youtube.com/watch ?v=e9U0QAFbfLI

主要结论是相似性得分越接近 1,向量就越相似。

矢量数据库提供了执行余弦相似度的函数,您可以在其中设置参数,例如要返回的结果数。例如,您可能想要三个最接近的结果。

八、执行相似性搜索

执行相似性搜索需要几个步骤。

  1. 将源文档转换为向量嵌入并将其存储在向量数据库中。
    在这里插入图片描述

将源文档存储为向量
在此过程中,每个源文档都会被输入到嵌入人工智能中,由人工智能创建向量嵌入。然后,这些向量嵌入连同对原始源文档的引用一起保存在向量数据库中。

对于图书馆来说,这可能是过去 100 年的报纸文章的集合。

  1. 将查询转换为向量并使用余弦相似度来查找与查询最相似的文档。

在这里插入图片描述

将查询转换为向量并使用余弦相似度搜索
在此过程中,用户查询本身被转换为向量。该向量用作向量数据库中的搜索向量,以查找最能回答查询的文档。

对于我们的图书馆来说,查询可能是“我正在寻找一篇有关 1950 年 Chinchaga 火灾的报纸文章”。

该查询本身被转换为向量并传递到向量数据库,该数据库使用其相似性搜索来查找与查询含义最相似的报纸文章。我们可能希望返回最上面的结果。

矢量数据库将返回文章的名称和实际源文本的 URL。

  1. 将查询连同源文档一起发送给LLM以验证请求。

在这里插入图片描述

将查询和源文档发送给 LLM
这是拼图的最后一块。查询与原始源文本一起发送到大型语言模型以处理针对文档的查询。使用的 LLM 可以是 Claude、OpenAI、Gemini 或任何开源模型,例如 Llama 或 Mistral。

在我们的库示例中,它将检查源文档是否确实包含有关 Chinchaga 火灾的信息。如果是这样,将向用户提供源文档的 URL。

九、知识检索

整个过程称为知识检索或检索增强生成(RAG)。

想象一下,您正在使用信用卡支付提供商的 API。您不必苦苦搜寻 API 端点和文档,而只需问“处理付款的端点是什么?”。

人工智能将使用相似性搜索来查找正确的文档,并将您的问题和文档发送给法学硕士。法学硕士将根据源文件中的信息提供问题的答案。

然后,您可以进一步查询并说“我如何在 Ruby 中进行此 API 调用?”或者 JavaScript、Python、C++ 等。LLM 应该能够根据端点源文档生成代码。

知识检索是一种非常强大的手段,可以提高用户访问并获得其预期问题的答案的能力,而无需花费时间查看错误的信息。

知识检索可以以多种方式使用。它可用于查找整篇文章并将其返回给用户。它可以在大量文档源中找到非常具体的信息。它可以用于推荐。知识检索的用例取决于您的想象力。

十、知识检索即服务

许多平台开始发布知识检索服务,这消除了流程的复杂性和开发工作。

例如,AWS 有他们的 Amazon Q 服务。 Amazon Q 有效地提供了一个点击界面来为其提供源文档,并且它将为您构建知识服务。 Amazon Q 的美妙之处在于,您可以给它实际的文档,将它们存储在 S3 中,或者给它一个 URL,它会为您抓取整个网站。您还可以让它自动同步数据,以便在亚马逊内选择对文档的更改。

随着我们的进步,我们将开始看到大量的此类服务。

您可能有非常具体的用例,您需要从头开始对知识检索进行编码。在这种情况下,您将需要使用以下工具:

  • 嵌入人工智能
  • 矢量数据库
  • 否则,你唯一的限制就是你的开发技能和想象力。

十一、概括

我相信,知识检索和相似性搜索是企业成功实施人工智能的切入点。过去,关键字搜索实际上对所有网站都是强制性的,但我们很快就会看到知识检索是最低标准。当我尝试处理没有知识搜索的 API 文档时,我已经感到沮丧。

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

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

相关文章

OpenCV添加文字和水印------c++

添加文字 bool opencvTool::addText(cv::Mat& image, const std::string text, const cv::Point& position, double fontScale, cv::Scalar color, int thickness, int fontFace) {cv::putText(image, text, position, fontFace, fontScale, color, thickness);return…

3DTiles生产流程与规范

一篇19年整理的比较老的笔记了。更多精彩内容尽在数字孪生平台。 瓦片切分 标准的四叉树切分对于均匀分布的地理数据切片非常有效,但是这样均等的切分不适用于随机分布、不均匀分布的地理数据,当地理数据稀疏分布的时候,均等的四叉树就不再高…

Linux配置腾讯云yum源(保姆级教学)

1. 备份原有的 yum 源配置文件 例如: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2. 下载腾讯云的 yum 源配置文件 例如: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/…

【1429】招生管理管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 招生管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

共享单车(二):项目日志

stdin, stdout, stderr Linux系统下,当一个用户进程被创建时,与之对应的三个数据流(stdin,stdout和stderr,即三个文件)也会被创建。 stdin,标准输入文件,通常对应着终端的键盘。 s…

Docker网络及CPU资源控制

一、实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容…

JVM常见的垃圾回收器

1、回收方法区: 方法区回收价值很低,主要回收废弃的常量和无用的类。 方法区中的存储: 方法区中存储的是加载的类的信息,常量,静态变量,即时编译后的代码等数据,所以回收的对象也就是这些内…

Qt笔记-解决子控制大小获取不正确(width和height)需要重制窗体后,才能获得正确的值

在Qt中,子控件的宽度和高度在构造后并不准确,而只有在调整窗口大小后才正确,这可能是因为子控件的布局或者约束尚未完全计算和应用。 为了解决这个问题,可以使用QTimer来延迟获取子控件的宽度和高度,以确保在布局和约…

Footprint Analytics 与 GalaChain 达成战略合作

​ Footprint Analytics 宣布与 GalaChain 达成战略合作。GalaChain 是 Gala 旗下的 Layer 1 区块链。此次合作标志着双方在游戏(包括 Gala Games) 、娱乐和金融等多个行业的区块链生态系统革新方面迈出了重要的一步。 GalaChain 致力于满足企业级项目的广泛需求&…

【网安小白成长之路】8.sql注入操作

🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 🔞 《网安小白成长之路(我要变成大佬😎!!)》真实小白学习历程,手把手带你一起从入门到入狱🚭 &…

基于ssm微信小程序的4S店客户管理系统

采用技术 基于ssm微信小程序的4S店客户管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员端 管理员登录 管理员首页 用户管理 门店管理 …

Java技术学习|消息队列|初级RabbitMQ

学习材料声明 黑马RabbitMQ快速入门教程,快速掌握rabbitmq、springAMQP消息中间件 是非常初级的学习,听说后续的高级课程会涉及到微服务之类的,所以等学完微服务再回来学。还有redis的高级部分也涉及了微服务,所以也都暂时停止学…

Pick-a-Pic:An open dataset of user preferences for text-to-image generation

1.introduction 1.创建了一个 数据集,每个示例包括一个提示,两个生成的图像以及一个指向首选图像的标签,或者在没有一个图像明显优于另一个时标记为平局。由真实用户创建,包括50w个示例。 2.利用真实用户偏好,训练一个评分函数,使用人类偏好数据和类似于instructGPT奖励…

我花了2元,15分钟,零基础入门了Llama3的微调。

Llama3在最新测评上已经可以接近闭源的GPT4,我们很快就可以拥有属于自己的“GPT4”了!于是,我昨天第一时间体验了Llama3的微调,成本不高,大概花了2元。 为了方便大家体验微调,我把需要的系统环境打包成了社…

递归、搜索与回溯算法:综合练习

例题一 解法: 算法思路: ⾸先,我们在第⼀⾏放置第⼀个皇后,然后遍历棋盘的第⼆⾏,在可⾏的位置放置第⼆个皇后,然后再遍历第三⾏,在可⾏的位置放置第三个皇后,以此类推&#xff0c…

鸿蒙OpenHarmony【集成三方SDK】 (基于Hi3861开发板)

OpenHarmony致力于打造一套更加开放完善的IoT生态系统,为此OpenHarmony规划了一组目录,用于将各厂商的SDK集成到OpenHarmony中。本文档基于Hi3861开发板,向平台开发者介绍将SDK集成到OpenHarmony的方法。 规划目录结构 三方SDK通常由静态库…

2024年4月最新注册香港苹果账号(Apple ID)并解决支付的教程

大陆的Apple ID仅仅能下载国内的一些APP,其实海外也有非常之多好用又好玩的APP需要大家来挖掘!发现这些海外优质APP就得需要一个海外苹果账号。这就是我今天为什么要写这篇文章的初衷! 注册香港Apple ID教程 1、首先到http://appleid.apple.com里注册一个国内的Ap…

ROS2 命令行工具---常用命令整理

本文主要介绍 ROS2 机器人操作系统的一些常用命令行工具及其使用方法,使用这些命令可以使机器人编程和调试变得更加简便。 在实际应用过程中,我们会经常用到命令行操作来辅助调试,更进一步的可以使用GUI工具辅助调试。 一、创建工作空间 跟…

数据结构——第7章 查找

1 线性表的查找 数据元素和顺序表的定义 typedef struct{KeyType key;InfoType otherinfo; }ElemType; typedef struct{ElemType *R;int length; }SSTable; 1.1 顺序查找 int Search_Seq(SSTable ST,KeyType key){ST.R[0].keykey;for(int iST.length;ST.R[i].key!key;i--);…

SQLAlchemy的使用

SQLAlchemy中filter函数的使用 https://blog.csdn.net/m0_67093160/article/details/133318889 创建临时字段 select id , CONCAT(‘内容’) AS fullname from example_table; Pandas数据类型转换_pandas转换数据类型 https://blog.csdn.net/qq_41404557/article/details/125…