Elasticsearch:相关性工作台 - BM25 及 ELSER 的相关性比较

news2024/9/24 1:26:42

我们知道 Elastics Learned Sparse EncoderR (ELSER) 可以被用来做语义搜索。它是一个 out-of-domain 的语义搜索模型。无需训练,我们就可以得到很好的相关性。有关 ELSER 的更多知识,请参考文章 “Elastic Learned Sparse Encoder 简介:Elastic 用于语义搜索的 AI 模型”。在传统的 BM25 搜索中,我们可以对所需要搜索的文字进行分词。它也可以得到很好的召回率。那么,他们在实际的使用中,有什么区别呢?在今天的文章中,我们将通过一个实际的例子来进行展示。我们针对同样一段文字,同时使用 BM25 及 ELSER 来对它们进行搜索,我们可以看看他们的相关性如何。

在本展示中,我们将使用最新的 Elastic Stack 8.11 来进行展示。你将需要部署 Elasticsearch (> 8.11) 并部署 ELSER 模型。

安装

安装 Elasticsearch 及 Kibana

如果你还没有安装好自己的 Elasticsearch 及 Kibana,那么请参考一下的文章来进行安装:

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch

  • Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana

在安装的时候,请选择 Elastic Stack 8.x 进行安装

为了能够正确使用 ELSER,我们必须订阅白金版或试用:

部署 ELSER

我们可以参考文章 “Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR” 来部署 ELSER。

安装 Enterprise Search

我们可以参考文章 “Enterprise:使用 MySQL connector 同步 MySQL 数据到 Elasticsearch” 来安装 Enterprise Search。这里就不再累述了。

装载数据

最好的方法是使用企业搜索创建新索引并配置摄取管道以丰富数据。从 Kibana 的登录页面导航至 “Search”。

创建索引

在上面我们创建一个叫做 search-movies 的索引。

配置 ingest pipeline

在索引配置屏幕上,导航到 “Pipelines” 选项卡,然后单击 “Copy and customize”。

运行脚本来摄入数据

转到文件夹 data 并运行 python 脚本 index-data.py 以提取电影数据集。

为了将其连接到正确的 Elasticsearch 实例,我们需要需要把相应的 Elasticsearch 证书拷贝到当前的目录中。

$ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/relevance-workbench/data
$ cp ~/elastic/elasticsearch-8.11.0/config/certs/http_ca.crt .
$ ls
http_ca.crt           movies-sample.json.gz requirements.txt
index-data.py         movies.json.gz

我们按照如下的步骤来运行脚本:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

接下来,我们使用如下的命令来写入数据:

 python3 index-data.py --es_password=o6G_pvRL=8P*7on+o6XH --es_url=https://localhost:9200
$ python3 index-data.py --es_password=o6G_pvRL=8P*7on+o6XH --es_url=https://localhost:9200
Init Elasticsearch client
{'name': 'liuxgm.local', 'cluster_name': 'elasticsearch', 'cluster_uuid': 'n1BjmRPcR2GObT6ZMbJ9xA', 'version': {'number': '8.11.0', 'build_flavor': 'default', 'build_type': 'tar', 'build_hash': 'd9ec3fa628c7b0ba3d25692e277ba26814820b20', 'build_date': '2023-11-04T10:04:57.184859352Z', 'build_snapshot': False, 'lucene_version': '9.8.0', 'minimum_wire_compatibility_version': '7.17.0', 'minimum_index_compatibility_version': '7.0.0'}, 'tagline': 'You Know, for Search'}
Indexing movies data, this might take a while...
100%|█████████████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:12<00:00,  8.19documents/s, success=100]
Indexing completed! Success percentage: 100.0%
Done indexing movies data

你需要根据自己的 Elasticsearch 密码进行相应的修改。请注意,这里的密码默认的是超级用户 elastic 的密码。

请注意,默认情况下,仅对数据集的子集(100 部电影)建立索引。 如果你有兴趣对整个数据(7918 部电影)建立索引,可以通过在命令行中添加选项 --gzip_file=movies.json.gz 来选择 movie.json.gz 文件。 请注意,索引完整数据集可能需要长达 1 小时的时间。

等写入完数据,我们可以在 Kibana 中进行查看:

运行应用

一旦数据成功建立索引,你就可以运行应用程序来开始比较相关性模型。

该应用程序由后端 Python API 和 React 前端组成。 你可以使用 Docker compose 在本地运行整个应用程序。

编辑 docker-compose.yml 文件以替换其值。 重复使用用于加载数据的相同信息。

为了能够使得 docker 能够针对自签名的 Elasticsearch 部署起作用,我们把证书拷贝到当前的目录中:

(.venv) $ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/relevance-workbench
(.venv) $ cp ~/elastic/elasticsearch-8.11.0/config/certs/http_ca.crt .
(.venv) $ ls
LICENSE            app-api            data               http_ca.crt
README.md          app-ui             docker-compose.yml images

在运行之前,我们必须确认你的 elaser id:

它必须和 app-api/app.py 里的 model_id 是一致的:

然后,我们需要使用如下的命令来启动应用:

docker-compose up

我们使用的 docker-compose.yml 文件如下:

docker-compose.yml

version: '3.7'

services:
  api:
    build:
      context: ./app-api
      dockerfile: Dockerfile
    volumes:
      - './app-api:/usr/src/app'
      - './http_ca.crt:/usr/share/certs/http_ca.crt:ro'
    ports:
      - 8000:8000
    environment:
      - CLOUD_ID=<cloud_id>
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTICSEARCH_PASSWORD=o6G_pvRL=8P*7on+o6XH
      - ELASTICSEARCH_URL=https://192.168.0.3:9200

  client:
    build:
      context: ./app-ui
      dockerfile: Dockerfile
    volumes:
      - './app-ui:/usr/src/app'
    ports:
      - 3000:3000
    environment:
      - NEXT_API_URL=http://host.docker.internal:8000
    depends_on:
      - api

在上面,你需要根据自己的 Elasticsearch 配置来修改上面的环境变量。你需要传入相应的证书信息。

我们可以在浏览器中输入地址 localhost:3000:

一旦应用成功启动,我们可以看到有两个容器正在运行中。如果你只看到其中的一个,则表明你的运行是有问题的:

$ docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                    NAMES
ffda44fa148b   relevance-workbench-client   "./entrypoint.sh yar…"   59 seconds ago   Up 59 seconds   0.0.0.0:3000->3000/tcp   relevance-workbench-client-1
6970577e8278   relevance-workbench-api      "python3 -m flask ru…"   59 seconds ago   Up 59 seconds   0.0.0.0:8000->8000/tcp   relevance-workbench-api-1
$ 

搜索一下

我们搜索一下 super hero:

我们再搜索一下 animated movies:

我们发现 ELSER 可以得到更加满意的语义搜索结果。

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

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

相关文章

QuickLook 万能的 Windows 预览工具

QuickLook 是一款用于 Microsoft Windows 操作系统的轻量级文件预览工具。它提供了类似于 Mac OS X 上的"快速查看"功能的体验&#xff0c;允许用户在不打开文件的情况下快速预览文件内容。我们只需要按下键盘空格键就可以预览文件&#xff0c;当预览的是 docx 等文件…

安装NLTK Data

文章目录 NLTK离线安装1. 获取安装包2. 放置nltk_data文件3. Demo4. 参考链接 关注公众号&#xff1a;『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或CSDN滴滴我 nltk库是python语言为自然语言处理提供的一个功能强大&#xff0c;简单易用的函数库&a…

大疆第九届篮球联赛举办的记忆

首先感谢各位大哥支持&#xff0c;我们自己举办了2023 DJI第九届篮球运动比赛&#xff0c;恭喜各位参赛队伍&#xff0c;收获了荣誉、进行了运动锻炼与交流。 队长们合影留念&#xff1a; 从左往右队长依次介绍为&#xff1a;养生队-大凤、疆来队 - 乔丹 、十二人队 - 腾哥、 J…

Python自动化测试(unittest框架)

一、什么是框架 框架是由大佬开发或者专业的研发团队研发的技术骨架&#xff0c;框架是一个半成品&#xff0c;框架是对常用的功能&#xff0c;基础的代码进行封装的一个工具&#xff0c;这个工具对外提供了一些API&#xff0c;其他的开发者只需要调用框架的接口即可&#xff…

Python学习开发mock接口

#1.测试为什么要开发接口&#xff1f; 1)在别的接口没有开发好的时候, mock接口(模拟接口) 2)查看数据, 避免直接操作数据库 #2.开发接口的顺序 1)安装flask flask是一个轻量级开发框架 pip install flask 2)开发一个接口 开发步骤&#xff1a; 1.实例化一个服务server:f…

访谈型软文写作方式,媒介盒子告诉你

访谈型软文一般用于维护企业形象&#xff0c;分享品牌故事。但是许多企业在写访谈型软文时经常容易跑偏或者写来写去没有逻辑&#xff0c;今天媒介盒子就来和大家分享访谈型软文的写作方式&#xff0c;看完这四点&#xff0c;小白也能写好访谈型软文&#xff01; 一、 访谈对象…

03鸿蒙ArkTS应用开发及ArkTS语言学习

目录 1、概述1.1、模型到底是什么&#xff1f;1.2、Stage和FA模型最大的区别到底是什么&#xff1f;1.3、ArkTs和JS开发语言该怎么选呢&#xff1f; 2、一张图认识ArkTS应用的工程目录3、ArkTS开发语言3.1、ArkTS语言从哪里来&#xff1f;3.2、ArkTS基本语法 4、开发一个登录界…

SCI期刊投稿的不同状态

投稿过程中的不同状态代表了稿件的不同处理阶段 1. Submitted to Journal 已提交至期刊 刚投稿成功&#xff0c;邮箱会收到确认信件&#xff0c;等待编辑处理稿件&#xff0c;这个状态自然形成&#xff0c;无需作者处理。 2. Awaiting admin processing 等待管理员处理 文…

面对同行恶意排挤,佳卫苗灭杀病毒HPV向市场发出灵魂五问

近期&#xff0c;抗HPV市场因为一款名叫“佳卫苗灭杀病毒HPV”的产品诞生而风起云涌。上市之初&#xff0c;产品方便表示&#xff0c;佳卫苗灭杀病毒HPV的诞生&#xff0c;不仅是为了造福患者&#xff0c;更是为了优化市场、刺激行业升级&#xff0c;以“机理更科学、材料更先进…

Windows进程机制

进程 进程要做任何事情&#xff0c;必须让一个线程在它的上下文运行。该线程负责执行进程地址空间包含的代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。当系统创建一个进程的时候&#xff0c;会自动为进程创建第一个线程&#xff0c;这称为主线程&#xff08;…

MyBatis--07--启动过程分析、SqlSession安全问题、拦截器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 谈谈MyBatis的启动过程具体的操作过程如下&#xff1a;实现测试类,并测试SqlSessionFactorySqlSession SqlSession有数据安全问题?在MyBatis中&#xff0c;SqlSess…

可观测性是什么?新手入门指南!

如果您之前对可观测性重要性&#xff0c;益处&#xff0c;以及组成不甚了解&#xff0c;本文是一个合适的指南手册。 什么是可观测性&#xff1f; 可观测性被定义为根据系统产生的输出数据&#xff08;如日志&#xff0c;指标和链路追踪&#xff09;来衡量当前系统运行状态的…

Python虚拟环境指南:告别依赖地狱

一、背景 在SAAS&#xff08;软件即服务&#xff09;平台中&#xff0c;用户使用自行定制的Python脚本已经成为司空见惯的做法&#xff0c;然而&#xff0c;由于不同用户对Python三方库的需求各不相同&#xff0c;而底层服务器一般只安装了一个Python版本。举例来说&#xff0…

【STM32单片机】旋转太空人设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使IIC OLED液晶等。 主要功能&#xff1a; 系统运行后&#xff0c;OLED显示动画界面。 二、软件设计 /* 作者&#xff1a;嗨小易&#xff08;QQ&#x…

Stable Diffusion 系列教程 - 3 模型下载和LORA模型的小白入门

首先&#xff0c;一个比较广泛的模型下载地址为&#xff1a;Civitai Models | Discover Free Stable Diffusion Models 黄框是一些过滤器&#xff0c;比如checkpoints可以理解为比如把1.5版本的SD模型拷贝一份后交叉识别新的画风或场景后得到的模型&#xff0c;可以单独拿出来使…

[CC13X0] XDS100V3连接报错:Make sure your device is unlocked.

用XDS100V3给CC1310下载程序时&#xff0c;发现如下连接错误&#xff1a; An error occurred while hard opening the controller. -----[An error has occurred and this utility has aborted]-------------------- This error is generated by TIs USCIF driver or utilities…

mysql 数据库 关于库的基本操作

库的操作 如果想到 mysql 客户端当中数据 系统当中的命令的话&#xff0c;直接输入的话&#xff0c;会被认为是 mysql 当中的命令。 所以&#xff0c;在mysql 当中执行系统当中的命令的话&#xff0c;要在系统命令之前带上 ststem &#xff0c;表示系统命令&#xff1a; 但是…

[css] flex wrap 九宫格布局

<div class"box"><ul class"box-inner"><li>九宫格1</li><li>九宫格2</li><li>九宫格3</li><li>九宫格4</li><li>九宫格5</li><li>九宫格6</li><li>九宫格7&l…

2024年高效远程协同运维工具推荐

随着企业的不断发展以及变化&#xff0c;企业的内部IT环境也是日益复杂&#xff0c;一跨高效远程协同运维工具必不可少&#xff0c;不仅可以提高生产力&#xff0c;还能降低运营成本。这里就给大家推荐2024年高效远程协同运维工具。 高效远程协同运维工具应用场景 1、IT运维管…

WPF仿网易云搭建笔记(1):项目搭建

文章目录 前言项目地址动态样式组合样式批量样式覆盖Prism新建UserControler修改Material Design 笔刷收放列表可以滚动的StackPanel列表点击展开或折叠 实现效果 前言 今天接着继续细化代码&#xff0c;把整体框架写出来 项目地址 WPF仿网易云 Gitee仓库 动态样式 【WPF】C#…