向量搜索概述
TiDB 向量搜索提供了一种高级的语义搜索功能,可以在文档、图像、音频和视频等多种数据类型之间进行相似度搜索。TiDB 向量搜索的 SQL 语法与 MySQL 兼容,熟悉 MySQL 的开发人员可以基于该功能轻松构建人工智能 (AI) 应用。
概念
向量搜索是一种优先考虑数据语义以提供相关结果的搜索方法。
与传统的全文搜索(主要依赖于精确的关键词匹配和词频)不同,向量搜索通过将不同类型的数据(如文本、图像或音频)转换为高维向量,并根据这些向量之间的相似度来进行查询。这种搜索方法能够捕捉数据的语义特征和上下文信息,从而更准确地理解用户意图。
即使搜索的词语与数据库中的内容不完全匹配,向量搜索仍然可以通过对数据语义的理解,找到与用户意图相符合的结果。
例如,搜索 “一种会游泳的动物” 时,全文搜索只会返回包含这些精确关键词的结果,而向量搜索可以返回其他游泳动物的结果,如鱼或鸭子,即使这些结果并未包含精确的关键词。
向量嵌入
向量嵌入 (vector embedding) 也称为嵌入 (embedding) ,是在高维空间中用于表示现实世界对象的数字序列。它可以捕捉文档、图像、音频和视频等非结构化数据的语义特征和上下文。
向量嵌入在机器学习中至关重要,是语义相似性搜索的基础。
TiDB 专门引入了向量数据类型以及向量搜索索引,用于优化向量嵌入的存储和检索,增强其在人工智能领域的应用。你可以使用向量类型在 TiDB 中存储向量嵌入,并执行向量搜索查询,找到语义上最相关的数据。
嵌入模型
嵌入模型是将数据转换为向量嵌入的算法。
选择一种合适的嵌入模型对于确保语义搜索结果的准确性和相关性至关重要。对于非结构化的文本数据,你可以在 Massive Text Embedding Benchmark (MTEB) Leaderboard 上找到性能最佳的文本嵌入模型。
如需了解如何为特定数据类型生成向量嵌入,请参阅相关嵌入模型的教程或示例。
工作原理
在你将原始数据转换为向量并存储在 TiDB 中后,你的应用程序就可以开始利用这些向量来执行向量搜索查询,找到与用户查询语义或上下文最相关的数据。
TiDB 向量搜索 (Vector Search) 通过使用距离函数来计算给定向量与数据库中存储的向量之间的距离,从而识别前 k 个近邻(KNN)向量。其中,与给定向量距离最小的向量即代表最相似的数据。
TiDB 作为一款关系型数据库,在引入了向量搜索功能后,支持将数据及其对应的向量表示(向量嵌入)存储在同一个数据库中。你可以选择以下任一种存储方式:
- 将数据和对应的向量表示存储在同一张表的不同列中。
- 将数据和对应的向量表示分别存储在不同的表中。在进行搜索时,通过 JOIN 查询将这些表关联起来。
使用场景
检索增强生成 (Retrieval-Augmented Generation, RAG)
检索增强生成(RAG)是一种优化大型语言模型(LLM)输出的架构。通过使用向量搜索,RAG 应用程序可以在数据库中存储向量嵌入,并在 LLM 生成回复时检索相关文档作为附加上下文,从而提高回复的质量和相关性。
语义搜索
语义搜索是一种根据查询的含义而不是简单地匹配关键词来返回结果的搜索技术。它将不同语言和各种类型的数据(如文本、图像、音频)的含义转换为向量嵌入。然后,向量搜索算法会使用这些向量嵌入来查找满足用户查询的最相关数据。
推荐引擎
推荐引擎是一种推荐系统,它会主动向用户推荐与他们高度相关且个性化的内容、产品或服务。为了实现这一目标,推荐引擎会创建反映用户行为和偏好的向量嵌入。这些嵌入可以帮助系统识别其他用户曾经互动过或感兴趣的类似项目,从而提高推荐内容与用户的相关性,并增加吸引用户的可能性。
另请参阅
要开始使用 TiDB 向量搜索,请参阅以下文档: