向量搜索是一种用于在大型集合中查找相似项目或数据点的搜索技术,通常以向量的形式表示。向量或嵌入是文字、实体、文档、图像或视频的数字表示。向量捕捉元素之间的语义关系,使机器学习模型和人工智能应用能够有效处理。
与通常使用关键词搜索的传统搜索相比,向量搜索依赖于向量相似性搜索技术,比如 k 最近邻搜索 (knn),根据某个距离指标检索与查询向量类似的数据点。向量捕获数据点之间的语义关系和相似性,从而实现语义搜索,而非简单的关键词搜索。
为了说明传统关键词与向量搜索之间的区别,我们来看一个示例。假设您正在寻找有关最佳披萨餐厅的信息,并在传统的关键词搜索引擎中搜索“最佳披萨餐厅”。关键词搜索会查找包含“最佳”、“披萨”和“餐厅”这些确切词语的页面,并返回诸如“最佳披萨餐厅”或“我附近的披萨餐厅”等结果。传统的关键词搜索侧重于匹配关键词,而不是理解搜索背后的上下文或意图。
相比之下,在语义向量搜索中,搜索引擎能够理解查询背后的意图。语义,顾名思义,指与语言中的含义相关,即语义搜索理解查询的含义和上下文。在这种情况下,即使内容中没有使用确切的词语“最佳披萨餐厅要”,它也会寻找评分最高或强烈推荐的披萨店的内容。结果会与上下文更相关,并且可能包括不同地点的好评披萨店的文章或指南。
传统搜索方法通常使用离散的令牌或特征(如关键词、标签或元数据)来表示数据。如上例所示,这些方法依赖精确匹配来检索相关结果。相比之下,向量搜索将数据表示为连续向量空间中的密集向量(其中大多数或所有元素均非零),这是数据以向量形式表示的数学空间。密集向量的每个维度对应于数据的潜在特征或方面,即无法直接观察到但可以通过数学模型或算法从数据中推断出的潜在特性或属性。这些潜在特征可以采集数据中隐藏的模式和关系,从而在高维空间中将项目更有意义、更准确地表示为向量。
由于计算和内存限制,传统搜索方法可能会在处理大型数据集或高维数据时面临可扩展性问题。相比之下,向量嵌入更容易扩展到更大的数据集和更复杂的模型。与数据的稀疏表示(其中大多数维度值为零)不同,嵌入是密集的向量表示,且大多数维度值具有非零值。这使得向量嵌入能够在更小的低维空间中存储更多信息,减少内存占用。1 因此,机器学习算法和模型可以更高效地使用嵌入,减少计算资源的需求。
在本讲解中,我们将重点关注自然语言处理 (NLP) 的向量表示,即表示文字、实体或文档的向量。
我们将通过向量化一个小型句子语料库来说明向量化过程: “猫坐在垫子上”、“狗在院子里玩耍”和“鸟儿在树上鸣叫”。
构建向量嵌入的第一步是清理和处理原始数据集。这可能包括去除噪音和文本标准化。在我们的示例中,我们不会进行任何清理,因为文本已经过清理和标准化。
接下来,选择一个嵌入模型并在数据集上进行训练。经过训练的嵌入模型用于为数据集中的每个数据点生成嵌入。对于文本数据,常用的开源嵌入模型包括 Word2Vec、GloVe、FastText 或基于预训练转换器的模型,例如 BERT 或 RoBERTa2。
在我们的示例中,我们将使用 Word2Vec 来生成嵌入。
接下来,嵌入将存储在向量数据库中或使用诸如 Elasticsearch 等搜索引擎的向量搜索插件。在向量搜索中,通过评估查询向量(通过向量化查询生成)与文档向量(即所查询数据的表示)之间的相似性来确定搜索结果的相关性。需要在向量数据库中创建索引,以便能够基于类似查询快速高效地检索嵌入。诸如分层导航小世界 (HNSW) 等技术可用于索引嵌入,并促进查询时的相似性搜索。HNSW 通过在索引构建过程中将相似的向量聚类在一起,组织数据集并实现快速的近邻搜索。
最后,必须建立生成新查询向量的机制或流程。这通常涉及创建一个 API 或服务,该 API 或服务将用户搜索查询作为实时输入,使用相同的向量模型进行处理,并生成相应的向量表示。然后可以使用该向量在数据库中进行搜索,以获得最相关的结果。
在向量搜索中,相关性通过测量查询向量和文档向量之间的相似性来确定。为了比较两个向量并确定它们的相似性,可以使用一些距离测量方法,例如欧几里德距离或余弦相似度3。
欧几里德距离是指两点之间直线距离的度量。计算公式为两点对应坐标平方差之和的平方根。
通过添加更多项来考虑其他维度,可将此公式扩展到更高维度空间。
余弦相似度是多维空间中两个向量之间相似度的度量。它通过计算两个向量之间夹角的余弦值,指示向量彼此对齐的紧密程度。
在数学上讲,两个向量之间的余弦相似度 cos(θ) 是以两个向量的点积除以它们大小之积计算出来。
余弦相似度的范围是 -1 到 1,其中:
余弦相似性在处理向量时特别有用,因为它关注向量之间的方向关系,而非大小。
虽然前面提到的距离指标可用于衡量向量相似度,但在查询时将所有可能的向量与查询向量进行比较会变得低效且缓慢。为了解决这个问题,我们可以使用近似最近邻 (ANN) 搜索。
ANN 算法并非寻找完全匹配项,而是通过某些距离指标(如欧几里得距离或余弦相似度)有效地搜索与给定查询近似最接近的向量。通过允许某种程度的近似,这些算法可以显著降低最近邻搜索的计算成本,而无需计算整个语料库的嵌入相似度。
其中最受欢迎的 ANN 算法之一是 HNSW 图。分层可导航小世界图结构对数据集进行索引,并在构建索引时将相似的向量分组在一起,以便快速搜索最近邻。HNSW 将数据整理成多个邻域,并通过可能的连接将它们链接在一起。当索引一个密集向量时,它会识别合适的邻域及其潜在连接,并将它们存储在图形结构中。在使用密集向量查询的 HNSW 搜索期间,它会找到最合适的邻域入口点,并返回最近邻。
向量搜索因其能够基于向量表示高效检索相似项的能力,在多个领域中有着广泛的用例。向量搜索的一些常见应用包括:
向量搜索用于搜索引擎中,以根据其与查询的相似度来检索文档、文章、网页或其他文本内容。即使查询中使用的确切术语不在文档中,用户仍可以查找相关信息。
向量搜索在检索增强生成 (RAG) 框架中发挥着重要作用,可从大量文本语料库中检索相关上下文。RAG 是一种生成式 AI 框架,它将向量搜索与生成语言模型相结合,以生成响应。
在传统的语言生成任务中,大型语言模型 (LLM),比如 OpenAI 的 GPT(生成式预训练转换器)或 IBM 的 Granite 模型等常用于基于输入提示构建响应。然而,这些模型有时可能很难生成与上下文密切相关、事实准确或最新的答复。RAG 通过在生成响应之前加入检索步骤,来解决这一局限性。在检索过程中,向量搜索可用于识别上下文相关的信息,例如通常存储在向量数据库中的大型文本语料库中的相关段落或文档。然后,使用 LLM 基于检索到的上下文生成响应。
除语言生成外,RAG 和向量搜索还可广泛用于其他多种 NLP 任务,包括问题解答、聊天机器人、摘要和内容生成。
向量搜索可以集成到混合搜索方法中,以增强搜索过程的有效性和灵活性。混合搜索将向量搜索与其他搜索技术(如基于关键词的搜索或基于元数据的搜索)相结合。向量搜索可用于根据项目与查询的相似度检索项目,而其他搜索方法则用于基于精确匹配或特定条件检索项目。
向量存储用于图像和视频搜索引擎,根据相似性为视觉内容编制索引和检索。图像和视频嵌入以向量形式存储,使用户能够在大型数据集中搜索视觉上相似的图像或视频。
流媒体服务中的推荐引擎以及电子商务、社交媒体和视觉媒体平台,都可以通过向量搜索提供支持。向量搜索允许基于用户之前互动过或点赞的商品、电影、音乐或其他项目的相似度进行推荐。
向量搜索用于地理空间数据 应用 中,通过与查询位置或模型的接近度或相似度来检索兴趣点、地理特征或空间轨迹等空间数据。它可在地理信息系统和基于位置的服务中实现高效的空间搜索和分析。
1 Bahaaldine Azarmi 和 Jeff Vestal,《Vector Search for Practitioners with Elastic》,Packt Publishing,2023 年
2 Vicki Boykis,“What are embeddings”,2023 年,https://vickiboykis.com/what_are_embeddings
3 Trey Grainger、Doug Turnbull 和 Max Irwin, 《人工智能驱动的搜索》,Manning Publications,2024 年