Windows下搭建paddlenlp 语义检索系统

news2024/11/29 2:38:36

windos下搭建paddlenlp 语义检索系统

之前搭建paddleocr的时候,创建了paddle的虚拟环境,顺便也装了paddlenlp的库,就想着直接用这个,然后语义检索模型本身没有问题了,可以正常推理了。但在搭建pipline的时候出现问题,application启动不起来。浪费了半天时间查看库的版本,和配置问题。paddlenlp这个库安装的比较久了,也忘了版本冲突,重新下了一遍,更新了paddle的版本之后,还是有问题。

在这里插入图片描述

比如grpcio这个库版本没办法避免,一个要求小于1.33.2,另一个paddle的库要求大于1.47.1,click这个库同样。

然后看了这个csdn参考帖子,以及官方给出的文档,官方文档,其中有一个针对windos安装的视频:视频地址。

视频和参考帖子都是重新create一个虚拟环境,避免库的版本冲突。大概我也是这个问题。当然,模型推理没问题,pipline出现的问题可以自己重写避免。

1 环境配置

1.1 在Anaconda下重新创建虚拟环境,并进入虚拟环境:

conda create -n paddlepipline python=3.9
conda activate paddlepipline

1.2 安装paddle:paddle主页

根据自己电脑安装所需版本,我自己安装cpu版本。

pip install paddlepaddle==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

1.3 安装paddle-pipelines

pip install --upgrade paddle-pipelines -i https://pypi.tuna.tsinghua.edu.cn/simple

1.4 下载paddlenlp源码,piplines源码包含在paddlenlp这个仓库中

git clone https://github.com/PaddlePaddle/PaddleNLP.git

1.5 进入到piplines目录,官方文档提示后续所有流程都只用在pipelines根目录下进行就行

cd PaddleNLP/piplines

1.6 查看语义检索推理效果,官方预置DuReader-Robust数据集的验证集中的1417条数据。

在这里插入图片描述

python examples/semantic-search/semantic_search_example.py --device cpu \
                                                          --search_engine faiss

使用gpu自行设置就行,search_engine默认是faiss,也可以不设置,另一个可选是milvus。

在这里插入图片描述

2 构建Web可视化语义检索系统

主要包括三个方面:基于ElasticSearch的ANN服务;基于RestAPI的构建模型服务;基于Streamlit构建WebUI。我之前一直在RestAPI,application挂不起来,可能因为版本冲突。

2.1 启动ANN服务

下载Elasticsearch并解压,官方文档给的是8.3.2版本,piplines里面requirements里给的是7.7-7.11的版本。

在这里插入图片描述

实测,8.7.1和7.11版本都可以,这里用的是8.7.1版本,下载安装教程可以参考我另一篇blog。

启动服务前,修改config中elasticsearch.yml配置,将xpack.security.enabled设置我false,默认是true。

xpack.security.enabled: false

看视频8.3.2和7.11的版本,都没有这条,可以自行加上。

es服务默认的端口是9200,其他详情参考我另一篇blog。

bin目录下,双击elasticsearch.bat,启动服务。

在这里插入图片描述

2.2 文档数据写入ANN索引库

# 以DuReader-Robust 数据集为例建立 ANN 索引库
python utils/offline_ann.py --index_name dureader_robust_query_encoder \
                            --doc_dir data/dureader_dev \
                            --search_engine elastic \
                            --embed_title True \
                            --delete_index

参数说明

  • index_name: 索引的名称
  • doc_dir: txt文本数据的路径
  • host: ANN索引引擎的IP地址
  • port: ANN索引引擎的端口号
  • search_engine: 选择的近似索引引擎elastic,milvus,默认elastic
  • delete_index: 是否删除现有的索引和数据,用于清空es的数据,默认为false
  • embed_title: 是否需要对标题建索引,默认为false,标题默认为文件名

2.3 启动RestAPI模型服务

指定环境变量,重写pipline服务的话,可以把这个写到参数里,总感觉这样不方便。

另外以前一直用Anaconda Prompt,但用Anaconda Powershell Prompt会更方便,多出了很多linux命令,比如,ls,不像在Anaconda Prompt里面要用dir。

另外Command shell是Windos内置的第一个shell,用于自动执行常规任务。PowerShell是Command shell的功能扩展,可以运行名为cmdlet的PowerShell命令,cmdlet是windos命令的拓展,Command shell只能运行Windows命令。

使用Anaconda Powershell Prompt的话:

$env:PIPELINE_YAML_PATH='rest_api/pipeline/semantic_search.yaml'

使用Anaconda Prompt:

set PIPELINE_YAML_PATH=rest_api/pipeline/semantic_search.yaml

然后,使用端口8891启动服务。

python rest_api/application.py 8891

哭了,之前浪费半天,看是不是es版本,或者其他代码的问题,结果就真的只是库版本冲突。

在这里插入图片描述

启动之后可以使用curl命令,验证是否成功运行,重新开一个cmd,进行验证:

直接复制官方文档的curl命令会报错:

curl -X POST -k http://localhost:8891/query -H 'Content-Type: application/json' -d '{"query": "范冰冰身高是多少?","params": {"Retriever": {"top_k": 5}, "Ranker":{"top_k": 5}}}'

正确的形式,这是因为windows的command.exe命令不支持单引号,所以要处理一下命令,先转义双引号,然后把单引号改为双引号。

curl -X POST -k http://localhost:8891/query -H "Content-Type:application/json" -d "{\"query\": \"范冰冰身高是多少?\", \"params\": {\"Retriever\": {\"top_k\": 5}, \"Ranker\":{\"top_k\": 5}}}"

在这里插入图片描述

同一个问题,通过es搜索之后,精度降低了?有两个评价指标,一个es_ann_score和score。看排序是根据score排的,但实际根据es_ann_score的话,和范冰冰相关那条0.9093是最高的。(代码还没有看)

2.4 启动WebUI

配置模型服务地址,重新开一个Anaconda Powershell Prompt:

$env:API_ENDPOINT='http://127.0.0.1:8891'

在端口8502启动WebUI。

python -m streamlit run ui/webapp_semantic_search.py --server.port 8502

在这里插入图片描述

启动成功,启动界面内置了一条。

在这里插入图片描述

看上去还挺准,还是范冰冰身高问题。

在这里插入图片描述

在这里插入图片描述

相关性比较差,模型推理的时候是没问题,那么可能跟es检索有关。

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

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

相关文章

工程测量--学习笔记

1、测量学的概念 测量学是研究地球的形状、大小以及地表(包括地面上各种物体)的几何形状及其空间位置的科学。 2、工程测量的概念 工程测量是运用测量学的基本原理和方法为各类工程服务。 3、测量工作分类 测量工作包括测定和测设两部分。 测定是指使用…

算法|2.异或运算

算法|2.异或运算 1.不用额外变量交换两个数的值 题意:不用额外变量交换(数组中)两个数的值 解题思路: 使用异或运算的性质 代码及运行结果: 2.找到唯一出现奇数次的数字 题意:一个数组中有一种数出现了…

这才是网络安全最系统的学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

一些小的问题

是否是质数&#xff1f; #include <stdio.h> #include <stdbool.h>bool is_prime(int num);int main() {int num;printf("请输入一个整数&#xff1a;");scanf("%d", &num);if (is_prime(num)) {printf("%d是质数。\n", num);} …

【萌新指南】如何获得铁粉?快收下我为你精心定制的涨粉秘籍吧

文章目录 前言"铁粉"介绍"铁粉"规则"铁粉"获取高质量博客坚持写博客参与活动 尾声 前言 目前博主的"铁粉"数量 "铁粉"介绍 "铁粉"是为了帮助博主解决上面提到的问题和困惑&#xff0c; CSDN 设计的一个功能&…

STM8、STM8S003F3P6 通过ZM470SX-MP模组实现lora通信

背景 现在物联网就是很火&#xff0c;lora是避免不开的&#xff0c;也有个项目采用STM8S003F3P6 使用周立功的lora模组ZM470SX-MP实现lora通信。 原理图 废话少说&#xff0c;上原理图 这个原理图我找了很久都没有找到&#xff0c;指示找到了管脚图&#xff0c;这个原理图非…

Linux——线程的同步与互斥

目录 模拟抢火车票的过程 代码示例 thread.cc Thread.hpp 运行结果 分析原因 tickets减到-2的本质 解决抢票出错的方案 临界资源的概念 原子性的概念 加锁 定义 初始化 销毁 代码形式如下 代码示例1&#xff1a; 代码示例2&#xff1a; 总结 如何看待锁 申…

2.自然语言处理NLP:词映射为向量——词嵌入(word embedding)

1. 什么是词嵌入&#xff08;word2vec&#xff09; &#xff1a; 把词映射为向量&#xff08;实数域&#xff09;的技术 2. 为什么不采用one-hot向量&#xff1a; one-hot词向量无法准确表达不同词之间的相似度&#xff0c;eg&#xff1a;余弦相似度&#xff0c;表示夹角之间的…

创新案例|Amazon如何打造增长飞轮保持每年20%以上的营收增速

作为世界五百强中的头部企业&#xff0c;亚马逊的价值定位经历了三次转变&#xff0c;从成为“地球上最大的书店”&#xff0c;到成为最大的综合网络零售商&#xff0c;再到成为“最以客户为中心的企业”&#xff0c;亚马逊最终以“客户中心”破除了对企业价值定位的束缚&#…

DNS风险分析及安全防护研究(三):DNS缓存投毒及防御策略

在前面章节中&#xff0c;我们简单介绍了DNS系统在协议、软件以及结构中脆弱性&#xff0c;并对DNSSEC协议、去中心化结构等安全增强进行了讨论&#xff0c;接下来针对DNS安全所面临的外部攻击威胁和相应的防御策略做下讨论。 1.DNS缓存投毒攻击 在目前各种DNS攻击手段中&…

安科瑞浅谈集成式电力电容器无功补偿装置的技术特点

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要&#xff1a;阐述了集成式电力电容器无功补偿装置的组成与应用状况&#xff0e;在与常规电力电容器对比的基础上&#xff0c;分析了集成式电力电容器无功补偿装置的技术特点。通过对集成式无功补偿装置原理结构的…

Linux文件系统、磁盘I/O是怎么工作的?

同CPU、内存一样&#xff0c;文件系统和磁盘I/O&#xff0c;也是Linux操作系统最核心的功能。磁盘为系统提供了最基本的持久化存储。文件系统则在磁盘基础上&#xff0c;提供了一个用来管理文件的树状结构。 目录&#xff1a; 一. 文件系统 1. 索引节点和目录项 2. 虚拟文件系…

提升国际品牌影响力:小企业海外网红营销实战指南

在当今数字化时代&#xff0c;小企业们越来越意识到海外市场的巨大潜力。与此同时&#xff0c;海外网红的崛起也为小企业提供了一个独特的机会&#xff0c;通过与他们合作&#xff0c;迅速拓展国际市场并吸引更多目标受众的关注。然而&#xff0c;对于许多小企业来说&#xff0…

超全性能测试-全链路压测总结,完整一套从环境到脚本详细...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试&#xf…

类和对象 --- 封装+对象特性

&#x1f442; 快乐E调 - 林澜叶 - 单曲 - 网易云音乐 &#x1f442; Plain Jane (Freestyle) - Ombre2Choc Nation - 单曲 - 网易云音乐 1.5倍速&#xff0c;跟着敲&#xff0c;初识C 目录 &#x1f3c6;封装 &#x1f333;属性和行为作为整体 &#x1f333;案例 -- 设置…

js数组去重与循环对象

目录 一、数组对象去重 1.1、需要获取重复数据 1.2、直接过滤filterfindIndex 二、循环对象 三、多层数组对象过滤 一、数组对象去重 1.1、需要获取重复数据 let persons [{"name": "yzq","age": 20,"gender": true,"hei…

k8s配置资源管理|secret|configmap

k8s配置资源管理|secret|configmap 一 配置资源管理1 创建 Secret2 使用方式3 将 Secret 导出到环境变量中 二 ConfigMap1 Pod 中使用 ConfigMap2 Pod的创建3 用 ConfigMap 设置命令行参数4 通过数据卷插件使用ConfigMap 一 配置资源管理 //Secret Secret 是用来保存密码、tok…

2023年6月合肥/厦门/长春/深圳DAMA-CDGP数据治理专家认证报名

目前6月18日CDGA&CDGP考试目前开放的城市有&#xff1a;北京、上海、广州(满)、深圳、长沙、呼和浩特、杭州&#xff08;满&#xff09;、南京、济南&#xff08;满&#xff09;、成都、西安、武汉&#xff08;满&#xff09;、天津。 新增了武汉、天津这2个城市。另外合肥…

【Netty】Reactor 模型(十)

文章目录 前言一、传统服务的设计模型二、NIO 分发模型三、Reactor 模型3.1、Reactor 处理请求的流程3.2、Reactor 三种角色 四、单Reactor 单线程模型4.1、消息处理流程4.2、缺点 五、单Reactor 多线程模型5.1、消息处理流程5.2、缺点 六、主从Reactor 多线程模型6.1、Reactor…

Python的一些基础实操练习题

书接上文多看一眼多进步&#xff0c;python入门到放弃&#xff0c;是根据python的知识点的一些基础练习题&#xff0c;说了是基础练习题&#xff0c;基础练习题&#xff0c;基础练习题&#xff0c;水平高的就别看了&#xff0c;平高的就别看了&#xff0c;高的就别看了&#xf…