File size: 9,487 Bytes
9c3e26d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
---
tasks:
- translation

widgets:
- task: translation
  inputs:
    - type: text
      name: input
      title: 输入文字
      validator:
        max_words: 128
  examples:
      - name: 1
        title: 示例1
        inputs:
          - name: text
            data: 阿里巴巴集团的使命是让天下没有难做的生意
      - name: 2
        title: 示例2
        inputs:
          - name: text
            data: 今天天气真不错!

model-type:
- csanmt

domain:
- nlp

frameworks:
- tensorflow

backbone:
- transformer

metrics:
- bleu

license: Apache License 2.0

finetune-support: True

language: 
- zh-en

finetune-support: True

tags:
- CSANMT
- Neural Machine Translation
- Continuous Semantic Augmentation
- ACL2022

datasets:
  train:
  - damo/WMT-Chinese-to-English-Machine-Translation-Training-Corpus
  test:
  - damo/WMT-Chinese-to-English-Machine-Translation-newstest
  - damo/IWSLT-Chinese-to-English-Machine-Translation-Spoken
  - damo/WMT-Chinese-to-English-Machine-Translation-Medical
---
# 基于连续语义增强的神经机器翻译模型介绍
本模型基于邻域最小风险优化策略,backbone选用先进的transformer-large模型,编码器和解码器深度分别为24和6,相关论文已发表于ACL 2022,并获得Outstanding Paper Award。

## 模型描述
基于连续语义增强的神经机器翻译模型【[论文链接](https://arxiv.org/abs/2204.06812)】由编码器、解码器以及语义编码器三者构成。其中,语义编码器以大规模多语言预训练模型为基底,结合自适应对比学习,构建跨语言连续语义表征空间。此外,设计混合高斯循环采样策略,融合拒绝采样机制和马尔可夫链,提升采样效率的同时兼顾自然语言句子在离散空间中固有的分布特性。最后,结合邻域风险最小化策略优化翻译模型,能够有效提升数据的利用效率,显著改善模型的泛化能力和鲁棒性。模型结构如下图所示。

<center> <img src="./resources/csanmt-model.png" alt="csanmt_translation_model" width="400"/> <br> <div style="color:orange; border-bottom: 1px solid #d9d9d9; display: inline-block; color: #999; padding: 2px;">CSANMT连续语义增强机器翻译</div> </center>

具体来说,我们将双语句子对两个点作为球心,两点之间的欧氏距离作为半径,构造邻接语义区域(即邻域),邻域内的任意一点均与双语句子对语义等价。为了达到这一点,我们引入切线式对比学习,通过线性插值方法构造困难负样例,其中负样本的游走范围介于随机负样本和切点之间。然后,基于混合高斯循环采样策略,从邻接语义分布中采样增强样本,通过对差值向量进行方向变换和尺度缩放,可以将采样目标退化为选择一系列的尺度向量。

<div> <center> <img src="./resources/ctl.png" alt="tangential_ctl" width="300"/> <br> <div style="color:orange; border-bottom: 1px solid #d9d9d9; display: inline-block; color: #999; padding: 2px;">切线式对比学习</div> </center> </div> <div> <center> <img src="./resources/sampling.png" alt="sampling" width="300"/> <br> <div style="color:orange; border-bottom: 1px solid #d9d9d9; display: inline-block; color: #999; padding: 2px;">混合高斯循环采样</div> </center> </div>

## 期望模型使用方式以及适用范围
本模型适用于具有一定数据规模(百万级以上)的所有翻译语向,同时能够与离散式数据增强方法(如back-translation)结合使用。

### 如何使用
在ModelScope框架上,提供输入源文,即可通过简单的Pipeline调用来使用。

### 代码范例
```python
# Chinese-to-English

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

input_sequence = '声明补充说,沃伦的同事都深感震惊,并且希望他能够投案自首。'

pipeline_ins = pipeline(task=Tasks.translation, model="damo/nlp_csanmt_translation_zh2en")
outputs = pipeline_ins(input=input_sequence)

print(outputs['translation']) # 'The statement added that Warren's colleagues were deeply shocked and expected him to turn himself in.'
```

## 模型局限性以及可能的偏差
1. 模型在通用数据集上训练,部分垂直领域有可能产生一些偏差,请用户自行评测后决定如何使用。
2. 当前版本在tensorflow 2.3和1.14环境测试通过,其他环境下可用性待测试。
3. 当前版本fine-tune在cpu和单机单gpu环境测试通过,单机多gpu等其他环境待测试。

## 训练数据介绍
1. [WMT21](https://arxiv.org/abs/2204.06812)数据集,系WMT官方提供的新闻领域双语数据集。
2. [Opensubtitles2018](https://www.opensubtitles.org),偏口语化(字幕)的双语数据集。
3. [OPUS](https://www.opensubtitles.org),众包数据集。

## 模型训练流程

### 数据准备

使用中英双语语料作为训练数据,准备两个文件:train.zh和train.en,其中每一行一一对应,例如:

```
#train.zh
这只是一个例子。
今天天气怎么样?
...
```

```
# train.en
This is just an example.
What's the weather like today?
...
```

### 预处理
训练数据预处理流程如下:

1. Tokenization

英文通过[mosesdecoder](https://github.com/moses-smt/mosesdecoder)进行Tokenization
```
perl tokenizer.perl -l en < train.en > train.en.tok
```

中文通过[jieba](https://github.com/fxsjy/jieba)进行中文分词
```
import jieba

fR = open('train.zh', 'r', encoding='UTF-8')
fW = open('train.zh.tok', 'w', encoding='UTF-8')

for sent in fR: 
    sent = fR.read()
    sent_list = jieba.cut(sent)
    fW.write(' '.join(sent_list))

fR.close()
fW.close()
```

2. [Byte-Pair-Encoding](https://github.com/rsennrich/subword-nmt)

```
subword-nmt apply-bpe -c bpe.en < train.en.tok > train.en.tok.bpe

subword-nmt apply-bpe -c bpe.zh < train.zh.tok > train.zh.tok.bpe
```

### 参数配置

修改Configuration.json相关训练配置,根据用户定制数据进行微调。参数介绍如下:

```
"train": {
        "num_gpus": 0,                                           # 指定GPU数量,0表示CPU运行
        "warmup_steps": 4000,                                    # 冷启动所需要的迭代步数,默认为4000
        "update_cycle": 1,                                       # 累积update_cycle个step的梯度进行一次参数更新,默认为1
        "keep_checkpoint_max": 1,                                # 训练过程中保留的checkpoint数量
        "confidence": 0.9,                                       # label smoothing权重
        "optimizer": "adam",
        "adam_beta1": 0.9,
        "adam_beta2": 0.98,
        "adam_epsilon": 1e-9,
        "gradient_clip_norm": 0.0,
        "learning_rate_decay": "linear_warmup_rsqrt_decay",      # 学习衰减策略,可选模式包括[none, linear_warmup_rsqrt_decay, piecewise_constant]
        "initializer": "uniform_unit_scaling",                   # 参数初始化策略,可选模式包括[uniform, normal, normal_unit_scaling, uniform_unit_scaling]
        "initializer_scale": 0.1,
        "learning_rate": 1.0,                                    # 学习率的缩放系数,即根据step值确定学习率以后,再根据模型的大小对学习率进行缩放
        "train_batch_size_words": 1024,                          # 单训练batch所包含的token数量
        "scale_l1": 0.0,
        "scale_l2": 0.0,
        "train_max_len": 100,                                    # 默认情况下,限制训练数据的长度为100,用户可自行调整
        "max_training_steps": 5,                                 # 最大训练步数
        "save_checkpoints_steps": 1000,                          # 间隔多少steps保存一次模型
        "num_of_samples": 4,                                     # 连续语义采样的样本数量
        "eta": 0.6
    },
"dataset": {
        "train_src": "train.zh",                                 # 指定源语言数据文件
        "train_trg": "train.en",                                 # 指定目标语言数据文件
        "src_vocab": {
            "file": "src_vocab.txt"                              # 指定源语言词典
        },
        "trg_vocab": {
            "file": "trg_vocab.txt"                              # 指定目标语言词典
        }
    }
```

### 模型训练
```python
# Chinese-to-English

from modelscope.trainers.nlp import CsanmtTranslationTrainer

trainer = CsanmtTranslationTrainer(model="damo/nlp_csanmt_translation_zh2en")
trainer.train()

```

## 数据评估及结果
|  Backbone |#Params|  WMT18-20 (NLTK_BLEU)| IWSLT 16-17 (NLTK_BLEU) |    Remark   |
|:---------:|:-----:|:--------------------:|:-----------------------:|:-----------:|
|     -     |   -   |         35.8         |          27.8           |    Google   |
| 24-6-1024 | 570M  |         34.9         |          28.4           |  ModelScope |


## 论文引用
如果你觉得这个该模型对有所帮助,请考虑引用下面的相关的论文:
``` bibtex
@inproceedings{wei-etal-2022-learning,
  title = {Learning to Generalize to More: Continuous Semantic Augmentation for Neural Machine Translation},
  author = {Xiangpeng Wei and Heng Yu and Yue Hu and Rongxiang Weng and Weihua Luo and Rong Jin},
  booktitle = {Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics, ACL 2022},
  year = {2022},
}
```