未验证 提交 15b1a0f2 编写于 作者: L linjieccc 提交者: GitHub

Fix dependencies for machine translation (#1685)

上级 f6c7a94a
```shell
$ hub install transformer_en-de==1.0.0
```
# transformer_en-de
|模型名称|transformer_en-de|
| :--- | :---: |
|类别|文本-机器翻译|
|网络|Transformer|
|数据集|WMT14 EN-DE|
|是否支持Fine-tuning|否|
|模型大小|481MB|
|最新更新日期|2021-07-21|
|数据指标|-|
## 概述
## 一、模型基本信息
2017 年,Google机器翻译团队在其发表的论文[Attention Is All You Need](https://arxiv.org/abs/1706.03762)中,提出了用于完成机器翻译(Machine Translation)等序列到序列(Seq2Seq)学习任务的一种全新网络结构——Transformer。Tranformer网络完全使用注意力(Attention)机制来实现序列到序列的建模,并且取得了很好的效果。
- ### 模型介绍
transformer_en-de包含6层的transformer结构,头数为8,隐藏层参数为512,参数量为64M。该模型在[WMT'14 EN-DE数据集](http://www.statmt.org/wmt14/translation-task.html)进行了预训练,加载后可直接用于预测,提供了英文翻译为德文的能力
- 2017 年,Google机器翻译团队在其发表的论文[Attention Is All You Need](https://arxiv.org/abs/1706.03762)中,提出了用于完成机器翻译(Machine Translation)等序列到序列(Seq2Seq)学习任务的一种全新网络结构——Transformer。Tranformer网络完全使用注意力(Attention)机制来实现序列到序列的建模,并且取得了很好的效果
关于机器翻译的Transformer模型训练方式和详情,可查看[Machine Translation using Transformer](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer)
- transformer_en-de包含6层的transformer结构,头数为8,隐藏层参数为512,参数量为64M。该模型在[WMT'14 EN-DE数据集](http://www.statmt.org/wmt14/translation-task.html)进行了预训练,加载后可直接用于预测,提供了英文翻译为德文的能力
## API
- 关于机器翻译的Transformer模型训练方式和详情,可查看[Machine Translation using Transformer](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer)
## 二、安装
```python
def __init__(max_length: int = 256,
max_out_len: int = 256,
beam_size: int = 5):
```
初始化module,可配置模型的输入输出文本的最大长度和解码时beam search的宽度。
**参数**
- `max_length`(int): 输入文本的最大长度,默认值为256。
- `max_out_len`(int): 输出文本的最大解码长度,默认值为256。
- `beam_size`(int): beam search方式解码的beam宽度,默认为5。
- ### 1、环境依赖
- paddlepaddle >= 2.1.0
```python
def predict(data: List[str],
batch_size: int = 1,
n_best: int = 1,
use_gpu: bool = False):
```
预测API,输入源语言的文本句子,解码后输出翻译后的目标语言的文本候选句子。
- paddlehub >= 2.1.0 | [如何安装PaddleHub](../../../../docs/docs_ch/get_start/installation.rst)
**参数**
- `data`(List[str]): 源语言的文本列表,数据类型为List[str]
- `batch_size`(int): 进行预测的batch_size,默认为1
- `n_best`(int): 每个输入文本经过模型解码后,输出的得分最高的候选句子的数量,必须小于beam_size,默认为1
- `use_gpu`(bool): 是否使用gpu执行预测,默认为False
- ### 2、安装
**返回**
* `results`(List[str]): 翻译后的目标语言的候选句子,长度为`len(data)*n_best`
- ```shell
$ hub install transformer_en-de
```
- 如您安装时遇到问题,可参考:[零基础windows安装](../../../../docs/docs_ch/get_start/windows_quickstart.md)
| [零基础Linux安装](../../../../docs/docs_ch/get_start/linux_quickstart.md) | [零基础MacOS安装](../../../../docs/docs_ch/get_start/mac_quickstart.md)
## 三、模型API预测
**代码示例**
- ### 1、预测代码示例
```python
import paddlehub as hub
- ```python
import paddlehub as hub
model = hub.Module(name='transformer_en-de', beam_size=5)
src_texts = [
model = hub.Module(name='transformer_en-de', beam_size=5)
src_texts = [
'What are you doing now?',
'The change was for the better; I eat well, I exercise, I take my drugs.',
'Such experiments are not conducted for ethical reasons.',
]
]
n_best = 3 # 每个输入样本的输出候选句子数量
trg_texts = model.predict(src_texts, n_best=n_best)
for idx, st in enumerate(src_texts):
n_best = 3 # 每个输入样本的输出候选句子数量
trg_texts = model.predict(src_texts, n_best=n_best)
for idx, st in enumerate(src_texts):
print('-'*30)
print(f'src: {st}')
for i in range(n_best):
print(f'trg[{i+1}]: {trg_texts[idx*n_best+i]}')
```
```
## 服务部署
- ### 2、API
通过启动PaddleHub Serving,可以加载模型部署在线翻译服务。
- ```python
def __init__(max_length: int = 256,
max_out_len: int = 256,
beam_size: int = 5):
```
### Step1: 启动PaddleHub Serving
- 初始化module,可配置模型的输入输出文本的最大长度和解码时beam search的宽度。
运行启动命令:
- **参数**
```shell
$ hub serving start -m transformer_en-de
```
- `max_length`(int): 输入文本的最大长度,默认值为256。
- `max_out_len`(int): 输出文本的最大解码长度,默认值为256。
- `beam_size`(int): beam search方式解码的beam宽度,默认为5。
通过以上命令可完成一个英德机器翻译API的部署,默认端口号为8866。
- ```python
def predict(data: List[str],
batch_size: int = 1,
n_best: int = 1,
use_gpu: bool = False):
```
**NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置
- 预测API,输入源语言的文本句子,解码后输出翻译后的目标语言的文本候选句子
### Step2: 发送预测请求
- **参数**
配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果
- `data`(List[str]): 源语言的文本列表,数据类型为List[str]
- `batch_size`(int): 进行预测的batch_size,默认为1
- `n_best`(int): 每个输入文本经过模型解码后,输出的得分最高的候选句子的数量,必须小于beam_size,默认为1
- `use_gpu`(bool): 是否使用gpu执行预测,默认为False
```python
import requests
import json
- **返回**
texts = [
'What are you doing now?',
'The change was for the better; I eat well, I exercise, I take my drugs.',
'Such experiments are not conducted for ethical reasons.',
]
data = {"data": texts}
# 发送post请求,content-type类型应指定json方式,url中的ip地址需改为对应机器的ip
url = "http://127.0.0.1:8866/predict/transformer_en-de"
# 指定post请求的headers为application/json方式
headers = {"Content-Type": "application/json"}
- `results`(List[str]): 翻译后的目标语言的候选句子,长度为`len(data)*n_best`
## 四、服务部署
- 通过启动PaddleHub Serving,可以加载模型部署在线翻译服务。
- ### 第一步:启动PaddleHub Serving
- 运行启动命令:
r = requests.post(url=url, headers=headers, data=json.dumps(data))
print(r.json())
```
- ```shell
$ hub serving start -m transformer_en-de
```
## 查看代码
- 通过以上命令可完成一个英德机器翻译API的部署,默认端口号为8866。
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer
- **NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。
## 依赖
- ## 第二步:发送预测请求
- 配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果
- ```python
import requests
import json
texts = [
'What are you doing now?',
'The change was for the better; I eat well, I exercise, I take my drugs.',
'Such experiments are not conducted for ethical reasons.',
]
data = {"data": texts}
# 发送post请求,content-type类型应指定json方式,url中的ip地址需改为对应机器的ip
url = "http://127.0.0.1:8866/predict/transformer_en-de"
# 指定post请求的headers为application/json方式
headers = {"Content-Type": "application/json"}
paddlepaddle >= 2.0.0
r = requests.post(url=url, headers=headers, data=json.dumps(data))
print(r.json())
```
paddlehub >= 2.1.0
- 关于PaddleHub Serving更多信息参考:[服务部署](../../../../docs/docs_ch/tutorial/serving.md)
## 更新历史
## 五、更新历史
* 1.0.0
......@@ -123,3 +144,6 @@ paddlehub >= 2.1.0
* 1.0.1
修复模型初始化的兼容性问题
- ```shell
$ hub install transformer_en-de==1.0.1
```
......@@ -13,7 +13,6 @@
# limitations under the License.
import os
from packaging.version import Version
from typing import List
import paddle
......@@ -56,14 +55,11 @@ class MTTransformer(nn.Layer):
# Vocabularies in source and target should be same for weight sharing.
"weight_sharing": True,
# Dropout rate
'dropout': 0
}
'dropout': 0,
# Number of sub-layers to be stacked in the encoder and decoder.
if Version(paddlenlp.__version__) <= Version('2.0.5'):
model_config.update({"n_layer": 6})
else:
model_config.update({"num_encoder_layers": 6, "num_decoder_layers": 6})
"num_encoder_layers": 6,
"num_decoder_layers": 6
}
# Vocab config
vocab_config = {
......
```shell
$ hub install transformer_zh-en==1.0.0
```
# transformer_zh-en
|模型名称|transformer_zh-en|
| :--- | :---: |
|类别|文本-机器翻译|
|网络|Transformer|
|数据集|CWMT2021|
|是否支持Fine-tuning|否|
|模型大小|614MB|
|最新更新日期|2021-07-21|
|数据指标|-|
## 概述
## 一、模型基本信息
2017 年,Google机器翻译团队在其发表的论文[Attention Is All You Need](https://arxiv.org/abs/1706.03762)中,提出了用于完成机器翻译(Machine Translation)等序列到序列(Seq2Seq)学习任务的一种全新网络结构——Transformer。Tranformer网络完全使用注意力(Attention)机制来实现序列到序列的建模,并且取得了很好的效果。
- ### 模型介绍
transformer_zh-en包含6层的transformer结构,头数为8,隐藏层参数为512,参数量为64M。该模型在[CWMT2021的数据集](http://nlp.nju.edu.cn/cwmt-wmt)进行了预训练,加载后可直接用于预测, 提供了中文翻译为英文的能力
- 2017 年,Google机器翻译团队在其发表的论文[Attention Is All You Need](https://arxiv.org/abs/1706.03762)中,提出了用于完成机器翻译(Machine Translation)等序列到序列(Seq2Seq)学习任务的一种全新网络结构——Transformer。Tranformer网络完全使用注意力(Attention)机制来实现序列到序列的建模,并且取得了很好的效果
关于机器翻译的Transformer模型训练方式和详情,可查看[Machine Translation using Transformer](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer)
- transformer_zh-en包含6层的transformer结构,头数为8,隐藏层参数为512,参数量为64M。该模型在[CWMT2021的数据集](http://nlp.nju.edu.cn/cwmt-wmt)进行了预训练,加载后可直接用于预测, 提供了中文翻译为英文的能力
## API
- 关于机器翻译的Transformer模型训练方式和详情,可查看[Machine Translation using Transformer](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer)
## 二、安装
```python
def __init__(max_length: int = 256,
max_out_len: int = 256,
beam_size: int = 5):
```
初始化module,可配置模型的输入输出文本的最大长度和解码时beam search的宽度。
- ### 1、环境依赖
**参数**
- `max_length`(int): 输入文本的最大长度,默认值为256。
- `max_out_len`(int): 输出文本的最大解码长度,默认值为256。
- `beam_size`(int): beam search方式解码的beam宽度,默认为5。
- paddlepaddle >= 2.1.0
- paddlehub >= 2.1.0 | [如何安装PaddleHub](../../../../docs/docs_ch/get_start/installation.rst)
```python
def predict(data: List[str],
batch_size: int = 1,
n_best: int = 1,
use_gpu: bool = False):
```
预测API,输入源语言的文本句子,解码后输出翻译后的目标语言的文本候选句子。
- ### 2、安装
**参数**
- `data`(List[str]): 源语言的文本列表,数据类型为List[str]
- `batch_size`(int): 进行预测的batch_size,默认为1
- `n_best`(int): 每个输入文本经过模型解码后,输出的得分最高的候选句子的数量,必须小于beam_size,默认为1
- `use_gpu`(bool): 是否使用gpu执行预测,默认为False
- ```shell
$ hub install transformer_zh-en
```
**返回**
* `results`(List[str]): 翻译后的目标语言的候选句子,长度为`len(data)*n_best`
- 如您安装时遇到问题,可参考:[零基础windows安装](../../../../docs/docs_ch/get_start/windows_quickstart.md)
| [零基础Linux安装](../../../../docs/docs_ch/get_start/linux_quickstart.md) | [零基础MacOS安装](../../../../docs/docs_ch/get_start/mac_quickstart.md)
## 三、模型API预测
**代码示例**
- ### 1、预测代码示例
```python
import paddlehub as hub
- ```python
import paddlehub as hub
model = hub.Module(name='transformer_zh-en', beam_size=5)
src_texts = [
model = hub.Module(name='transformer_zh-en', beam_size=5)
src_texts = [
'今天天气怎么样?',
'我们一起去吃饭吧。',
]
]
n_best = 3 # 每个输入样本的输出候选句子数量
trg_texts = model.predict(src_texts, n_best=n_best)
for idx, st in enumerate(src_texts):
n_best = 3 # 每个输入样本的输出候选句子数量
trg_texts = model.predict(src_texts, n_best=n_best)
for idx, st in enumerate(src_texts):
print('-'*30)
print(f'src: {st}')
for i in range(n_best):
print(f'trg[{i+1}]: {trg_texts[idx*n_best+i]}')
```
```
## 服务部署
- ### 2、API
通过启动PaddleHub Serving,可以加载模型部署在线翻译服务。
- ```python
def __init__(max_length: int = 256,
max_out_len: int = 256,
beam_size: int = 5):
```
### Step1: 启动PaddleHub Serving
- 初始化module,可配置模型的输入输出文本的最大长度和解码时beam search的宽度。
运行启动命令:
- **参数**
```shell
$ hub serving start -m transformer_zh-en
```
- `max_length`(int): 输入文本的最大长度,默认值为256。
- `max_out_len`(int): 输出文本的最大解码长度,默认值为256。
- `beam_size`(int): beam search方式解码的beam宽度,默认为5。
通过以上命令可完成一个中英机器翻译API的部署,默认端口号为8866。
- ```python
def predict(data: List[str],
batch_size: int = 1,
n_best: int = 1,
use_gpu: bool = False):
```
**NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置
- 预测API,输入源语言的文本句子,解码后输出翻译后的目标语言的文本候选句子
### Step2: 发送预测请求
- **参数**
- `data`(List[str]): 源语言的文本列表,数据类型为List[str]
- `batch_size`(int): 进行预测的batch_size,默认为1
- `n_best`(int): 每个输入文本经过模型解码后,输出的得分最高的候选句子的数量,必须小于beam_size,默认为1
- `use_gpu`(bool): 是否使用gpu执行预测,默认为False
配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果
- **返回**
- `results`(List[str]): 翻译后的目标语言的候选句子,长度为`len(data)*n_best`
```python
import requests
import json
## 四、服务部署
texts = [
'今天天气怎么样啊?',
'我们一起去吃饭吧。',
]
data = {"data": texts}
# 发送post请求,content-type类型应指定json方式,url中的ip地址需改为对应机器的ip
url = "http://127.0.0.1:8866/predict/transformer_zh-en"
# 指定post请求的headers为application/json方式
headers = {"Content-Type": "application/json"}
- 通过启动PaddleHub Serving,可以加载模型部署在线翻译服务。
- ### 第一步: 启动PaddleHub Serving
- 运行启动命令:
- ```shell
$ hub serving start -m transformer_zh-en
```
r = requests.post(url=url, headers=headers, data=json.dumps(data))
print(r.json())
```
- 通过以上命令可完成一个中英机器翻译API的部署,默认端口号为8866。
## 查看代码
- **NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer
- ### 第二步: 发送预测请求
## 依赖
- 配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果
- ```python
import requests
import json
texts = [
'今天天气怎么样啊?',
'我们一起去吃饭吧。',
]
data = {"data": texts}
# 发送post请求,content-type类型应指定json方式,url中的ip地址需改为对应机器的ip
url = "http://127.0.0.1:8866/predict/transformer_zh-en"
# 指定post请求的headers为application/json方式
headers = {"Content-Type": "application/json"}
paddlepaddle >= 2.0.0
r = requests.post(url=url, headers=headers, data=json.dumps(data))
print(r.json())
```
paddlehub >= 2.1.0
- 关于PaddleHub Serving更多信息参考:[服务部署](../../../../docs/docs_ch/tutorial/serving.md)
## 更新历史
## 五、更新历史
* 1.0.0
......@@ -121,3 +141,6 @@ paddlehub >= 2.1.0
* 1.0.1
修复模型初始化的兼容性问题
- ```shell
$ hub install transformer_zh-en==1.0.1
```
......@@ -13,7 +13,6 @@
# limitations under the License.
import os
from packaging.version import Version
from typing import List
import paddle
......@@ -56,14 +55,11 @@ class MTTransformer(nn.Layer):
# Vocabularies in source and target should be same for weight sharing.
"weight_sharing": False,
# Dropout rate
'dropout': 0
}
'dropout': 0,
# Number of sub-layers to be stacked in the encoder and decoder.
if Version(paddlenlp.__version__) <= Version('2.0.5'):
model_config.update({"n_layer": 6})
else:
model_config.update({"num_encoder_layers": 6, "num_decoder_layers": 6})
"num_encoder_layers": 6,
"num_decoder_layers": 6
}
# Vocab config
vocab_config = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册