Elasticsearch中的语义检索

一、传统检索的背景痛点

        和传统的基于关键词的匹配方式不同,语义检索,利用大模型,将文本内容映射到神经网络空间,最终记忆token做检索。

        例如想要搜索中国首都,例如数据集中,只有一篇文章在描述北京,恰好在文章中并没有提到中国首都这四个字。利用传统的关键词匹配技术,搜索“中国首都”,是绝对无法将数据召回的,因为这篇文章中不不包含中国首都这四个字。如果加上语义理解,我们都知道中国首都其实就是北京。其实搜索北京应该也是可以搜索到的。在语义检索下,上述的描述北京的文章,大概率可以别召回。

        传统的关键词匹配技术,有很大的弊端,处理上述的问题,在相关性分数计算中,其实也是用的BM25算法,此算法虽然在大多数领域都适用,但是它是基于词频和逆文档率计算的分数,它的效果在我看来也就只有80分,但是想要适用Elasticsearch做到90分的召回效果,就比较困难了。上述的搜索“中国首都”就是一个很好的反例。

        虽然在传统搜索中,我们利用同义词可以解决问题,那就是把“中国首都”和“北京”建立一个同义词。问题是我们无法穷举所有的同义词。普遍的做法是,人工收集和构建自己领域内同义词。

语义搜索与关键字搜索

        语义搜索和关键字搜索之间的区别在于,关键字搜索会返回单词与单词、单词与同义词或单词与相似单词的匹配结果。语义搜索旨在匹配查询中单词的含义。在某些情况下,语义搜索可能不会生成直接的单词匹配结果,但会符合用户的意图。

        关键字搜索引擎使用的是查询扩展或简化工具,如同义词或省略词。它们还会使用自然语言处理和理解工具,如允许拼写错误、词汇切分和规范化。另一方面,语义搜索能够通过使用矢量搜索返回与含义相匹配的查询结果。

        以“chocolate milk”(巧克力牛奶)为例。 语义搜索引擎会区分“chocolate milk”(巧克力牛奶)和“milk chocolate”(牛奶巧克力)。 尽管查询中的关键字相同,但它们的书写顺序会影响含义。作为人类,我们知道“milk chocolate”(牛奶巧克力)是指各种巧克力,而“chocolate milk”(巧克力牛奶)是巧克力口味的牛奶。

二、语义检索

        基于上述的背景,这篇文章给大家带来的是全新的东西——语义检索。顾名思义,可以根据意思去做搜索,而并非是根据关键词做匹配。

        语义检索是如何做到的?

Diagram showing the steps of generative AI including vector representation and transforming into embedding

        第一步,先是依靠深度学习大模型,将文本内容(这里并不局限于文本,还可以是不同模态的数据,例如图片和声音)到更多维度的空间。通常512维度,甚至是1024维度的空间中。映射的基本原则是,越相近的内容,空间距离越近。这里举个例子,苹果和橘子的空间距离是1,苹果和猫咪的空间距离应该是大于1的,而猫咪和cat的空间距离是小于1的。利用维度空间的距离,来算事物的相似性,或者说问题和答案的相似度。

        第二步,将映射后的数据存储在向量数据库(数据在多维度的空间位置,使用多位浮点类型的数组维护的,把它称为向量)。   

        第三步,将问题使用相同的模型,也映射成向量。

        第四步,计算问题和答案的空间距离。这里比较普遍的做法是计算cosin值。即向量检索。

三、Elasticsearch中的语义检索

        在上述语义检索中,已经说了语义检索是如何做的。作为优秀的搜索引擎,elasticsearch也在努力的实现上述的这个过程。

1.先来看看es官方对语义检索的定义

语义搜索是一种解读单词和短语含义的搜索引擎技术。语义搜索的结果将返回与查询含义相匹配的内容,而不是与查询字面意思相匹配的内容。

语义搜索是一系列的搜索引擎功能,包括从搜索者的意图及其搜索上下文中理解单词。

这种类型的搜索旨在根据上下文更准确地解读自然语言来提高搜索结果的质量。语义搜索借助 Machine Learning 和人工智能等技术,将搜索意图与语义相匹配,从而实现这一目标。

  

2.利用 Elasticsearch 进行语义搜索

        Elasticsearch 平台配备了 Machine Learning 和 AI 解决方案,包括一个语义搜索模型:Elastic Learned Sparse EncodeR (ELSER)。这个 NLP 模型由 Elastic 训练而成,可在易于部署的工具中实现语义搜索。

       Elasticsearch 可以安全地存储您的数据,以实现快速搜索、微调相关性和高效扩展的强大分析功能。Elasticsearch 是 Elastic Stack(一套用于数据采集、扩充、存储、分析和可视化的免费开放工具)的核心组件。

3.语义检索效果如何

        以下部分提供有关 ELSER 如何在不同硬件上执行的信息,并将模型性能与 Elasticsearch BM25 和其他强大的基准(例如 Splade 或 OpenAI)进行比较。

硬件测试

        使用两个数据集来评估 ELSER 在不同硬件配置中的性能:msmarco-long-lightarguana

        该msmarco-long-light数据集包含平均超过 512 个标记的长文档,这可以深入了解长文档的索引和推理时间的性能影响。这是专门为文档检索设计的“msmarco”数据集的子集(不应与用于段落检索的“msmarco”数据集混淆,后者主要由较短的文本范围组成)。

        该arguana数据集是BEIR数据集。它由长查询组成,每个查询平均包含 200 个标记。它可以表示查询速度慢的上限。

        下表显示了使用各种硬件配置的 ELSER 基准测试结果。

基准测试

        用于评估ELSER排名能力的指标是归一化贴现累积增益(NDCG),它可以处理多个相关文档和细粒度的文档评级。该指标应用于固定大小的检索文档列表,在本例中为前 10 个文档 (NDCG@10)。

        下表显示了 ELSER 与使用英语分析器的 Elasticsearch BM25 的性能比较,并按用于评估的 12 个数据集细分。ELSER 取得 10 胜 1 平 1 负,NDCG@10 平均进步 17%。

ELSER 基准

        NDCG@10 用于 BM25 和 ELSER 的 BEIR 数据集 - 值越高越好)

        下表将 ELSER 的平均性能与其他一些强基线进行了比较。OpenAI 结果被分开,因为它们使用 BEIR 套件的不同子集。

与其他基线相比的 ELSER 平均性能

        BEIR 数据集与各种高质量基线的平均 NDCG@10(越高 越好)。OpenAI 选择了不同的子集,该集的 ELSER 结果 单独报告。

        要了解有关评估详细信息的更多信息,请参阅 此博客文章。

四、为什么语义搜索很重要?

        语义搜索之所以重要,是因为它有助于进行范围更广泛的搜索。由于语义搜索由矢量搜索提供支持,因此它可以提供更直观的搜索体验,根据查询的上下文搜索意图生成匹配结果。

        因为语义搜索算法可持续“学习”各种关键绩效指标 (KPI),例如转化率和跳出率,所以语义搜索有助于提高用户满意度。

更易于客户使用
        客户可能记不住专业术语,也想不起来具体的产品名称。借助语义搜索,客户输入模糊的搜索查询,便可获得具体的结果。客户还可以使用文字描述进行搜索,以发现相关名称。例如,您可以通过搜索所知道的歌词来发现歌曲并找到歌名。

        因为语义搜索会通过考虑意图和上下文来解读搜索含义,所以客户方面的体验更像是人与人之间的互动。

语义比关键字更强大
        通过匹配概念而不是关键字,语义搜索可以生成更准确的结果。通过维度嵌入,一个矢量代表一个单词的概念。“Car”(汽车)不再只与“car”(汽车)或“cars”(轿车)匹配,它还与“driver”(司机)、“insurance”(保险)、“tires”(轮胎)、“electric”(电动)、“hybrid”(混合动力)等匹配,因为这些单词都与“car”(汽车)的矢量相关联。

        因此,由矢量搜索提供支持的语义搜索扩展了简单匹配由词元表示的关键字的概念。

  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode27.移除元素(暴力法、快慢指针法)

每日一题:LeetCode27.移除元素 1.问题描述2.解题思路3.代码 1.问题描述 问题描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必…

PHP常用的数组函数

PHP是一种流行的服务器端脚本语言,广泛用于Web开发。数组是PHP中最重要且最常用的数据类型之一,它提供了许多强大的数组函数,用于在数组上执行各种操作。在本文中,我们将深入解析PHP中一些常用的数组函数,以便更好地理…

portraiture2024ps磨皮插件参数设置教程

ps磨皮插件一般是第三方软件,通过安装的方式放在ps的相关文件夹中。但也有一些插件是放置在系统软件目录的,不与ps文件放在一起。本文会给大家具体介绍以上两种不同的情况,方便大家了解ps磨皮插件放在哪个文件夹,ps的磨皮插件在哪…

PHP字符串函数的解析

在PHP中,字符串是一种常见的数据类型,用于存储和操作文本数据。PHP提供了丰富的字符串函数,用于执行各种字符串操作,包括截取、连接、替换、搜索等。在这篇文章中,我们将深入解析一些常用的PHP字符串函数,以…

小程序开通电子发票

总目录 文章目录 总目录前言结语 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 首先登录商户号:https://pay.weixin.qq.com/index.php/core/home/lo…

Web与DNS综合实验

目录 题目: 步骤一:准备工作 步骤二:在server端搭建简单网页 步骤三:node1端的DNS解析配置 步骤五:node2端进行测试。 题目: 1.打开3个主机,server、node1、node2 2.server为web主机建立网…

​软考-高级-系统架构设计师教程(清华第2版)【第7章 系统架构设计基础知识(263~285)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第7章 系统架构设计基础知识(263~285)-思维导图】 课本里章节里所有蓝色字体的思维导图

BUUCTF snake 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,解压得到一张snake的图片。 密文: 这里有一张蛇的图片,本人害怕不敢放,想看自己下载附件解压。(吐槽一下,我做这道题,全…

如何查看 class 文件的编译器版本

文章目录 原理分析解决方案其它解决方案javap 命令行工具 在平时的 Java 开发中,有时候我们需要知道某个 class 文件是由哪个版本的 Java 编译器编译生成的 原理分析 class 文件,即字节码文件,它有特定的二进制格式,这种格式是由…

湖北成人自考毕业学位申请照片要求及自拍制作方法

湖北成人自考学位申请需要上传照片是为了身份验证和学籍管理的目的。通过上传照片,学校可以确认申请者的身份,并将照片与其他申请信息进行关联。这有助于提高学校对学生的管理效率,确保学籍信息的准确性。同时,照片也用于学位证书…

脚本(JavaScript)-练手-简单的随机音乐播放器

浅浅的写个简单的随机音乐播放脚本(可移动),注释很详细,直接上源码 效果: // UserScript // name 播放音乐脚本 // namespace 代码对我眨眼睛 // version 1.2 // description 在API上请求音乐链接并随机自动连续播放音乐&…

【前端】vue3+typescript+vite+Element-Plus搭建配置初始化项目结构

给自己一个目标,然后坚持一段时间,总会有收获和感悟! 对于我们开发人员,了解和熟悉新知识,对于vue3,博主是通过TA的基本结构开始,vue2和vue3都有javascript前端编程语言,到了vue3新增…