Windows下搭建paddlenlp 语义检索系统

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检索有关。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值