# 部署语义模型服务-以simnet_bow为例 ## 简介 `simnet_bow`是一个计算短文本相似度的模型,可以根据用户输入的两个文本,计算出相似度得分。关于`simnet_bow`的具体信息请参见[simnet_bow](https://paddlepaddle.org.cn/hubdetail?name=simnet_bow&en_category=SemanticModel)。 使用PaddleHub Serving可以部署一个在线语义模型服务,可以将此接口用于在线文本相似度分析、智能问答检索等应用。 这里就带领大家使用PaddleHub Serving,通过简单几步部署一个语义模型在线服务。 ## Step1:启动PaddleHub Serving 启动命令如下: ```shell $ hub serving start -m simnet_bow ``` 启动时会显示加载模型过程,启动成功后显示: ```shell Loading lac successful. ``` 这样就完成了一个语义模型服务化API的部署,默认端口号为8866。 ## Step2:测试语义模型在线API 在服务部署好之后,我们可以进行测试,用来测试的文本对分别为`[这道题太难了:这道题是上一年的考题], [这道题太难了:这道题不简单], [这道题太难了:这道题很有意思]`。 首先指定编码格式及引入需要的包: ```python >>> # coding: utf8 >>> import requests >>> import json ``` 准备的数据格式为: ```python {"text_1": [text_a1, text_a2, ... ], "text_2": [text_b1, text_b2, ... ]} ``` **NOTE:** 字典的key分别为"text_1"和"text_2",与`simnet_bow`模型使用的输入数据一致。 根据文本和数据格式,代码如下: ```python >>> # 指定用于用于匹配的文本并生成字典{"text_1": [text_a1, text_a2, ... ] >>> # "text_2": [text_b1, text_b2, ... ]} >>> text = { >>> "text_1": ["这道题太难了", "这道题太难了", "这道题太难了"], >>> "text_2": ["这道题是上一年的考题", "这道题不简单", "这道题很有意思"] >>> } ``` ## Step3:获取并验证结果 接下来发送请求到语义模型API,并得到结果,代码如下: ```python >>> # 指定匹配方法为simnet_bow并发送post请求 >>> url = "http://127.0.0.1:8866/predict/text/simnet_bow" >>> r = requests.post(url=url, data=text) ``` `simnet_bow`模型返回的结果为每对文本对比后的相似度,我们尝试打印接口返回结果: ```python # 打印预测结果 >>> print(json.dumps(r.json(), indent=4, ensure_ascii=False)) { "msg": "", "results": [ { "similarity": 0.8445, "text_1": "这道题太难了", "text_2": "这道题是上一年的考题" }, { "similarity": 0.9275, "text_1": "这道题太难了", "text_2": "这道题不简单" }, { "similarity": 0.9083, "text_1": "这道题太难了", "text_2": "这道题很有意思" } ], "status": "0" } ``` 这样我们就完成了对语义模型simnet_bow的预测服务化部署和测试。 完整的测试代码见[simnet_bow_serving_demo.py](simnet_bow_serving_demo.py)。