Published on

笔记-Learning_Kernel-Smoothed_Machine_Translation_with_RetrievedExamples

在线更新已部署的模型。learnable kernel和mixing weight

提高1.1,1.5 BLEU

1 Introduction

Nearest Neighbor Machine Translation 使用k-nearest-neighbour在token级别检索提高MT。

句子级检索不容易找到和测试实例足够相似的实例,这会带来噪音。并且完全的非参数容易对检索到的实例过拟合。尽管KNN-MT提高了领域的翻译能力,但是泛化能力不行。

作者提出了一个可学习的kernel动态的计算当前上下文检索实例的相关性。

然后将实例的权重和模型产生的分布自适应混合权重进行下一个单词预测。

为了让KSTER稳定,作者提出了retrieval dropout strategy。(训练的时候可以检索到相似样本,但在测试inference阶段不同。)

2 Related Word

Domain Adaptation for MT

微调,有个灾难性遗忘问题。(也有一些微调技巧的文章,blog中有),除此之外,还有一些稀疏性领域适应方法,比如只更新部分参数。

Online Adaptation of MT by Non-parametricRetrieval

Non-Parametric Adaptation for Neural Machine Translation 基于句子n-gram相似度检索

token level KNN-MT

实例相似性检索都是基于模糊匹配,或embeding 相似度 或二者混合

3 Methodology

3.1 Kernel-Smoothed Machine Translation

Base Model for Neural Machine Translation

Kernel Smoothing with Retrieved Examples

作者对检索的相似样本构建database,由训练数据中所有token level的数据以key-value pairs组成。

k:模型decoder中一层的中间表示

v:对应的ground truth 目标token

k可以看做为v的上下文表示,通过模型decoding来获得k,v

在decoding过程中,我们计算$q_i=f_{NMT}(x,\hat{y}_{<i};\theta)$和k的$L^2$距离$d_j$,每一个检索的样本可以表示一个三元组$({k_j,v_j,d_j})$

使用检索的样本计算出如下概率:

K就是kernem function $\sigma$是kernel的参数。

然后将这两个概率分布加权,$\lambda$的计算在下面3.3

3.2 Learnable Kernel Function

作者使用Gaussian kernel 和Laplacian kernel

使用了一个network来估计bandwidth

bandwidth控制分布的平滑程度

3.3 Adaptive Mixing of Base Prediction andRetrieved Examples

Knn-MT可以被看做拥有固定的高斯核和权重的KSTER。

3.4 Training

cross entropy loss between the mixed distribution and ground truth target tokens

3.5 Retrieval Dropout

检索k+1个相似样本,然后丢掉最相似的。

4 Experiments

4.1 Datasets and Implementation Details

WMT14 En-De De-En 4.5M训练数据 和 newtest2013验证集 newstest2014测试数据

实施细节:

BPE 30k,共享词表

Transformer最后一个docker block,feed forward的输出用来构建databases和query。

# decoder流程
stl_x = None
for layer in self.layers:
  stl_x = x
  x = layer(x=x, memory=encoder_output,
            src_mask=src_mask, trg_mask=trg_mask)
  #
  c = self.layers[-1].context_representations(stl_x,
                                              memory=encoder_output, src_mask=src_mask, trg_mask=trg_mask)


# 调用的函数
def context_representations(self, x: Tensor = None,
            memory: Tensor = None,
            src_mask: Tensor = None,
            trg_mask: Tensor = None) -> Tensor:
    # decoder/target self-attention
    x_norm = self.x_layer_norm(x)
    h1 = self.trg_trg_att(x_norm, x_norm, x_norm, mask=trg_mask)
    h1 = self.dropout(h1) + x

    # source-target attention
    h1_norm = self.dec_layer_norm(h1)
    h2 = self.src_trg_att(memory, memory, h1_norm, mask=src_mask)

    # final position-wise feed-forward layer
    o = self.feed_forward.layer_norm(self.dropout(h2) + h1)

    return o

使用FAISS做最近邻检索。采用倒排和product quantization来加快检索速度。

以fp16存储降低内容使用。

设置参数k=16来平衡翻译质量和推理速度。

base model 训练了 20万步,5 checkpoints avg,KSTER 30k steps。

batch size 32768

learning rate 0.0002

新增52.6万参数

4.2 Domain Adaptation for MachineTranslation

Finetuning在domain数据下,效果最好,但是general性能不好。

鲁棒性测试:

使用EDA造噪音数据。

目标端噪音比源端噪音对翻译性能的负面影响更大。

4.3 Multi-Domain Machine Translation

General-specific domain performance trade-off

当系统预测更多地依赖于搜索的例子(低带宽和高混合权重)时,KNN-MT在特定领域内的翻译性能更好,相反,当系统预测更多地依赖于NMT预测(高带宽和低混合权重)时,可以获得更好的通用域翻译性能。

KSTER采用自适应核和混合权重在一般领域和特定领域都取得了更好的性能。

如下,领域之间有不同的权重和bandwidth。

未见领域的泛化能力,KKSTER要好

4.4 推理速度

1.19 倍 base model

5 分析

5.1 Ablation Studies of Proposed Methods

learnable kernel和mixing weight 都会带来提升。

KSTER outperforms kNN-MT with all k selections

Retrieval dropout improves generalization

5.2 对翻译的细粒度影响

Kernel-smoothing influences verbs, adverbsand nouns most

通过单词是否有模型生成来确定kernel-smoothing的影响

核平滑有助于词义消歧

使用ContraWSD,通过sentence embedding选择300个与领域数据最相似的作测试。

论文复现结果

en-de翻译 Koran领域

inference no combiner: koran test 10.16 (原始值 10.16)

index token_map embeddings.npy 根据 Koran de生成

inference with staic combiner :koran test 18.70 (原始值 18.51)

inference with dynamic :laplactian 18.87 gaussian 18.87 (原始值:19.10)自己训练的best ckpt:18.42