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.mzph.cn/news/159751.shtml

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

相关文章

【NLP】培训LLM的不同方式

在大型语言模型(LLM)领域,存在多种具有不同手段、要求和目标的培训机制。由于它们有不同的用途,因此重要的是不要将它们相互混淆并了解它们适用的不同场景。 在本文中,我想概述一些最重要的训练机制,包括预…

「Verilog学习笔记」根据状态转移图实现时序电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 这是一个典型的米利型状态机。三段式即可解决。 米利型状态机:即输出不仅和当前状态有关,也和输入有关。 其中ST0,ST1,ST3的…

IPFoxy:什么是数据中心代理IP?好用吗?

数据中心代理是代理IP中最常见的类型,也被称为机房IP。这些代理服务器为用户分配不属于 ISP(互联网服务提供商)而来自第三方云服务提供商的 IP 地址。数据中心代理的最大优势——它们允许在访问网络时完全匿名。 如果你正在寻找海外代理IP&am…

Android跨进程传图片或者大数据(解决TransactionTooLargeException)

跨进程传图片方案 直接intent传bitmap使用文件读写intent传递自定义binder,binder中传递image使用网络传输 一、直接intent传bitmap 优势 使用简单 劣势 相关代码可能有侵入性,必须在四大组件中接收。 intent传递数据的总大小是1MB,其中…

在Jupyter Lab中使用多个环境,及魔法命令简介

一、Jupyter Lab使用conda虚拟环境 1、给虚拟环境添加 ipykernel 方法一: 创建环境时直接添加ipykernel 方法:conda create -n 【虚拟环境名称】python3.8 ipykernel实例如下: conda create -n tensorflow_cpu python3.8 ipykernel 方法二&#xff…

VR全景:赋能城市园区建设,打造3DVR城市名片

近年来,很多城市都在大力发展数字化经济建设,以VR全景技术赋能现代化城市和园区建设,为城市园区展示带来了全新的可能性。借助3D、VR技术把现实城市和园区搬到互联网上进行全方位展示,将城市园区的形象、景观、规划布局等1&#x…

『亚马逊云科技产品测评』活动征文|AWS 存储产品类别及其适用场景详细说明

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 目录 前言、AWS 存储产品类别 1、Amazon Elastic Block Store (EBS) …

echarts 几千条分钟级别在小时级别图标上展示

需求背景解决效果ISQQW代码地址strategyChart.vue 需求背景 需要实现 秒级数据几千条在图表上显示&#xff0c;(以下是 设计图表上是按小时界别显示数据&#xff0c;后端接口为分钟级别数据) 解决效果 ISQQW代码地址 链接 strategyChart.vue <!--/** * author: liuk *…

编译安装redis及配置多实例

yum安装是这种十分简单的方法我们就不在提及了&#xff0c;今天我们来做一下redis的编译安装 Redis源码包官方下载链接&#xff1a;http://download.redis.io/releases/ 一、编译安装&#xff1a; 安装依赖包 dnf -y install make gcc jemalloc-devel systemd-devel如果是…

数据结构中树、森林 与 二叉树的转换

1 树转换为 二叉树 将树转换成二叉树的步骤是&#xff1a; 加线。在所有的兄弟结点之间加一条线。去线。对于树中的每个结点&#xff0c;只保留它与第一个孩子结点的连线&#xff0c;删除该结点其他孩子结点之间的连线。调整。以树的根结点为轴心&#xff0c;将整个树顺时针旋…

SMBGhost_RCE漏洞(CVE-2020-0796永恒之黑)

https://blog.csdn.net/qq_45372008/article/details/106980409 https://zhuanlan.zhihu.com/p/374949632 SMB 3.1.1协议处理某些请求的方式中存在远程执行代码漏洞&#xff0c;可能被攻击者利用远程执行任意代码。该漏洞的后果十分接近永恒之蓝系列&#xff0c;都利用Windows …

银行业务测试

1、商业银行四大类&#xff1a; 业务类系统、渠道类面试、MIS类系统、其他基础平台系统 2、银行系统开发流程&#xff08;UAT是行方&#xff09; 3、银行系统测试流程 4、对于不同的服务方式也不同&#xff0c;如:柜台、手机银行、网上银行&#xff0c;电话外呼&#xff0c;…

89. 格雷编码

89. 格雷编码 Java代码&#xff1a;2DFS class Solution {List<Integer> res new ArrayList<>();public List<Integer> grayCode(int n) {dfs(n, new StringBuffer(), new int[]{0, 1});return res;}public void dfs(int n, StringBuffer sb, int[] nums){i…

吴恩达《机器学习》9-7-9-8:综合起来、自主驾驶

在神经网络的使用过程中&#xff0c;需要经历一系列步骤&#xff0c;从网络结构的选择到训练过程的实施。以下是使用神经网络时的主要步骤的小结&#xff1a; 一、网络结构的选择 输入层&#xff1a; 第一步是选择网络结构&#xff0c;即确定神经网络的层数以及每层的单元数。…

CURL踩坑记录

因为项目使用的windows server&#xff0c;且没有安装Postman&#xff0c;所以对于在本地的Postman上执行的请求&#xff0c;要拷贝到服务器执行&#xff0c;只能先转化成为curl命令&#xff0c;操作也很简单&#xff0c;如下&#xff1a; 注意&#xff0c;Postman默认对url包围…

【钉钉】通过链接方式跳转到应用机器人聊天窗口

使用这个方式&#xff1a; dingtalk://dingtalkclient/action/jumprobot?dingtalkid可以通过机器人回调拿到chatbotUserId这个字段&#xff0c;这个就是dingtalkid。 示例&#xff1a;&#xff08;chatbotUserId是不规则字符串&#xff0c;链接拼上这个参数最好 urlencode一…

大图书馆 #9 《流计算系统图解》书评

上周&#xff0c;我收到清华大学出版社编辑寄来的新书《流计算系统图解》。趁着周末的功夫&#xff0c;我快速浏览了本书的主要内容。一句话评价&#xff1a;值得一读&#xff0c;尤其是对开始开发流计算任务或系统一到两年&#xff0c;初步实现过一些功能或作业&#xff0c;但…

二蛋赠书九期:《机器学习图解》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…

基于C#实现AC自动机算法

我要检查一篇文章中是否有某些敏感词&#xff0c;这其实就是多模式匹配的问题。当然你也可以用 KMP 算法求出&#xff0c;那么它的时间复杂度为 O(c*(mn))&#xff0c;c&#xff1a;为模式串的个数。m&#xff1a;为模式串的长度,n:为正文的长度&#xff0c;那么这个复杂度就不…

Autocad2020切换经典界面

Autocad2020切换经典界面 1.更改1.1设置另存为 1.更改 1.1设置另存为