使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名

作者:来自 Elastic Jeff Vestal

了解如何使用 Hugging Face 的模型在 Elasticsearch 中托管和执行语义重新排序。

在这篇简短的博文中,我将向你展示如何使用 Hugging Face 中的模型在搜索时在你自己的 Elasticsearch 集群中执行语义重新排序。我们将使用 Eland 下载模型,从 Hugging Face 加载数据集,并使用检索器执行示例查询,所有这些都在 Jupyter 笔记本中完成。

概述

如果你不熟悉语义文本,请查看以下资源:

  • 它是什么
  • 为什么要使用它
  • 如何创建推理 API 并将其连接到外部服务
  • 如何使用检索器查询进行重新排名

请查看以下链接:

  • 什么是语义重新排名以及如何使用它?
    • 了解在搜索和 RAG 管道中使用语义重新排名的权衡
  • 使用检索器在 Elasticsearch 中进行语义重新排名
    • 本博客包含视频演示和入门所需的所有内容的概述。
  • Elastic 文档 - 语义重新排名
    • 这个优秀的文档指南讨论了用例、编码器模型类型和 Elasticsearch 中的重新排名

本博客和随附笔记本中的代码也将帮助你入门,但我们不会深入讨论是什么和为什么。

另外,请注意,我将在下面展示代码片段,但自己做这件事的最佳方法是按照随附的笔记本进行操作。

步骤零

我还假设你有一个 Elasticsearch 集群或 serverless 项目,你将在本指南中使用它们。如果没有,请前往 cloud.elastic.co 并注册免费试用!你需要一个 Cloud ID 和 Elasticsearch API 密钥。

模型选择

第一步(真正的)是选择用于重新排名的模型。深入讨论选择模型和评估结果超出了本博客的范围。请注意,目前 Elasticsearch 仅支持跨编码(cross-encoder)器模型。

虽然没有直接涵盖模型选择,但以下博客很好地概述了评估搜索相关性。

  • 评估搜索相关性(三部分系列)
  • 搜索相关性调整:平衡关键字和语义搜索

对于本指南,我们将使用 cross-encoder/ms-marco-MiniLM-L-6-v2。该模型使用 MS Marco 数据集进行检索和重新排名。

模型加载

要将 Hugging Face 中的 NLP 模型加载到 Elasticsearch,你需要使用 Eland Python 库。

Eland 是 Elastic 的 Python 库,用于数据帧分析以及将监督和 NLP 模型加载到 Elasticsearch。它提供了一个熟悉的 Pandas 兼容 API。你可以参考文章来安装 Eland。

以下代码来自笔记本部分 “Hugging Face Reranking Model.”。

model_id = "cross-encoder/ms-marco-MiniLM-L-6-v2"cloud_id = "my_super_cloud_id"
api_key = "my_super_secred_api_key!"!eland_import_hub_model \
--cloud-id $cloud_id \
--es-api-key $api_key \
--hub-model-id $model_id \
--task-type text_similarity

Eland 没有特定的 “rerank” 任务类型;我们使用 text_similarity 类型来加载模型。

此步骤将在运行代码的本地下载模型,将其拆分,然后加载到你的 Elasticsearch 集群中。

切到

在笔记本中,你可以按照步骤设置集群以在下一节中运行重新排名查询。下载笔记本中显示的模型后的设置步骤如下:

  • 使用重新排名任务创建推理端点
    • 这还将在 Elasticsearch 机器学习节点上部署我们的重新排名模型
  • 创建索引映射
  • 从 Hugging Face - CShorten/ML-ArXiv-Papers 下载数据集
  • 将数据索引到 Elasticsearch

重新排序时间!

一切设置完毕后,我们可以使用 text_similarity_reranker 检索器进行查询。文本相似性重新排序器是一个两阶段重新排序器。这意味着首先运行指定的检索器,然后将这些结果传递到第二个重新排序阶段。

笔记本中的示例:

query = "sparse vector embedding"# Query with Semantic Reranker
response_reranked = es.search(index="arxiv-papers-lexical",body={"size": 10,"retriever": {"text_similarity_reranker": {"retriever": {"standard": {"query": {"match": {"title": query}}}},"field": "abstract","inference_id": "semantic-reranking","inference_text": query,"rank_window_size": 100}},"fields": ["title", "abstract"], "_source": False}
)

上述 text_similarity_reranker 的参数为:

  • retriever - 在这里,我们使用标准检索器进行词汇第一阶段检索的简单匹配查询。你也可以在此处使用 knn 检索器或 rrf 检索器。
  • field - 重新排名模型将用于相似性比较的第一阶段结果中的字段。
  • inference_id - 用于重新排名的推理服务的 ID。在这里,我们使用我们之前加载的模型。
  • inference_text - 用于相似性排名的字符串
  • rank_window_size - 模型将考虑的第一阶段的顶级文档数量。

你可能想知道为什么 `rank_window_size` 设置为 100,即使你最终可能只想要前 10 个结果。

在两阶段搜索设置中,初始词汇搜索为语义重新排序器提供了广泛的文档集以供评估。返回 100 个结果的较大集合增加了相关文档可供语义重新排序器识别并根据语义内容(而不仅仅是词汇匹配)重新排序的机会。这种方法弥补了词汇搜索在捕捉细微含义方面的局限性,使语义模型能够筛选出更广泛的可能性。

但是,找到正确的 `rank_window_size` 是一种平衡。虽然更大的候选集可以提高准确性,但也可能会增加资源需求,因此需要进行一些调整以在召回率和资源之间实现最佳权衡。

比较

虽然我不会在本简短指南中对结果进行深入分析,但可能引起普遍兴趣的是查看标准词汇匹配查询的前 5 个结果和上述重新排序查询的结果。

此数据集包含有关机器学习的 ArXiv 论文子集。列出的结果是论文的标题。

评分结果” 是使用标准检索器的前 10 个结果

重新排序结果” 是重新排序后的前 10 个结果

搜索 “sparse vector embedding” 的结果
评分结果重新排序结果
0Compact Speaker Embedding: lrx-vectorScaling Up Sparse Support Vector Machines by Simultaneous Feature and Sample Reduction
1Quantum Sparse Support Vector MachinesSpaceland Embedding of Sparse Stochastic Graphs
2Sparse Support Vector Infinite PushElliptical Ordinal Embedding
3The Sparse Vector Technique, RevisitedMinimum-Distortion Embedding
4L-Vector: Neural Label Embedding for Domain AdaptationFree Gap Information from the Differentially Private Sparse Vector and Noisy Max Mechanisms
5Spaceland Embedding of Sparse Stochastic GraphsInterpolated Discretized Embedding of Single Vectors and Vector Pairs for Classification, Metric Learning and Distance Approximation
6Sparse Signal Recovery in the Presence of Intra-Vector and Inter-Vector CorrelationAttention Word Embedding
7Stable Sparse Subspace Embedding for Dimensionality ReductionBinary Speaker Embedding
8Auto-weighted Mutli-view Sparse Reconstructive EmbeddingNetSMF: Large-Scale Network Embedding as Sparse Matrix Factorization
9Embedding Words in Non-Vector Space with Unsupervised Graph LearningEstimating Vector Fields on Manifolds and the Embedding of Directed Graphs

轮到你了

希望你明白将 Hugging Face 的重新排名模型整合到 Elasticsearch 中是多么容易,这样你就可以开始重新排名了。虽然这不是唯一的重新排名选项,但当你在隔离环境中运行、无法访问外部重新排名服务、想要控制成本或拥有一个特别适合你的数据集的模型时,它会很有帮助。

如果你还没有点击随附笔记本的众多链接之一,现在是时候了!

准备好自己尝试一下了吗?开始免费试用。

想要获得 Elastic 认证吗?了解下一次 Elasticsearch 工程师培训何时举行!

原文:Reranking with an Elasticsearch-hosted cross-encoder from HuggingFace - Search Labs

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

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

相关文章

深究JS底层原理

一、JS中八种数据类型判断方法 在JavaScript中,数据类型分为两大类:基本(原始)数据类型和引用(对象)数据类型。 基本数据类型(Primitive Data Types) 基本数据类型是表示简单的数…

C++虚继承演示

在继承中如果出现: 这种情况,B和C都继承了A,D继承了B、C 在D中访问A的成员会出现: 这样的警告 是因为在继承时A出现两条分支:ABD、ACD 编译器不知道访问的A中的元素是经过B继承还是C继承 所以B、C在继承A时要用到…

【1】虚拟机安装

1.安装VMware WorkStation Pro VMware下载地址: 密钥:YF390-0HF8P-M81RQ-2DXQE-M2UT6 2.新建虚拟机 centos7下载地址:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云

【机器学习】均方误差根(RMSE:Root Mean Squared Error)

均方误差根(Root Mean Squared Error,RMSE)是机器学习和统计学中常用的误差度量指标,用于评估预测值与真实值之间的差异。它通常用于回归模型的评价,以衡量模型的预测精度。 RMSE的定义与公式 给定预测值 和实际值 …

python可视化进阶

引用: 首先需要安装 plotnine from plotnine import* import joypy数据可视化进阶操作 3.1 类别数据可视化 【例3-1】——绘制简单条形图 【代码框3-1】——绘制简单条形图 # 图3-1的绘制代码 import pandas as pd import matplotlib.pyplot as plt from cvxpy …

玩的花,云产品也能拼团了!!!

说起拼单大家都不陌生,电商一贯的营销手段,不过确实可以给消费者省下一笔钱。双11到了,腾讯云产品也玩起了拼团,这明显是对开发人员和各企业的福利。 对于有云产品需求的个人或企业,这次绝对是难得的一次薅羊毛机会。…

设计模式-七个基本原则之一-开闭原则 + SpringBoot案例

开闭原则:(SRP) 面向对象七个基本原则之一 对扩展开放:软件实体(类、模块、函数等)应该能够通过增加新功能来进行扩展。对修改关闭:一旦软件实体被开发完成,就不应该修改它的源代码。 要看实际场景,比如组内…

Flutter 插件 sliding_up_panel 实现从底部滑出的面板

前言 sliding_up_panel 是一个 Flutter 插件,用于实现从底部滑出的面板。它在设计上非常灵活,能够适应多种 UI 场景,比如从底部滑出的菜单、可拖动的弹出面板等。以下是 sliding_up_panel 的详细用法,包括常用的参数说明和示例代…

出海企业如何借助云计算平台实现多区域部署?

云计算de小白 如需进一步了解,请单击链接了解有关 Akamai 云计算的更多信息 在本文中我们将告诉大家如何在Linode云计算平台上借助VLAN快速实现多地域部署。 首先我们需要明确一些基本概念和思想: 部署多区域 VLAN 为了在多区域部署中在不同的 VLAN …

Linux(CentOS)安装 JDK

CentOS版本:CentOS 7 JDK版本:JDK17 1、下载 JDK 官网:https://www.oracle.com/ 2、上传 JDK 文件到 CentOS 使用FinalShell远程登录工具,并且使用 root 用户连接登录(注意这里说的root用户连接登录是指这样的&…

多边形电子围栏算法

在日常生活工作中,我们经常接触到电子围栏,大部分的电子围栏基本上都是圆形的,想要知道某一个点是否在圆形区域内,算法很简单,只需要知道这个圆形区域的圆心坐标和被测点的坐标的距离是否小于半径即可。两点的距离小于…

柯桥学日语J.TEST考试是什么?J.TEST考试报名

J.TEST考试是什么? J.TEST全称为实用日本语鉴定考试,在2007年获得了国家劳动和社会保障部的认可,作为面对母语为非日本语的人员进行的日本语能力测试,J.TEST被越来越多的日本企业所认可,由于其对日语的实际运用能力具有…

谈谈ssh-keygen进行多host配置及使用

背景 传统的Telnet、FTP协议都是使用明文传输数据,存在一定的安全风险,如果传输数据被截取,可能造成数据泄露风险,尤其对于敏感数据,泄露造成的损失无法估计。最近公司、github等平台都不再支持http方式进行代码下载工…

谷粒商城-高级篇-认证服务

1、环境搭建 1、创建gulimall-auth-server模块 2、导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schem…

独显装完ubuntu后启动黑屏显示/dev/sda:clean files blocks的解决方案

解决方案如下&#xff1a; 选中Ubuntu按E键 在编辑界面倒数第2行的linux那行&#xff08;后面有quiet splash选项&#xff09;的最后添加nomodeset 然后按F10保存重启 然后管理员权限打开/etc/modprobe.d/blacklist.conf&#xff0c;在文件末尾添加&#xff1a; blacklist…

ArcGIS 地理信息系统 任意文件读取漏洞复现

0x01 产品简介 ArcGIS是由美国Esri公司研发的地理信息系统(GIS)软件,它整合了数据库、软件工程、人工智能、网络技术、云计算等主流的IT技术,旨在为用户提供一套完整的、开放的企业级GIS解决方案,它包含了一套带有用户界面组件的Windows桌面应用。可以实现从简单到复杂的…

Linux 系统结构

Linux系统一般有4个主要部分&#xff1a;内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构&#xff0c;它们使得用户可以运行程序、管理文件并使用系统。 1. linux内核 内核是操作系统的核心&#xff0c;具有很多最基本功能&#xff0c;它…

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”

SLF4J常见问题 1、SLF4J简介2、SLF4J实现原理3、SLF4J常见问题 1、SLF4J简介 SLF4J&#xff08;Simple Logging Facade for Java&#xff09;是一个为Java程序提供日志输出的统一接口&#xff0c;并不具备具体的日志实现方案&#xff0c;类似JDBC&#xff0c;SLF4J只做两件事&a…

使用ThorUi

摘要&#xff1a; 官网 今天遇到一个老项目&#xff0c;使用的是ThorUi组件库&#xff01;之前没有用过这组件库&#xff0c;所以记录一下不同框架是使用情况&#xff01; ThorUI 是一个基于 Thorium 的 UI 框架&#xff0c;用于构建跨平台的桌面应用程序。如果你打算使用 Thor…

OceanBase中,如何解读 obdiag 收集的火焰图 【DBA早下班系列】

1. 前言 在之前的文章 遇到性能问题&#xff0c;如何给OceanBase“拍CT“&#xff08;火焰图与扁鹊图&#xff09;中&#xff0c;分享了obdiag 快速收集火焰图的方法&#xff0c;那么&#xff0c;紧接着的问题便是&#xff1a;收集到火焰图和扁鹊图之后&#xff0c;该如何解读…