Elasticsearch:使用 semantic_text 进行语义搜索

news2024/11/16 2:21:12

警告:截止 8.15 版本,此功能处于测试阶段,可能会发生变化。设计和代码不如官方 GA 功能成熟,并且按原样提供,不提供任何保证。测试版功能不受官方 GA 功能的支持 SLA 约束。

本教程向你展示如何使用 semantic text 功能对数据执行语义搜索。

语义文本通过在提取时提供推理并自动提供合理的默认值来简化推理工作流程。你无需定义与模型相关的设置和参数,也无需创建推理提取管道。

在 Elastic Stack 中使用 semantic search 的推荐方法是遵循 semantic_text 工作流程。当你需要更好地控制索引和查询设置时,你仍然可以使用完整的推理工作流程(请参阅本教程以查看该过程)。

本教程使用 elser service 进行演示,但你可以使用 inference API 提供的任何服务及其支持的模型。

要求

要使用 semantic_text 字段类型,你必须使用 Create inference API 在集群中部署推理端点。如果你还不知道如何部署 ELSER 到你的集群里,请参考文章 “Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR”。

更多阅读:Elasticsearch:使用 semantic_text 简化语义搜索。

创建推理端点

使用 Create inference API 创建推理端点:

PUT _inference/sparse_embedding/my-elser-model /* 1 */
{
  "service": "elser", /* 2 */
  "service_settings": {
    "num_allocations": 1,
    "num_threads": 1
  }
}

如果你已经安装完毕并部署好,你可以在机器学习页面查看:

  • 任务类型为路径中的 sparse_embedding,因为将使用 elser 服务,并且 ELSER 创建稀疏向量。inference_id 为 my-elser-model。
  • 本示例中使用了 elser 服务。

注意:使用 Kibana 控制台时,你可能会在响应中看到 502 bad gateway 错误。此错误通常仅反映超时,而模型在后台下载。你可以在机器学习 UI 中检查下载进度。如果使用 Python 客户端,你可以将超时参数设置为更高的值。

创建索引映射

必须创建目标索引的映射 - 包含推理端点将根据你的输入文本生成的嵌入的索引。目标索引必须具有具有 semantic_text 字段类型的字段,以索引所用推理端点的输出。

PUT semantic-embeddings
{
  "mappings": {
    "properties": {
      "semantic_text": { /* 1 */
        "type": "semantic_text", /* 2 */ 
        "inference_id": "my-elser-model" /* 3 */ 
      },
      "content": { /* 4 */
        "type": "text",
        "copy_to": "semantic_text" 
      }
    }
  }
}
  • 包含生成的嵌入的字段的名称。
  • 包含嵌入的字段是 semantic_text 字段。
  • inference_id 是你在上一步中创建的推理端点。它将用于根据输入文本生成嵌入。每次你将数据导入相关的 semantic_text 字段时,此端点都将用于创建文本的向量表示。
  • 用于存储在重新索引数据步骤中从源索引 Reindex 的文本的字段。
  • 存储在内容字段中的文本数据将被复制到 semantic_text 并由推理端点处理。semantic_text 字段将存储基于输入数据生成的嵌入。

加载数据

在此步骤中,你将加载稍后用于从中创建嵌入的数据。

使用 msmarco-passagetest2019-top1000 数据集,它是 MS MARCO Passage Ranking 数据集的子集。它由 200 个查询组成,每个查询都附有相关文本段落列表。所有唯一段落及其 ID 都已从该数据集中提取并编译为 tsv 文件。

下载文件并使用机器学习 UI 中的数据可视化工具将其上传到你的集群。将名称 id 分配给第一列,将内容分配给第二列。索引名称为 test-data。上传完成后,你可以看到一个名为 test-data 的索引,其中包含 182469 个文档。

如果你想了解加载数据的完整步骤,请参阅文章 “Elasticsearch:使用 ELSER 进行语义搜索 - sparse_vector”。

重新索引数据

通过将数据从 test-data 索引重新索引到 semantic-embeddings 索引,从文本创建嵌入。content 字段中的数据将重新索引到目标索引的 content 字段中。内容字段数据将作为索引映射创建步骤中设置的 copy_to 参数的结果复制到 semantic_text 字段。复制的数据将由与 semantic_text 语义文本字段关联的推理端点处理。

POST _reindex?wait_for_completion=false
{
  "source": {
    "index": "test-data",
    "size": 10  /* 1 */
  },
  "dest": {
    "index": "semantic-embeddings"
  }
}
  • 重新索引的默认批次大小为 1000。将大小减小到较小的数字可以加快重新索引过程的更新速度,从而使你能够密切跟踪进度并尽早发现错误。

该调用返回一个任务 ID 来监控进度:

GET _tasks/<task_id>
GET _tasks/022z5o7HRqaGwOTjIMMZSw:1469327

如果你不想等到重新索引过程完全完成,建议取消重新索引过程,这对于分配了少量资源的推理端点来说可能会花费很长时间:

POST _tasks/<task_id>/_cancel

语义搜索

在数据集通过嵌入丰富后,你可以使用语义搜索查询数据。在语义查询类型中提供 semantic_text 字段名称和查询文本。用于生成 semantic_text 字段嵌入的推理端点将用于处理查询文本。

GET semantic-embeddings/_search
{
  "query": {
    "semantic": {
      "field": "semantic_text", /* 1 */
      "query": "How to avoid muscle soreness while running?"  /* 2 */
    }
  }
}
  1. 你要执行搜索的 semantic_text 字段。
  2. 查询文本。

结果,你将收到来自语义嵌入索引的、含义与查询最接近的前 10 个文档:

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

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

相关文章

硬件检测工具箱 | 入梦工具箱 v8.8

入梦工具箱&#xff08;RM Toolbox&#xff09;是一款专为硬件检测、评分和测试设计的免费开源软件。它以其小巧的体积和简洁的界面&#xff0c;迅速成为DIY玩家和硬件爱好者的首选工具。 功能特点 集成常用硬件检测工具&#xff1a;包括CPUZ、GPUZ、AIDA64等&#xff0c;全面…

3种将4K视频转换成1080P格式的无损方法

用户总是倾向于将 4k 视频转换为 1080p&#xff0c;以便缩小它们并在兼容设备上观看。这种 4k 到 1080p 的转换被称为降频或降级&#xff0c;因为视频分辨率降低了。如果你想知道如何在不损失质量的情况下将 4k 缩小到 1080p&#xff0c;那么这是你找到答案的正确地方。阅读以下…

在idea中的git选择某一次记录拉出一个新分支

一 创建新分支 1.1 操作步骤 需求&#xff1a;需要在图中标红的历史记录&#xff0c;从此记录拉出一个分支 1.右键【new branch】 2.起一个新的名字&#xff1a; 3.新分支代码

HTTP协议相关知识

1 HTTP协议的解读 1.1 HTTP和HTTPS区别 HTTP协议&#xff1a;超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的HTML文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法 HTTPS协议&#xff1a;HTTP协议的安全版&#xff0c;在HT…

快9月了才开始强化,刷张宇1000还是李林880?

如果你现在才开始强化&#xff0c;并且在张宇1000和李林880中间纠结&#xff0c;可以花5分钟看看这篇文章&#xff01; 张宇1000题&#xff0c;今年进行了改版&#xff0c;去掉了一些「偏难怪」的题目&#xff0c;这类题目&#xff0c;对于大家的友好度明显上升。但是难度和综合…

springboot admin监控

服务端搭建 maven的依赖&#xff0c;包括服务端和客户端&#xff0c;以及注册到nacos上面 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XML…

游戏服务器租用多少钱一年?

游戏服务器租用多少钱一年&#xff1f;游戏服务器租用的价格范围非常广泛&#xff0c;从几百元到数万元不等。对于入门级或小型游戏服务器&#xff0c;一年的租用费用可能在几百到几千元之间&#xff1b;而对于高级或大型游戏服务器&#xff0c;一年的费用可能会超过数万元。 …

宽压宽频(35V/45V/65V)50KHZ-3MHZ双向同步降压升压LED驱动器QFP32封装

概述&#xff1a; PC9248 是一款双向降压-升压控制器&#xff0c;适用于驱动高效功率转换器中的硅&#xff08; Si&#xff09; MOSFET 或氮化镓&#xff08;GaN&#xff09;功率晶体管。它支持高达 45V 的宽输入和输出范围&#xff0c;可在降压、降压-升压和升压模式之间无缝…

XSS-复现dom破坏案例和靶场

目录 xss注入原理&#xff1a; xss是什么&#xff1f; xss原理&#xff1a; DOM&#xff1a; 闯关&#xff1a; 第一关&#xff1a;Ma Spaghet! 源码&#xff1a; 要求&#xff1a; 分析&#xff1a; 第二关&#xff1a; Jefff 源码&#xff1a; 要求&#xff1a; …

QT读取数据库中文显示乱码

QT读取数据库中文显示乱码 使用ODBC连接数据库时&#xff0c;选择Character Set为gbk格式

springboot中interceptor拦截器匹配URL源码

上一篇文章我们找到了filter过滤器的匹配源码&#xff0c;这次我们来找一下interceptor的匹配源码 同样先打断点看一下调用链 接着翻调用链&#xff0c;看看从哪里开始出现拦截器的 看到在这里出现了拦截器&#xff0c;那么就在这个类里面往上找&#xff0c;打断点慢慢找&…

Springcloud从零开始---Service业务模块(三)

上篇&#xff1a;Springcloud从零开始---Zuul&#xff08;二&#xff09;-CSDN博客 Service模块是客户端模块&#xff0c;用户编写业务逻辑代码和功能实现。前端请求发送到Zuul网关再有网关发送到Service服务&#xff0c;可以是系统的安全性提升。 开始继上篇Springcloud从零…

《计算机操作系统》(第4版)第4章 存储器管理 复习笔记

第4章 存储器管理 一、存储器的层次结构 1. 多层结构的存储器系统 如图4-1所示&#xff0c;在存储层次中越往上&#xff0c;存储介质的访问速度越快&#xff0c;价格也越高&#xff0c;相对存储容量也越小。 图4-1 计算机系统存储层次示意 2.三级存储系统 (1)Cache- 主存存储体…

数据结构——算法和算法分析

目录 算法和算法分析 算法 算法设计的要求 算法效率的度量 算法的存储空间需求 算法和算法分析 算法 算法是对特定问题求解步骤的一种描述&#xff0c;它是指令的有限序列&#xff0c;其中每一条指令表示一个或多个操作。 一个算法具有下列5个重要的特性&#xff1a; &…

轻松实现微服务间的无缝通信:OpenFeign入门指南

OpenFeign 前言1、导入依赖2、开启feign调用3、编写OpenFeign客户端4、Fegin接口实现5、Feign接口调用 前言 Spring Cloud OpenFeign是一种基于Spring Cloud的声明式REST客户端&#xff0c;它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口&#xff0c;并且…

餐厅点餐系统

TOC springboot0742餐厅点餐系统 系统概述 进过系统的分析后&#xff0c;就开始记性系统的设计&#xff0c;系统设计包含总体设计和详细设计。总体设计只是一个大体的设计&#xff0c;经过了总体设计&#xff0c;我们能够划分出系统的一些东西&#xff0c;例如文件、文档、数…

知乎信息流广告推广开户需要什么资质?

知乎作为中国领先的问答社区&#xff0c;凭借其高质量的内容和庞大的用户群体&#xff0c;成为了众多品牌青睐的营销阵地&#xff0c;云衔科技助力企业高效实现知乎广告开户及代运营服务。 一、知乎信息流广告推广开户资质要求 为了在知乎平台上投放信息流广告&#xff0c;企…

供应链系统源码的关键技术是什么?

供应链管理是企业运营中的重要环节&#xff0c;而高效的供应链系统能够大幅提升企业的竞争力。在数字化转型的过程中&#xff0c;越来越多的企业选择使用开源供应链系统源码来定制开发适合自身需求的解决方案。那么&#xff0c;供应链系统源码的关键技术有哪些&#xff1f;本文…

如何分析C语言中的声明

声明是C语言中一个非常基础但重要的部分&#xff0c;无论是阅读他人的代码&#xff0c;还是排查编译报错&#xff0c;正确理解声明都会对我们有莫大的帮助。 有的人可能会说声明不是很简单吗&#xff1f; 小A说&#xff0c;看&#xff0c;我声明了一个整型变量&#xff1a; i…

htsjdk SamReader接口介绍

SamReader 是 htsjdk 库中的一个接口,用于读取和解析 SAM(Sequence Alignment/Map)和 BAM(Binary Alignment/Map)格式的文件。htsjdk 是一个广泛使用的 Java 库,提供了处理高通量测序数据的工具,SamReader 是其中的一个核心接口。 SamReader 接口介绍 SamReader 主要用…