Datawhale AI 夏令营 task1笔记
1、环境配置
按照教程一步一步来就可以了
2、数据预处理
机器翻译任务的预处理是确保模型能够有效学习源语言到目标语言映射的关键步骤。
预处理阶段通常包括多个步骤,旨在清理、标准化和转换数据,使之适合模型训练。以下是机器翻译任务预处理中常见的几个处理步骤:
- 清洗和规范化数据
- 去除无关信息:删除HTML标签、特殊字符、非文本内容等,确保文本的纯净性(本赛题的训练集中出现了非常多的脏数据,如“Joey. (掌声) (掌声) 乔伊”、“Thank you. (马嘶声) 谢谢你们”等这种声音词)
- 统一格式:转换所有文本为小写,确保一致性;标准化日期、数字等格式。
- 分句和分段:将长文本分割成句子或段落,便于处理和训练。
- 分词
- 分词:将句子分解成单词或词素(构成单词的基本组成部分,一个词素可以是一个完整的单词,也可以是单词的一部分,但每一个词素都至少携带一部分语义或语法信息),这是NLP中最基本的步骤之一。我们这里使用了使用jieba 对中文进行分词,使用spaCy对英文进行分词。
- 构建词汇表和词向量
- 词汇表构建:从训练数据中收集所有出现过的词汇,构建词汇表,并为每个词分配一个唯一的索引。
- 词向量:使用预训练的词向量或自己训练词向量,将词汇表中的词映射到高维空间中的向量,以捕捉语义信息(当前大模型领域训练的 embedding 模型就是用来完成此任务的)。
- 序列截断和填充
- 序列截断:限制输入序列的长度,过长的序列可能增加计算成本,同时也可能包含冗余信息。
- 序列填充:将所有序列填充至相同的长度,便于批量处理。通常使用标记填充。
- 添加特殊标记
- 序列开始和结束标记:在序列两端添加(Sequence Start)和(Sequence End)标记,帮助模型识别序列的起始和结束。
- 未知词标记:为不在词汇表中的词添加(Unknown)标记,使模型能够处理未见过的词汇。
- 数据增强
- 随机替换或删除词:在训练数据中随机替换或删除一些词,增强模型的鲁棒性。
- 同义词替换:使用同义词替换原文中的词,增加训练数据的多样性。
- 数据分割
- 划分数据集:将数据划分为训练集、验证集和测试集,分别用于模型训练、参数调整和最终性能评估(该赛题中已划分好,不需要自己进行划分)
3、模型训练
编码器-解码器模型:
给定一个中文句子“我/对/你/感到/满意”,编码器会将这句话编码成一个实数向量(0.2, −1, 6, 5, 0.7, −2),这个向量就是源语言句子的“表示”结果。虽然有些不可思议,但是神经机器翻译模型把这个向量等同于输入序列。向量中的数字并没有实际的意义,然而解码器却能从中提取到源语言句子中所包含的信息。也有研究人员把向量的每一个维度看作是一个“特征”,这样源语言句子就被表示成多个“特征”的联合,而且这些特征可以被自动学习。有了这样的源语言句子的“表示”,解码器可以把这个实数向量作为输入,然后逐词生成目标语言句子“I am satisfied with you”。
编码器:由词嵌入层和中间网络层组成:
- 当输入一串单词序列时,词嵌入层会将每个单词映射到多维实数表示空间,这个过程也被称为词嵌入。
- 之后中间层会对词嵌入向量进行更深层的抽象,得到输入单词序列的中间表示。中间层的实现方式有很多,比如:循环神经网络、卷积神经网络、自注意力机制等都是模型常用的结构。
解码器:结构基本上和编码器是一致的,在基于循环神经网络的翻译模型中,解码器只比编码器多了输出层,用于输出每个目标语言位置的单词生成概率,而在基于自注意力机制的翻译模型中,除了输出层,解码器还比编码器多一个编码解码注意力子层,用于帮助模型更好地利用源语言信息。
RNN:基于循环神经网络的机器翻译模型
左侧为编码器部分,源语言单词按照其在文本序列中的先后顺序被依次送入到循环神经网络(RNN)当中。在每个时间步 t 中,模型依据送入的源语言单词
x
t
x_{t}
xt对应修改并维护其模型内部的隐状态
h
t
h_{t}
ht,这个隐状态编码了输入的源语言序列前 t 个时刻的所有必要信息。按照这种方式当 m 个输入全部被送入到编码器之后,所对应的
h
m
h_{m}
hm可以认为包含了源语言序列的所有信息。
右半部分是 RNN 解码器部分,它接收编码器输出的编码源语言句子信息的向量
h
m
h_{m}
hm作为初始隐状态
s
0
s_{0}
s0。由于 RNN 的循环过程在每个时间步都要求一个输入单词,为了启动解码过程,一般会使用一个保留的特殊符号 “[Start]” 作为翻译开始的标记送入到 RNN 解码器当中并解码出目标语言序列的第一个单词
z
1
z_{1}
z1。接下来,
z
1
z_{1}
z1 会作为下一个时刻的输入被送入到循环神经网络当中,并按照不断迭代产生后续的预测。由于目标语言序列的长度无法被提前预知,因此使用另一个保留符号 “[Stop]” 作为预测结束的标志。当某一个时刻 t 预测出的目标语言单词为
z
t
z_t
zt =“[Stop]” 时,解码过程动态地停止。在上述过程当中,主要涉及到两步运算,第一步是 RNN 接收前一时刻隐状态
s
t
−
1
s_{t-1}
st−1 并依据当前时刻输入
z
t
−
1
z_{t-1}
zt−1(目标语言单词
z
t
−
1
z_{t-1}
zt−1 对应的语义嵌入)对隐状态进行维护并生成
s
t
s_{t}
st的运算过程,第二步是依据当前时刻隐状态生成目标语言单词的过程:
s
t
=
t
a
n
h
(
z
t
−
1
U
+
s
t
−
1
W
)
p
t
=
S
o
f
t
m
a
x
(
s
t
V
)
s_t = tanh(z_{t-1}U+s_{t-1}W) \\ p_t = Softmax(s_tV)
st=tanh(zt−1U+st−1W)pt=Softmax(stV)
其中 U,W,V 是可学习的参数。U,W 负责维护循环状态,而 V 负责将当前时刻状态转换到词表大小的概率分布
P
∈
R
v
o
c
a
b
s
i
z
e
P \in R^{vocab_size}
P∈Rvocabsize,从中可以采样得到目标语言单词
z
t
z_{t}
zt。
RNN潜在的问题:通过循环网络对源语言文本进行编码,并生成目标语言翻译结果的过程十分简单。然而,它仅仅使用一个定长的向量
h
m
h_{m}
hm 编码整个源语言序列。这对于较短的源语言文本没有什么问题,但随着文本序列长度的逐渐加长,单一的一个向量
h
m
h_m
hm 可能不足以承载源语言序列当中的所有信息。
注意力机制:注意力机制的引入使得不再需要把原始文本中的所有必要信息压缩到一个向量当中。
传统的 Seq2Seq 模型在解码阶段仅依赖于编码器产生的最后一个隐藏状态,这在处理长序列时效果不佳。注意力机制允许解码器在生成每个输出词时,关注编码器产生的所有中间状态,从而更好地利用源序列的信息。具体来说,给定源语言序列经过编码器输出的向量序列
h
1
,
h
2
,
h
3
,
.
.
.
,
h
m
h_{1},h_{2},h_{3},...,h_{m}
h1,h2,h3,...,hm,注意力机制旨在依据解码端翻译的需要,自适应地从这个向量序列中查找对应的信息。
4、翻译质量评价
BLEU: 该方法使得机器翻译系统的评价变得自动、快速、便捷,而且评价过程可以重复。正是由于 BLEU 等自动评价方法的提出,机器翻译研究人员可以在更短的时间内得到译文质量的评价结果,加速系统研发的进程。
- 人工评价。当需要对系统进行准确的评估时,往往采用人工评价。比如,对于机器翻译的一些互联网应用,在系统上线前都会采用人工评价对机器翻译系统性能进行测试。当然,这种方法的时间和人力成本是最高的。
- 有参考答案的自动评价。由于机器翻译系统研发过程中需要频繁地对系统性能进行评价,这时可以让人标注一些正确的译文,之后把这些译文作为参考答案与机器翻译系统输出的结果进行比对。这种自动评价的结果获取成本低,可以多次重复,而且可以用于对系统结果的快速反馈,指导系统优化的方向。
- 无参考答案的自动评价。在很多应用场景中,在系统输出译文时,使用者希望提前知道译文的质量,即使这时并没有可比对的参考答案。这样,系统使用者可以根据这个对质量的“估计”结果有选择地使用机器翻译译文。严格意义上说,这并不是一个传统的译文质量评价方法,而是一种对译文置信度和可能性的估计。