Elasticsearch:混合搜索是 GenAI 应用的未来

2024-02-12 19:20

本文主要是介绍Elasticsearch:混合搜索是 GenAI 应用的未来,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这个竞争激烈的人工智能时代,自动化和数据为王。 从庞大的存储库中有效地自动化搜索和检索信息的过程的能力变得至关重要。 随着技术的进步,信息检索方法也在不断进步,从而导致了各种搜索机制的发展。 随着生成式人工智能模型成为吸引力的中心,应用程序需要可靠的搜索和检索技术。 其中,如果说旧的全文搜索具有信任因素,那么向量搜索则正在成为先进的搜索技术。

今天,我们将探索全文搜索和向量搜索,并了解如何在当今的数字环境中使用它们。

什么是全文检索?

全文搜索是一种在大量文本数据中查找特定信息的强大技术。 与仅查找精确匹配的简单关键字搜索不同,全文搜索会分析文档的整个文本并了解查询的上下文。 这使得它能够找到相关结果,即使查询不使用你搜索的确切关键字。

这是它的工作原理

  • 索引。 当你将文本数据添加到支持全文搜索的系统时,系统首先创建索引。 该索引就像文本的详细地图,列出了它包含的所有单词和短语以及它们出现的位置。
  • 查询。 执行全文搜索时,你输入包含关键字或短语的查询。 然后,系统在索引中搜索包含全部或部分查询词的文档。
  • 排名。 根据所使用的特定算法,系统将根据结果与你的查询的相关性对结果进行排名。 影响排名的因素包括文档中查询词的频率和接近度,以及文档的整体重要性或发布日期等其他因素。

在 Elasticsearch 中,我们很容易针对数据进行全文搜索,比如:

GET twitter/_search"match": {"city": "上海"}}
}

更多关于全文搜索的知识,我们可以参考文章 “开始使用 Elasticsearch (2)”。

什么是向量搜索?

向量搜索是大多数生成式人工智能应用最迫切的需求。 它通过理解机器和人类语言来检索上下文相关的信息,理解用户想要回报他/她的查询的含义。 这种方法需求量很大,并受到生成人工智能行业专家和组织的高度赞扬。 向量数据库使用这种方法为用户查询检索语义上正确的信息。

例如,用户在检索信息时不需要知道确切的单词 —— 即使他们知道一些相似的单词,向量搜索也可以检索到接近准确的结果。 在信息搜索需要人性化的地方(例如电子商务应用程序),这尤其有用。

通过更紧密地与人类的思维和沟通方式保持一致,它为用户和人工智能系统之间更自然、更高效的交互开辟了新的可能性。 随着这项技术的不断发展,其影响力预计将不断扩大,进一步巩固其作为生成人工智能行业现代信息检索策略基石的作用。

向量搜索拥有令人印象深刻的功能:

  • 语义理解: 同义词、短语甚至隐含含义都不再是个谜。
  • 关键词的相关性: 查找与你的意图真正相关的信息,而不仅仅是关键字填充的页面。
  • 个性化:了解你的喜好并推荐你真正喜欢的东西。

但与其他事物一样,向量搜索也有其独特的不好的特点。 训练模型和计算这些奇特的向量可能会耗费大量的计算资源。 虽然它擅长理解含义,但有时你只需要精确的关键字搜索即可。

向量搜索的工作原理

以下是向量搜索工作原理的简化说明:

  • 数据转换:使用文本的词嵌入或图像的卷积神经网络等模型将每个项目(如文本文档或图像)转换为向量。 这些模型旨在捕获内容的语义或视觉本质。

  • 索引:然后,这些向量会在数据库中建立索引(例如 Elasticsearch),Elasticsearch 专为高效、高维向量搜索而设计。 这种索引通常涉及以相似的项目在向量空间中更接近的方式组织向量。

  • 查询处理:当收到搜索查询时,它也会使用与数据所用的相同模型转换为向量。

  • 向量比较:搜索涉及将查询向量与索引中的向量进行比较。 这通常是使用余弦相似度或欧几里得距离等相似度度量来完成的。 这个想法是找到最接近查询向量的向量

如果你想了解更多关于向量搜索的知识,请详细观看视频:

Elasticsearch Relevance Engine

全文搜索与向量搜索:谁赢了?

虽然全文搜索在精度和速度方面表现出色,而向量搜索解锁了语义理解,但混合方法成为真正的冠军。 想象一下,一个搜索不仅可以理解你的精确关键字(例如“red shoes”),而且还可以找到你未提及的那些舒适的 crimson sneakers。 即使你不使用完美的措辞,这种组合也能提供高度相关的结果。 可以将其视为两全其美:准确性与偶然性相结合,确保你永远不会因为未准确拼写而错过隐藏的宝石。 从本质上讲,混合搜索超越了限制 —— 突破了信息检索的界限,提供了既精确又令人惊喜的体验。

Elasticsearch 在全文搜索积累了深厚的搜索基础,加上在最新的发布中的向量搜索技术,从而使其成为理想的混合搜索工具。这个和一些在世面上的纯向量搜索有无可替代的优势。

混合搜索

在信息检索领域,出现了一股新力量:混合搜索。Elasticsearch 处于领先地位,使开发人员能够开发丰富的人工智能和分析应用程序,利用向量搜索和全文搜索的综合优势。

在构建人工智能应用程序时,这对你意味着什么? 你不再被迫在机器人的精确性和细致入微的理解之间做出选择。 Elasticsearch 弥合了这一鸿沟,使你能够释放搜索的全部潜力并提供真正有意义的体验。

Elasticsearch 通过索引向量搜索加速信息检索。 这一改变游戏规则的功能无缝地融合了闪电般快速的向量搜索、精确的全文搜索和尖端的索引技术 —— 所有这些都由近似最近邻 (ANN) 搜索提供支持。 准备好在浩瀚的数据海洋中体验 100-1,000 倍的更快搜索速度和准确性。

倒数排序融合 - Reciprocal rank fusion

由于全文搜索及向量搜索是使用不同的算法进行打分的,这就造成把两个不同搜索结果综合起来统一排名的困难。向量搜索的分数处于 0-1.0 之间,而全文搜索的结果排名分数可能是高于10或者更大的值。我们需要一种方法把两种搜索方法的结果进行综合处理,并得出一个唯一的排名。

倒数排序融合(RRF)是一种将具有不同相关性指标的多个结果集组合成单个结果集的方法。 RRF 无需调优,不同的相关性指标也不必相互关联即可获得高质量的结果。该方法的优势在于不利用相关分数,而仅靠排名计算。相关分数存在的问题在于不同模型的分数范围差。

具体 RRF 是如何工作的,请详细阅读文章 “Elasticsearch:倒数排序融合 - Reciprocal rank fusion (RRF)”。

更为重要的是:Elasticsearch 目前支持第三方的密集向量搜索,全文搜索(基于 BM25 打分)及稀疏向量搜索(ELSER)。我们可以通过 RRF 来针对所有的搜索方法进行混合搜索,无论是多种搜索方法在一起进行搜索:

有关 Elasticsearch 向量搜索及混合评分的更多阅读,请参考 “NLP - 自然语言处理及向量搜索”。

更多阅读:

  • 使用 Elastic Learned Sparse Encoder 和混合评分的卓越相关性

  • 改进 Elastic Stack 中的信息检索:混合检索 - hybrid retrieval

  • 通过 Elasticsearch 和 Go 使用混合搜索进行地鼠狩猎

  • Elasticsearch:结合两全其美:Elasticsearch 与 BM25 和 HNSW 的混合搜索

  • Elastic Search 8.9:与 RRF 的混合搜索、更快的向量搜索和面向公众的搜索端点

  • Elasticsearch:Search tutorial - 使用 Python 进行搜索 (一)(二)(三)(四)

  • Elasticsearch:语义搜索快速入门

这篇关于Elasticsearch:混合搜索是 GenAI 应用的未来的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2