- 无监督机器翻译的三大关键
- 仅仅只是用一个
bpe
的词表,这样的好处就是不用再推断用哪个语言然后用什么词表了,当然如果是同字母表的语言就更好不过了。 -
back-translation
的时候不反向传播更新v
和u
,一是为了简单二是作者说没有什么用。
-
所有的语言是共享一个
encoder
和decoder
的参数的,作者说encoder
共享参数是非常关键的,因此相当于将所有的语言都编码到一个语义的隐空间而decoder
的共享参数只是相当于一个正则化,其实不共享空间也是可以的感觉,不共享参数,然后各自训练一个对应语言的language model
感觉应该会更加的合理。
- 进行
back translation
的轮次也是越多越好。
- 数据集的来源
-
bpe
的数量 - 可以使用
fastText
来产生embedding
,感觉是一个trick
- 对于
phrase-based
数据的处理方法
- 训练可以看到使用的是更小的
transformer
但是好像达到的效果是更好的,beta1
是0.5
很有趣,竟然调了这个超参数,然后是greedily search
的方法进行生成,但是很好奇为啥不用beam search
,可能是因为太慢了??gread search
大概比beam search
要低2
个bleu
,所以说还是可以接受的,但是慢了好多,这个是不可以接受的,其实可以先用gready search
寻找超参,然后使用beam search
跑出最后的结果,应该是会有提高的。 - 每次也不是训练完整的数据集合,而是采样出
5million
个句子进行训练。 - 不同的调超参的方法。
-
bpe
还是很有用的。
Unsupervised Machine Translation using Monolingual Corpora Only
-
EMNLP bestpaper
之前的作品。 -
所有的语言共享一个
encoder
和decoder
,生成的时候用的是gready decodiing
,每一个encoder
和decoder
都是三层,都是一个encoder
和decoder
但是能翻译回来是因为各个语言的decoder
维护了一个不同的开始符号,如果输入的开始符号是<s>
那么就生成英语,如果是<ss>
那么就生成法语。
- 损失函数
cross domain training
就是cycle-translation
-
Denoising Auto-encoding
,从有噪声的数据中回复原始的数据。 - 对抗损失,让
encoder
生成出来的和语言无关,感觉这一项有点鸡肋,不知是否真的有用,在另外的一篇论文中验证了确实是有用的。 -
提出了在无监督的情况下如何衡量翻译好坏的标准。但是感觉没有过拟合的倾向,所以使劲训就行了。
- 原来一直搞错的,原来是用于第一篇是用于双语对齐的,词向量是根据
fastText
的方法学到的。
- 但是
fastText
貌似只使用于大的语料集,因此可以用wikipedia
- 判别器用
leaky-Relu
,以及label smoothing
,优化器用RMSProp
,学习率0.0005
,encoder-decoder
和discriminator
迭代更新。
-
ablation study
可以看到对抗训练确实有用,然后加噪声非常有用,而且如果不pretrain
且不训练一个auto-encoder
那么根本就训练不起来,pretrain
指的是unsupervised word alignment
,就是将两个语言的词表顺序一一对应。
- 作者解释对抗训练为什么会
work
是因为可以移除数据中的bias
仅仅保留本质的东西 - 在其他领域使用对抗训练的方法去除
bias
也能获得效果的提升。
两篇文章的对比
- 第一个文章相当于是第二个文章的改进,改进在于第一没有加入判别encoder出来的语言是什么的对抗训练,而是直接先单独训练两个
language model
初始化各自的encoder
和decoder
,也就是说直接把denoise autoencoder
放在了预训练language model
时候而不是一股脑的训练,因为他的目的就是训练一个好的language model
,然后是使用back-translation
进行训练,等于是提供了一个无监督翻译的范式把,这样SMT
也可以用了,所以说这是一个解耦合。
- 关于
language model
的训练方法,还是延承之前的做法,但是最近的方法就光改了用transformer
并改变了预训练的任务直接又爆提了9个点,所以说好的language model
是关键,去噪自编码器只是达到这一目的的手段。
- 现在搞不懂为啥训练
LM
的时候要训练一个多语的LM
,感觉不同语言的LM
差别还是相当大的,比如en-zh
,让NN
专精一件事是好的,感觉学的多了反而学不到重要的信息,尤其是生成这种不太容易过拟合的东西,而且encoder
共享参数没有什么意见,但是decoder
共享参数感觉不可思议,生成翻译的时候decoder
的质量至关重要呀。
- 因为
encoder
的参数共享所以一定要做cross lingual embedding alignment
,但是如果encdoer不共享参数呢?各自训练一个语言模型?以及embedding
来初始化的各自的encoder
和decoder
。 - 还有一个问题是如果在源语言和目标语言不均衡的情况下,比如英语的资料总是多于玛雅文的资料,应该如何改进呢?现在的
UMT
好像仅仅是 - 最开始的那篇
unsupervised neural machine translation
的就是用的是两个decoder
不共享参数,但是实验效果并不是很好,还有共用encoder
的原因是为了将两种语言映射到同一个子空间中。
Unsupervised Neural Machine Translation withWeight Sharing
- motivation很自然,和上面我的想法是一致的就是认为应该用不同的
encoder
,因为不同的语言有不同的语法信息,因此共享一个encoder可能扰乱训练,达不到很好的效果,但是因为要映射到同样的子空间,因此作者提出来的方法是共享encoder
的高层信息,因为encoder的低层我们可以认为是语法信息然后高层就是抽象的语义信息的因此是可以共享的,但是明显感觉作者的idea是不work的然后加了很多的其他组件,通过调参让结果看得比较好看,结果是模型的复杂度很高,然后甚至用了强化学习,导致训练效率应该是令人发指的底。
- 一个比较有意思的点是作者除过对
encoder
的结果进行对抗训练,还对back-translation
生成的结果进行对抗训练,目的就是生成出更加逼真的数据,是用强化学习训练的但是感觉效果应该是不行的,毕竟文本生成搜索空间这么大,用一个监督信息就是生成的是真是假根本就不可能work
。
- 第二阶段使用强化学习微调,三个训练目标是每次训练一个
batch
。
-
实验结果
- 返回来看
emnlp
哪一篇的结果发现+
是将,
- 就是,
PBSMT
训练收敛了然后继续训练NMT
。
- 可以看到共享好像没有什么用。因为
ablation
的话就差一点点。
image.png
网友评论