README.md 5.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
# transformer_en-de
|模型名称|transformer_en-de|
| :--- | :---: | 
|类别|文本-机器翻译|
|网络|Transformer|
|数据集|WMT14 EN-DE|
|是否支持Fine-tuning|否|
|模型大小|481MB|
|最新更新日期|2021-07-21|
|数据指标|-|
K
KP 已提交
11

12
## 一、模型基本信息
K
KP 已提交
13

14
- ### 模型介绍
K
KP 已提交
15

16
  - 2017 年,Google机器翻译团队在其发表的论文[Attention Is All You Need](https://arxiv.org/abs/1706.03762)中,提出了用于完成机器翻译(Machine Translation)等序列到序列(Seq2Seq)学习任务的一种全新网络结构——Transformer。Tranformer网络完全使用注意力(Attention)机制来实现序列到序列的建模,并且取得了很好的效果。
K
KP 已提交
17

18
  - transformer_en-de包含6层的transformer结构,头数为8,隐藏层参数为512,参数量为64M。该模型在[WMT'14 EN-DE数据集](http://www.statmt.org/wmt14/translation-task.html)进行了预训练,加载后可直接用于预测,提供了英文翻译为德文的能力。
K
KP 已提交
19

20
  - 关于机器翻译的Transformer模型训练方式和详情,可查看[Machine Translation using Transformer](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/machine_translation/transformer)
K
KP 已提交
21

22
## 二、安装
K
KP 已提交
23

24
- ### 1、环境依赖  
K
KP 已提交
25

26 27 28
  - paddlepaddle >= 2.1.0
  
  - paddlehub >= 2.1.0    | [如何安装PaddleHub](../../../../docs/docs_ch/get_start/installation.rst)
K
KP 已提交
29

30
- ### 2、安装
K
KP 已提交
31

32 33 34 35 36 37 38 39 40
  - ```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、预测代码示例
K
KP 已提交
41

42 43
  - ```python
    import paddlehub as hub 
K
KP 已提交
44

45 46 47 48 49 50
    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.',
    ]
K
KP 已提交
51

52 53 54 55 56 57 58 59
    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]}')
    ```
K
KP 已提交
60

61
- ### 2、API
K
KP 已提交
62

63 64 65 66 67 68 69 70 71
  - ```python
    def __init__(max_length: int = 256,
             max_out_len: int = 256,
             beam_size: int = 5):
    ```

    - 初始化module,可配置模型的输入输出文本的最大长度和解码时beam search的宽度。

    - **参数**
K
KP 已提交
72

73 74 75
      - `max_length`(int): 输入文本的最大长度,默认值为256。
      - `max_out_len`(int): 输出文本的最大解码长度,默认值为256。
      - `beam_size`(int): beam search方式解码的beam宽度,默认为5。
K
KP 已提交
76

77 78 79 80 81 82
  - ```python
    def predict(data: List[str],
            batch_size: int = 1,
            n_best: int = 1,
            use_gpu: bool = False):
    ```
K
KP 已提交
83

84
    - 预测API,输入源语言的文本句子,解码后输出翻译后的目标语言的文本候选句子。
K
KP 已提交
85

86
    - **参数**
K
KP 已提交
87

88 89 90 91 92 93
      - `data`(List[str]): 源语言的文本列表,数据类型为List[str]
      - `batch_size`(int): 进行预测的batch_size,默认为1
      - `n_best`(int): 每个输入文本经过模型解码后,输出的得分最高的候选句子的数量,必须小于beam_size,默认为1
      - `use_gpu`(bool): 是否使用gpu执行预测,默认为False
    
    - **返回**
K
KP 已提交
94

95
      - `results`(List[str]): 翻译后的目标语言的候选句子,长度为`len(data)*n_best`
K
KP 已提交
96

97
## 四、服务部署
K
KP 已提交
98

99
- 通过启动PaddleHub Serving,可以加载模型部署在线翻译服务。
K
KP 已提交
100

101
- ### 第一步:启动PaddleHub Serving
K
KP 已提交
102

103
  - 运行启动命令:
K
KP 已提交
104

105 106 107
  - ```shell
    $ hub serving start -m transformer_en-de
    ```
K
KP 已提交
108

109
  - 通过以上命令可完成一个英德机器翻译API的部署,默认端口号为8866。
K
KP 已提交
110

111
  - **NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。
K
KP 已提交
112

113
- ## 第二步:发送预测请求
K
KP 已提交
114

115
  - 配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果
K
KP 已提交
116

117 118 119
  - ```python
    import requests
    import json
K
KP 已提交
120

121 122 123 124 125 126 127 128 129 130
    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"}
K
KP 已提交
131

132 133 134
    r = requests.post(url=url, headers=headers, data=json.dumps(data))
    print(r.json())
    ```
K
KP 已提交
135

136
  - 关于PaddleHub Serving更多信息参考:[服务部署](../../../../docs/docs_ch/tutorial/serving.md)
K
KP 已提交
137

138
## 五、更新历史
K
KP 已提交
139 140 141 142

* 1.0.0

  初始发布
143 144 145 146

* 1.0.1

  修复模型初始化的兼容性问题
147 148 149
  - ```shell
    $ hub install transformer_en-de==1.0.1
    ```