解决方案

Windows下搭建paddlenlp 语义检索系统

seo靠我 2023-09-24 03:47:32

windos下搭建paddlenlp 语义检索系统

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

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

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

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

1 环境配置

1.1 在Anaconda下重新创建虚拟环境,并进入虚拟环境: conda create -n paddlepipline python=3.9 SEO靠我 conda activate paddlepipline 1.2 安装paddle:paddle主页

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

pip instaSEO靠我ll paddlepaddle==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple 1.3 安装paddle-pipelines SEO靠我 pip install --upgrade paddle-pipelines -i https://pypi.tuna.tsinghua.edu.cn/simple 1SEO靠我.4 下载paddlenlp源码,piplines源码包含在paddlenlp这个仓库中 git clone https://github.com/PaddlePaddle/PaddlSEO靠我eNLP.git 1.5 进入到piplines目录,官方文档提示后续所有流程都只用在pipelines根目录下进行就行 cd PaddleNLP/piplines SEO靠我 1.6 查看语义检索推理效果,官方预置DuReader-Robust数据集的验证集中的1417条数据。 python examples/semantic-searcSEO靠我h/semantic_search_example.py --device cpu \--search_engine faiss

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

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

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

2.1 启动ANN服务

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

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

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

xpack.security.enabled: false

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

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

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

2.2 文档数据写入ANN索引库 # 以DuSEO靠我Reader-Robust 数据集为例建立 ANN 索引库 python utils/offline_ann.py --index_name dureader_robust_querySEO靠我_encoder \--doc_dir data/dureader_dev \--search_engine elastic \--embed_title True \--delete_index

参数SEO靠我说明

index_name: 索引的名称doc_dir: txt文本数据的路径host: ANN索引引擎的IP地址port: ANN索引引擎的端口号search_engine: 选择的近似索引引擎elaSEO靠我stic,milvus,默认elasticdelete_index: 是否删除现有的索引和数据,用于清空es的数据,默认为falseembed_title: 是否需要对标题建索引,默认为false,标SEO靠我题默认为文件名 2.3 启动RestAPI模型服务

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

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

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

使用Anaconda Powershell Prompt的话:

$env:PIPELINE_YAML_PATH=rest_api/pipeline/semanSEO靠我tic_search.yaml

使用Anaconda Prompt:

set PIPELINE_YAML_PATH=rest_api/pipeline/semantic_search.yaml

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

python rest_api/application.py 8891

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

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

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

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

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

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

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

2.4 启动WebUI

配置模型服务地址,重新开一个AnacondSEO靠我a Powershell Prompt:

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

在端口8502启动WebUI。

python -m streamlit run uiSEO靠我/webapp_semantic_search.py --server.port 8502

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

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

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

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2