README.md 3.0 KB
Newer Older
走神的阿圆's avatar
走神的阿圆 已提交
1
# 部署语义模型服务-以simnet_bow为例
走神的阿圆's avatar
走神的阿圆 已提交
2 3
## 简介
`simnet_bow`是一个计算短文本相似度的模型,可以根据用户输入的两个文本,计算出相似度得分。关于`simnet_bow`的具体信息请参见[simnet_bow](https://paddlepaddle.org.cn/hubdetail?name=simnet_bow&en_category=SemanticModel)
走神的阿圆's avatar
走神的阿圆 已提交
4

走神的阿圆's avatar
走神的阿圆 已提交
5
使用PaddleHub Serving可以部署一个在线语义模型服务,可以将此接口用于在线文本相似度分析、智能问答检索等应用。
走神的阿圆's avatar
走神的阿圆 已提交
6

走神的阿圆's avatar
走神的阿圆 已提交
7
这里就带领大家使用PaddleHub Serving,通过简单几步部署一个语义模型在线服务。
走神的阿圆's avatar
走神的阿圆 已提交
8

走神的阿圆's avatar
走神的阿圆 已提交
9
## Step1:启动PaddleHub Serving
10
启动命令如下:
走神的阿圆's avatar
走神的阿圆 已提交
11 12 13
```shell
$ hub serving start -m simnet_bow  
```
14
启动时会显示加载模型过程,启动成功后显示:
走神的阿圆's avatar
走神的阿圆 已提交
15 16 17 18 19
```shell
Loading lac successful.
```
这样就完成了一个语义模型服务化API的部署,默认端口号为8866。

走神的阿圆's avatar
走神的阿圆 已提交
20
## Step2:测试语义模型在线API
走神的阿圆's avatar
走神的阿圆 已提交
21 22
在服务部署好之后,我们可以进行测试,用来测试的文本对分别为`[这道题太难了:这道题是上一年的考题], [这道题太难了:这道题不简单], [这道题太难了:这道题很有意思]`

23 24 25 26 27 28
首先指定编码格式及引入需要的包:
```python
>>> # coding: utf8
>>> import requests
>>> import json
```
29
准备的数据格式为:
走神的阿圆's avatar
走神的阿圆 已提交
30 31 32
```python
{"text_1": [text_a1, text_a2, ... ], "text_2": [text_b1, text_b2, ... ]}
```
走神的阿圆's avatar
走神的阿圆 已提交
33
**NOTE:** 字典的key分别为"text_1"和"text_2",与`simnet_bow`模型使用的输入数据一致。
走神的阿圆's avatar
走神的阿圆 已提交
34

35
根据文本和数据格式,代码如下:
走神的阿圆's avatar
走神的阿圆 已提交
36 37 38 39 40 41 42 43
```python
>>> # 指定用于用于匹配的文本并生成字典{"text_1": [text_a1, text_a2, ... ]
>>> #                              "text_2": [text_b1, text_b2, ... ]}
>>> text = {
>>>     "text_1": ["这道题太难了", "这道题太难了", "这道题太难了"],
>>>     "text_2": ["这道题是上一年的考题", "这道题不简单", "这道题很有意思"]
>>> }
```
走神的阿圆's avatar
走神的阿圆 已提交
44 45

## Step3:获取并验证结果
46
接下来发送请求到语义模型API,并得到结果,代码如下:
走神的阿圆's avatar
走神的阿圆 已提交
47 48 49 50 51
```python
>>> # 指定匹配方法为simnet_bow并发送post请求
>>> url = "http://127.0.0.1:8866/predict/text/simnet_bow"
>>> r = requests.post(url=url, data=text)
```
52
`simnet_bow`模型返回的结果为每对文本对比后的相似度,我们尝试打印接口返回结果:
走神的阿圆's avatar
走神的阿圆 已提交
53 54 55 56
```python
# 打印预测结果
>>> print(json.dumps(r.json(), indent=4, ensure_ascii=False))
{
57
    "msg": "",
走神的阿圆's avatar
走神的阿圆 已提交
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
    "results": [
        {
            "similarity": 0.8445,
            "text_1": "这道题太难了",
            "text_2": "这道题是上一年的考题"
        },
        {
            "similarity": 0.9275,
            "text_1": "这道题太难了",
            "text_2": "这道题不简单"
        },
        {
            "similarity": 0.9083,
            "text_1": "这道题太难了",
            "text_2": "这道题很有意思"
        }
74 75
    ],
    "status": "0"
走神的阿圆's avatar
走神的阿圆 已提交
76 77 78 79 80
}
```
这样我们就完成了对语义模型simnet_bow的预测服务化部署和测试。

完整的测试代码见[simnet_bow_serving_demo.py](simnet_bow_serving_demo.py)