60 机器翻译数据集【动手学深度学习v2】

机器翻译与数据集
- 语言模型是自然语言处理的关键,而机器翻译是语言模型最成功的基准测试
- 机器翻译(machine translation)指的是将序列从一种语言自动翻译成另一种语言,它是是将输入序列转换成输出序列的序列转换模型(sequence transduction)的核心问题
- 几十年来,在使用神经网络进行端到端学习的兴起之前,统计学方法在这一领域一直占据着主导地位。因为统计机器翻译(statisticalmachine translation)涉及了翻译模型和语言模型等组成部分的统计分析, 因此基于神经网络的方法通常被称为神经机器翻译(neuralmachine translation), 用于将两种翻译模型区分开来
- 与语料库是单一语言的语言模型问题不同,机器翻译的数据集是由源语言和目标语言的文本序列对组成的
如何将预处理后的数据加载到小批量中用于训练
1、下载数据集
下载由Tatoeba项目的双语句子对组成的“英-法”数据集
- 数据集中的每一行都是制表符分隔的文本序列对
- 序列对由英文文本序列和翻译后的法语文本序列组成(每个文本序列可以是一个句子,也可以是包含多个句子的一个段落)
- 在将英语翻译成发育的机器翻译问题中,英语是源语言(source language), 法语是目标语言(target language)
2、数据集预处理
- 使用空格代替不间断空格(non-breaking space)
- 使用小写字母替换大写字母,并在单词和标点之间插入空格(方便下一步进行词元化,因为机器翻译中倾向于单词级词元化,所以在单词和标点符号之间插入空格,也就意味着标点也会被当作词元(在之前的课程中对于数据集的预处理是将标点符号直接去掉的,这里需要将标点符号留下来))
3、词元化
对文本序列进行词元(机器翻译中倾向于单词级词元化)
- 每个词元要么是一个词,要么是一个标点符号
4、词表
因为机器翻译数据集由语言对组成,所以可以分别为源语言和目标语言构建两个词表(在使用代码具体实现的时候,词元化和构建词表其实是在一个函数中完成的)
- 使用单词级词元化时,词表的大小将明显大于使用字符级词元化时的词表大小(为了解决这个问题,可以将出现次数少于某一个特定值的低频词元是为相同的未知词元(“<unk>”))
- 指定额外的特定词元。填充词元:“<pad>”;序列的开始词元:“<bos>”(begin of sentence);序列的结束词元:“<eos>”(end of sentence)
5、加载数据集
为了提高计算效率,可以通过截断(truncation)和填充(padding)方式实现一次只处理一个小批量的文本序列
- 因为句子的长度是不同的,因此不饿能直接将其切成固定长度,否则可能会将两个句子放在一起
- 语言模型中的序列样本都有一个固定的长度(这个固定长度由时间步数或者词元数量指定),无论这个样本是一个句子的一部分还是跨越了多个句子的一个片段
- 在机器翻译中,每个样本都是由源和目标组成的文本序列对,其中每个文本序列可能具有不同的长度
假设同一个小批量中的每个序列都应该具有相同的长度(便于以相同形状的小批量进行加载),通过截断和填充的方式就能够将文本序列转换成小批量数据集进行训练了
- 如果文本序列的词元数目少于这个固定长度时,继续在其末尾添加特定的填充词元“<pad>”,直到达到固定长度
- 在截断文本序列的时候,只需要按照固定长度截取指定数量位置靠前的词元,然后将剩余的词元丢弃就可以了
- 对于每一个固定长度的序列,在其末尾添加特定的序列结束词元“<eos>”,用于表示序列的结束
总结
- 机器翻译指的是将文本序列从一种语言自动翻译成另外一种语言
- 使用单词级词元化时的词表大小,将明显大于使用字符级词元化时的词表大小。为了缓解这一问题,可以通过将低频次元视为相同的未知词元来解决
- 通过截断和填充文本序列,可以保证所有的文本序列都具有相同的长度,便于以小批量的方式进行加载
----end----
其他参考:
1、《动手学深度学习》,教程,https://zh-v2.d2l.ai/chapter_recurrent-modern/machine-translation-and-dataset.html