参考文档
配置环境
基于魔搭平台进行模型训练,并额外安装如下包:
!pip install torchtext
!pip install jieba
!pip inatall sacrebleu
接着安装spacy包,用于后续的分词步骤,不同环境参考https://spacy.io/usage进行安装。
若使用魔搭平台,则在https://github.com/explosion/spacy-models/releases找到en_core_web_trf-3.7.3-py-none-any.whl的下载链接,下载完毕后再上传至魔搭平台即可。
接着在dataset文件夹下打开终端,输入如下命令:
!pip install en_core_web_trf-3.7.3-py3-none-any.whl
环境配置完成
知识点
参考文档:Docs
机器翻译中的几个关键过程
一:数据预处理
- 清洗和规范化数据:去除无关信息,统一格式,分句分段便于后续训练;
- 分词:将句子分解成单词和词素;
- 构建词汇表和词向量:为每个词分配唯一索引,将词汇表中的词映射到高维空间向量;
- 序列截断和填充:将所有序列填充(使用<pad>标记)或截断至相同长度;
- 添加特殊标记:如<SOS><EOS><UNK>;
- 数据增强:随即替换或删除一些词,增加模型的鲁棒性和多样性;
- 数据分割:划分训练集、测试集和验证集进行训练;
二:模型训练
如今的神经机器翻译使用的大多为编码器-解码器模型(或编码器-解码器框架),其基本思想是用编码器对源语言进行编码,将其生成一个实数向量,再由解码器对其进行特征提取,这些“特征”(即向量中的各个分量)可以被学习。有了这样的源语言句子的“表示”,解码器可以把这个实数向量作为输入,然后逐词生成目标语言句子。
主流机器翻译系统中,编码器由词嵌入层和中间网络层组成。
词嵌入层会对输入单词序列进行词嵌入,即将每个单词映射到多维实数空间。
中间层会对词嵌入向量进行抽象,得到输入单词序列的中间表示。常用的结构有循环神经网络、卷积神经网络、自注意力机制等。
解码器的结构基本上和编码器是一致的,在基于循环神经网络的翻译模型中,解码器只比编码器多了输出层,用于输出每个目标语言位置的单词生成概率,而在基于自注意力机制的翻译模型中,除了输出层,解码器还比编码器多一个编码解码注意力子层,用于帮助模型更好地利用源语言信息。
以基于循环神经网络的机器翻译模型为例。其中,左侧为编码器部分,源语言单词按照其在文本序列中的先后顺序被依次送入到循环神经网络(RNN)当中。在每个时间步 t 中,模型依据送入的源语言单词xt对应修改并维护其模型内部的隐状态ht这个隐状态编码了输入的源语言序列前 t 个时刻的所有必要信息。按照这种方式当 m 个输入全部被送入到编码器之后,所对应的hm可以认为包含了源语言序列的所有信息。
右半部分是 RNN 解码器部分,它接收编码器输出的编码源语言句子信息的向量hm作为初始隐状态 s0。由于 RNN 的循环过程在每个时间步都要求一个输入单词,为了启动解码过程,一般会使用一个保留的特殊符号 “[Start]” 作为翻译开始的标记送入到 RNN 解码器当中并解码出目标语言序列的第一个单词 z1。接下来,z1会作为下一个时刻的输入被送入到循环神经网络当中,并按照不断迭代产生后续的预测。由于目标语言序列的长度无法被提前预知,因此使用另一个保留符号 “[Stop]” 作为预测结束的标志。当某一个时刻 t 预测出的目标语言单词为 zt =“[Stop]” 时,解码过程动态地停止。在上述过程当中,主要涉及到两步运算,第一步是 RNN 接收前一时刻隐状态 s_t-1并依据当前时刻输入 z_t-1(目标语言单词 z_t-1 对应的语义嵌入)对隐状态进行维护并生成st的运算过程,第二步是依据当前时刻隐状态生成目标语言单词的过程:
其中 U,W,V 是可学习的参数。U,W 负责维护循环状态,而 V 负责将当前时刻状态转换到词表大小的概率分布
从中可以采样得到目标语言单词 zt。
通过循环网络对源语言文本进行编码,并生成目标语言翻译结果的过程十分简单。然而,它仅仅使用一个定长的向量 hm 编码整个源语言序列。这对于较短的源语言文本没有什么问题,但随着文本序列长度的逐渐加长,单一的一个向量 hm 可能不足以承载源语言序列当中的所有信息。
上图为简单循环神经网络性能随源语言文本长度的变化趋势。可以看到,在序列长度小于20个单词时,是否结合注意力机制时的BLEU值均递增且差距不大,但在序列长度超过20个单词后,不采用注意力机制的循环神经网络性能出现明显的下降,而结合注意力机制的循环神经网络则能将性能维持在一个较好水平。
引入注意力机制的循环神经网络机器翻译架构如下图所示:
传统的 Seq2Seq 模型在解码阶段仅依赖于编码器产生的最后一个隐藏状态,这在处理长序列时效果不佳。注意力机制允许解码器在生成每个输出词时,关注编码器产生的所有中间状态,从而更好地利用源序列的信息。具体来说,给定源语言序列经过编码器输出的向量序列h1,h2,...,hm,注意力机制旨在依据解码端翻译的需要,自适应地从这个向量序列中查找对应的信息
三:翻译质量评价
在如今的机器翻译领域,通常采用BLEU(Bilingual Evaluation Understudy)方法。
BLEU是一种广泛用于评估机器翻译质量的算法。它由Kishore Papineni等人在2002年提出,旨在通过比较机器翻译的文本与一组高质量的人工翻译参考文本来量化翻译的准确性。
BLEU算法的核心思想是通过计算机器翻译输出与参考翻译之间的n-gram(n元语法)匹配来评估翻译的质量。n-gram是连续的n个词的序列,例如,"the cat is on the mat"中的2-gram(或称为bigram)包括"the cat"、"cat is"、"is on"、"on the"和"the mat"。
BLEU算法的步骤如下:
-
计算n-gram精度:对于每个n-gram,计算机器翻译中出现的次数与参考翻译中出现的次数的比值。为了避免过拟合,通常会使用一种称为“修剪”(clipping)的技术,即只计算参考翻译中实际出现的n-gram次数。
-
加权平均:将不同长度的n-gram精度进行加权平均,通常使用1到4-gram的精度,并给予较长的n-gram更高的权重,因为它们能更好地捕捉句子的结构和语义。
-
短句惩罚:由于短句更容易获得高精度,BLEU算法引入了一个短句惩罚因子,以惩罚那些过短的翻译。这个惩罚因子随着翻译长度的减少而增加。
-
组合得分:最终的BLEU得分是上述加权平均精度和短句惩罚因子的乘积,通常表示为一个0到1之间的数值,数值越高表示翻译质量越好。
BLEU算法的优点在于其计算速度快、易于实现,并且与人工评估有较好的相关性。然而,它也有一些局限性,例如它不考虑语义、语法和流畅性,而且对于不同的语言和领域可能需要调整参数以获得更好的评估效果。尽管如此,BLEU仍然是机器翻译领域最常用的自动评估指标之一。