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.mfbz.cn/a/164056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语)

假设函数定义 假设函数,猜一个 x->y 的类型,比如 y ax b,随后监督学习的任务就是找到误差最低的 a 和 b 参数 有时候我们可以定义 x0 1,来让假设函数的整个表达式一致统一 如上图是机器学习中的一些术语 额外的符号&#xf…

【Spring Boot 源码学习】Banner 信息打印流程

Spring Boot 源码学习系列 Banner 信息打印流程 引言往期内容主要内容1. printBanner 方法2. 关闭 Banner 信息打印3. SpringApplicationBannerPrinter 类3.1 LOG 模式打印3.1.1 getBanner 方法3.1.1.1 新建 Banners3.1.1.2 添加 ImageBanner3.1.1.3 添加 ResourceBanner3.1.1.…

宏--offsetof使用

文章目录 宏介绍结构体测试代码运行结果 宏介绍 宏--offsetof(type, member),type就是结构的类型,member就是需要的成员名。表达式的结果是一个size_t的值,表示这个指定成员开始存储的位置距离结构开始存储的位置偏移几个字节结构体 typede…

Django自动生成docs接口文档

1.创建Django项目 python manage.py startproject django20252.创建子应用 python manage.py startapp api3.安装依赖包 pip install coreapi4.创建urls.py from django.contrib import admin from django.urls import path, include from rest_framework import routers f…

网络运维与网络安全 学习笔记2023.11.19

网络运维与网络安全 学习笔记 第二十天 今日目标 STP工作原理、STP高级配置、MSTP工作原理 MSTP配置案例、MSTP负载均衡 STP工作原理 单点故障 PC之间的互通链路仅仅存在1个 任何一个设备或链路出现问题,PC之间都会无法通信 解决方案 增加冗余/备份设备 增加冗…

PCL 计算一条射线与一个三角形的交点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里我们使用点向式分别表示一个射线与一个三角形,如下图所示: 其中,平面的法向量 N N N可以由三角形两条边的叉乘来计算,点R0到平面的法向距离

数学建模值TOPSIS法及代码

TOPSIS法 TOPSIS法简称为优劣距离解法,是一种常见法综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各个评价方案之间的差距。 模型介绍 上篇文章谈到的层次分析法是有局限性的。比如评价的决策层不能太多,太多的…

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

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

【MySQL--->事务】

文章目录 [TOC](文章目录) 一、基本概念二、事务的操作1.设置全局事务隔离级别2.设置事务提交方式3.事务操作 三、事务隔离性1.隔离性概念2 .隔离级别设置 四、MVCC多版本控制2. read view 一、基本概念 事务是由若干条具有逻辑相关性的SQL语句组成的,用来完成某种任务的**逻辑…

使用 C 语言快速排序将字符串按照 ASCII 码升序排列

示例代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h>static Comp(const void *a, const void *b) {char *pa (char *)a;char *pb (char *)b;return strcmp(a, b); }int main(void) {char strs[3][10] { "bd", &q…

SpringBoot 整合 JdbcTemplate

数据持久化有几个常见的方案&#xff0c;有 Spring 自带的 JdbcTemplate 、有 MyBatis&#xff0c;还有 JPA&#xff0c;在这些方案中&#xff0c;最简单的就是 Spring 自带的 JdbcTemplate 了&#xff0c;这个东西虽然没有 MyBatis 那么方便&#xff0c;但是比起最开始的 Jdbc…

关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)

关于爬虫中的hook&#xff1a; defineProperty var people {age: 19, }; var count20; console.log(people.age) // 参数&#xff1a;对象 属性名字 函数 Object.defineProperty(people, age, {get: function () {console.log(获取值&#xff01;);return count;},// set: …

C++ map和set的使用

关联式容器 vector、list、deque统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;存储的是元素本身 侧重于单纯的存储数据 关联式容器也是用来存储数据的&#xff0c;里面存储的是<key, value>结构的键值对&#xff0c;在数据检索时比序列式…

漫谈广告机制设计 | 万剑归宗:聊聊广告机制设计与收入提升的秘密(2)

书接上文漫谈广告机制设计 | 万剑归宗&#xff1a;聊聊广告机制设计与收入提升的秘密&#xff08;1&#xff09;&#xff0c;我们谈到流量作为一种有限资源&#xff0c;其分配方式&#xff08;或者交易方式&#xff09;也经历了几个阶段&#xff1a;第一个是谈判定价阶段&#…

新材料工厂生产管理mes系统

万界星空科技新材料云MES系统从需求分析、产品选型、系统集成、可扩展性和灵活性以及安全性和稳定性等多个角度进行考虑。 如果您的企业也属于新材料生产制造行业&#xff0c;同时也计划通过MES系统来进行整个生产过程的数字化管控。 欢迎搜索万界星空科技线上咨询或者直接拨…

论文阅读:JINA EMBEDDINGS: A Novel Set of High-Performance Sentence Embedding Models

Abstract JINA EMBEDINGS构成了一组高性能的句子嵌入模型&#xff0c;擅长将文本输入转换为数字表示&#xff0c;捕捉文本的语义。这些模型在密集检索和语义文本相似性等应用中表现出色。文章详细介绍了JINA EMBEDINGS的开发&#xff0c;从创建高质量的成对&#xff08;pairwi…

搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录

目录 一. 实验要求 二. 实验准备 三. 实验过程 1. 网关服务器新建网卡并改为仅主机模式 2. 修改新建网卡IP配置文件并重启服务 3. 搭建网关服务器的dhcp服务 4. 修改server2网卡配置文件重启服务并效验 5. 设置主机1的网络连接为仅主机模式 6. 给server2和网关服务器之…

YOLOv4 学习记录

文章目录 整体概况数据增强Mosaic数据增强 基于CSPNet网络思想的架构改进Mish激活函数CSPNetCSPNet 3 大优势Partial Transition 层 CSPDarkNet (yolo v4 中的CSPDarkNet53) NeckSPPNetPAN-FPN 结构 正负样本匹配损失函数IOU 损失函数IOU的2个问题&#xff1a; GIOU Loss示意图…

力扣hot100 两数之和 哈希表

&#x1f468;‍&#x1f3eb; 力扣 两数之和 &#x1f60b; 思路 在一个数组中如何快速找到某一个数的互补数&#xff1a;哈希表 O(1)实现⭐ AC code class Solution {public int[] twoSum(int[] nums, int target){HashMap<Integer, Integer> map new HashMap<&g…

STM32CubeMX学习笔记(2)--DSP库的使用

1.DSP库简介 STM32的DSP库是为了支持数字信号处理应用而设计的&#xff0c;它包含了一系列优化的数学函数和算法&#xff0c;能够在STM32微控制器上高效地执行数字信号处理任务。 DSP库通常包括以下主要特性&#xff1a; 1.数学函数库&#xff1a; 包括各种基本的数学运算函数…
最新文章