|
1 |
| -## 概述 |
| 1 | +# plato2_en_base |
2 | 2 |
|
3 |
| -PLATO2是一个超大规模生成式对话系统模型。它承袭了PLATO隐变量进行回复多样化生成的特性,能够就开放域话题进行流畅深入的聊天。据公开数据,其效果超越了Google 于2020年2月份发布的 Meena和Facebook AI Research于2020年4月份发布的Blender的效果。plato2_en_base包含310M参数,可用于一键预测对话回复,该Module仅支持使用GPU预测,不支持CPU。 |
4 |
| -<p align="center"> |
5 |
| -<img src="https://image.jiqizhixin.com/uploads/editor/65107b78-0259-4121-b8c5-a090f9d3175b/640.png" hspace='10'/> <br /> |
6 |
| -</p> |
| 3 | +| 模型名称 | plato2_en_base | |
| 4 | +| :------------------ | :--------------------: | |
| 5 | +| 类别 | 文本-文本生成 | |
| 6 | +| 网络 | PLATO2 | |
| 7 | +| 数据集 | 大规模开放域英文数据集 | |
| 8 | +| 是否支持Fine-tuning | 否 | |
| 9 | +| 模型大小 | 3.5 GB | |
| 10 | +| 最新更新日期 | 2022-11-05 | |
| 11 | +| 数据指标 | - | |
7 | 12 |
|
8 |
| -更多详情参考论文[PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning](https://arxiv.org/abs/2006.16779) |
| 13 | +## 一、模型基本信息 |
9 | 14 |
|
10 |
| -## 命令行预测 |
| 15 | +- ### 模型介绍 |
| 16 | + - PLATO2 是一个超大规模生成式对话系统模型。它承袭了 PLATO 隐变量进行回复多样化生成的特性,能够就开放域话题进行流畅深入的聊天。据公开数据,其效果超越了 Google 于 2020 年 2 月份发布的 Meena 和 Facebook AI Research 于2020 年 4 月份发布的 Blender 的效果。plato2_en_base 包含 310M 参数,可用于一键预测对话回复。由于该 Module 参数量较多,推荐使用GPU预测。 |
11 | 17 |
|
12 |
| -```shell |
13 |
| -$ hub run plato2_en_base --input_text="Hello, how are you" |
14 |
| -``` |
15 | 18 |
|
16 |
| -## API |
| 19 | +## 二、安装 |
17 | 20 |
|
18 |
| -```python |
19 |
| -def generate(texts): |
20 |
| -``` |
| 21 | +- ### 1、环境依赖 |
21 | 22 |
|
22 |
| -预测API,输入对话上下文,输出机器回复。 |
| 23 | + - paddlepaddle >= 2.0.0 |
| 24 | + - paddlehub >= 2.1.0 | [如何安装PaddleHub](../../../../docs/docs_ch/get_start/installation.rst) |
23 | 25 |
|
24 |
| -**参数** |
| 26 | +- ### 2、安装 |
25 | 27 |
|
26 |
| -* texts (list\[str\] or str): 如果不在交互模式中,texts应为list,每个元素为一次对话的上下文,上下文应包含人类和机器人的对话内容,不同角色之间的聊天用分隔符"\t"进行分割;例如[["Hello\thi, nice to meet you\tnice to meet you"]]。这个输入中包含1次对话,机器人回复了"hi, nice to meet you"后人类回复“nice to meet you”,现在轮到机器人回复了。如果在交互模式中,texts应为str,模型将自动构建它的上下文。 |
| 28 | + - ```shell |
| 29 | + $ hub install plato2_en_base |
| 30 | + ``` |
| 31 | + - 如您安装时遇到问题,可参考:[零基础windows安装](../../../../docs/docs_ch/get_start/windows_quickstart.md) |
| 32 | + | [零基础Linux安装](../../../../docs/docs_ch/get_start/linux_quickstart.md) | [零基础MacOS安装](../../../../docs/docs_ch/get_start/mac_quickstart.md) |
27 | 33 |
|
28 |
| -**返回** |
| 34 | +## 三、模型API预测 |
29 | 35 |
|
30 |
| -* results (list\[str\]): 每个元素为相应对话中机器人的新回复。 |
| 36 | +- ### 1、命令行预测 |
31 | 37 |
|
32 |
| -**代码示例** |
| 38 | + - ```bash |
| 39 | + $ hub run plato2_en_base --input_text="Hello, how are you" |
| 40 | + ``` |
33 | 41 |
|
34 |
| -```python |
35 |
| -import paddlehub as hub |
| 42 | +- ### 2、预测代码示例 |
36 | 43 |
|
37 |
| -module = hub.Module(name="plato2_en_base") |
| 44 | + - ```python |
| 45 | + import paddlehub as hub |
38 | 46 |
|
39 |
| -test_texts = ["Hello","Hello\thi, nice to meet you\tnice to meet you"] |
40 |
| -results = module.generate(texts=test_texts) |
41 |
| -for result in results: |
42 |
| - print(result) |
43 |
| -``` |
| 47 | + module = hub.Module(name="plato2_en_base") |
44 | 48 |
|
45 |
| -```python |
46 |
| -def interactive_mode(max_turn =6): |
47 |
| -``` |
| 49 | + test_texts = ["Hello","Hello\thi, nice to meet you\tnice to meet you"] |
| 50 | + results = module.generate(texts=test_texts) |
| 51 | + for result in results: |
| 52 | + print(result) |
| 53 | + ``` |
48 | 54 |
|
49 |
| -进入交互模式。交互模式中,generate接口的texts将支持字符串类型。 |
| 55 | +- ### 3、API |
50 | 56 |
|
51 |
| -**参数** |
| 57 | + - ```python |
| 58 | + def generate(texts): |
| 59 | + ``` |
52 | 60 |
|
53 |
| -* max_turn (int): 模型能记忆的对话轮次,当max_turn = 1时,模型只能记住当前对话,无法获知之前的对话内容。 |
| 61 | + - 预测API,输入对话上下文,输出机器回复。 |
| 62 | + - **参数** |
| 63 | + - texts (list\[str\] or str): 如果不在交互模式中,texts应为list,每个元素为一次对话的上下文,上下文应包含人类和机器人的对话内容,不同角色之间的聊天用分隔符"\t"进行分割;例如[["Hello\thi, nice to meet you\tnice to meet you"]]。这个输入中包含1次对话,机器人回复了"hi, nice to meet you"后人类回复“nice to meet you”,现在轮到机器人回复了。如果在交互模式中,texts应为str,模型将自动构建它的上下文。 |
54 | 64 |
|
55 |
| -**代码示例** |
| 65 | + - ```python |
| 66 | + def interactive_mode(max_turn=6): |
| 67 | + ``` |
56 | 68 |
|
57 |
| -```python |
58 |
| -import paddlehub as hub |
| 69 | + - 进入交互模式。交互模式中,generate接口的texts将支持字符串类型。 |
| 70 | + - **参数** |
| 71 | + - max_turn (int): 模型能记忆的对话轮次,当max_turn = 1时,模型只能记住当前对话,无法获知之前的对话内容。 |
59 | 72 |
|
60 |
| -module = hub.Module(name="plato2_en_base") |
61 | 73 |
|
62 |
| -with module.interactive_mode(max_turn=6): |
63 |
| - while True: |
64 |
| - human_utterance = input("[Human]: ").strip() |
65 |
| - robot_utterance = module.generate(human_utterance) |
66 |
| - print("[Bot]: %s"%robot_utterance[0]) |
67 |
| -``` |
| 74 | +## 四、服务部署 |
68 | 75 |
|
69 |
| -## 服务部署 |
| 76 | +- PaddleHub Serving可以部署一个在线对话机器人服务。 |
70 | 77 |
|
71 |
| -PaddleHub Serving 可以部署在线服务。 |
| 78 | +- ### 第一步:启动PaddleHub Serving |
72 | 79 |
|
73 |
| -### 第一步:启动PaddleHub Serving |
| 80 | + - 运行启动命令: |
| 81 | + - ```shell |
| 82 | + $ hub serving start -m plato2_en_base -p 8866 |
| 83 | + ``` |
74 | 84 |
|
75 |
| -运行启动命令: |
76 |
| -```shell |
77 |
| -$ hub serving start -m plato2_en_base -p 8866 |
78 |
| -``` |
| 85 | + - 这样就完成了一个对话机器人服务化API的部署,默认端口号为8866。 |
| 86 | + - **NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。 |
79 | 87 |
|
80 |
| -这样就完成了一个服务化API的部署,默认端口号为8866。 |
81 | 88 |
|
82 |
| -**NOTE:** 在启动服务之前,请设置CUDA\_VISIBLE\_DEVICES环境变量。 |
| 89 | +- ### 第二步:发送预测请求 |
83 | 90 |
|
84 |
| -### 第二步:发送预测请求 |
| 91 | + - 配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果 |
85 | 92 |
|
86 |
| -方式1: 自定义脚本发送对话信息 |
| 93 | + - ```python |
| 94 | + import requests |
| 95 | + import json |
87 | 96 |
|
88 |
| -配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果 |
| 97 | + data = {'texts':["Hello","Hello\thi, nice to meet you\tnice to meet you"]} |
| 98 | + headers = {"Content-type": "application/json"} |
| 99 | + url = "http://127.0.0.1:8866/predict/plato2_en_base" |
| 100 | + r = requests.post(url=url, headers=headers, data=json.dumps(data)) |
89 | 101 |
|
90 |
| -```python |
91 |
| -import requests |
92 |
| -import json |
| 102 | + # 保存结果 |
| 103 | + results = r.json()["results"] |
| 104 | + for result in results: |
| 105 | + print(result) |
| 106 | + ``` |
93 | 107 |
|
94 |
| -# 发送HTTP请求 |
| 108 | + - 关于PaddleHub Serving更多信息参考[服务部署](../../../../docs/docs_ch/tutorial/serving.md) |
95 | 109 |
|
96 |
| -data = {'texts':["Hello","Hello\thi, nice to meet you\tnice to meet you"]} |
97 |
| -headers = {"Content-type": "application/json"} |
98 |
| -url = "http://127.0.0.1:8866/predict/plato2_en_base" |
99 |
| -r = requests.post(url=url, headers=headers, data=json.dumps(data)) |
100 |
| - |
101 |
| -# 保存结果 |
102 |
| -results = r.json()["results"] |
103 |
| -for result in results: |
104 |
| - print(result) |
105 |
| -``` |
106 |
| - |
107 |
| -方式2: 通过交互式客户端进入交互模式 |
108 |
| - |
109 |
| -您可以执行以下客户端脚本进入交互模式: |
110 |
| - |
111 |
| -```python |
112 |
| -import requests |
113 |
| -import json |
114 |
| - |
115 |
| -ADDR = "127.0.0.1" # Your serving address |
116 |
| -PORT = 8866 # Your serving port |
117 |
| -MAX_TURN = 6 # The maximum dialogue turns |
118 |
| - |
119 |
| -headers = {"Content-type": "application/json"} |
120 |
| -url = "http://%s:%s/predict/plato2_en_base" % (ADDR, PORT) |
121 |
| - |
122 |
| -context = [] |
123 |
| -while True: |
124 |
| - user_utt = input("[Human]: ").strip() |
125 |
| - if user_utt == "[NEXT]": |
126 |
| - context = "" |
127 |
| - print("Restart") |
128 |
| - else: |
129 |
| - context.append(user_utt) |
130 |
| - data = {'texts': ["\t".join(context[-MAX_TURN:])]} |
131 |
| - r = requests.post(url=url, headers=headers, data=json.dumps(data)) |
132 |
| - bot_response = r.json()["results"][0] |
133 |
| - print("[Bot]: %s"%bot_response) |
134 |
| - context.append(bot_response) |
135 |
| -``` |
136 |
| - |
137 |
| -## 查看代码 |
138 |
| - |
139 |
| -https://github.com/PaddlePaddle/Knover |
140 |
| - |
141 |
| -### 依赖 |
142 |
| - |
143 |
| -1.8.2 <= paddlepaddle < 2.0.0 |
144 |
| - |
145 |
| -1.7.0 <= paddlehub < 2.0.0 |
146 |
| - |
147 |
| - |
148 |
| -## 更新历史 |
| 110 | +## 五、更新历史 |
149 | 111 |
|
150 | 112 | * 1.0.0
|
151 | 113 |
|
152 | 114 | 初始发布
|
| 115 | + |
| 116 | +* 1.1.0 |
| 117 | +
|
| 118 | + 移除 Fluid API |
| 119 | +
|
| 120 | + - ```shell |
| 121 | + $ hub install plato2_en_base==1.1.0 |
| 122 | + ``` |
0 commit comments