动手学深度学习-学习笔记task4
《动手学深度学习》的学习内容链接在github上:
Dive-into-DL-PyTorch. 本次学习过程的coding 是用PyTorch实现。
0. 学习任务
机器翻译及相关技术;注意力机制与Seq2Seq模型;Transformer
1. 机器翻译
机器翻译(machine translation) : 将一段文本从一种语言翻译到另一种语言,输入和输出都是一段单词序列。
主要特征: 输入序列和输出序列长度可能不同
1.1 机器翻译任务的步骤
数据预处理
读取数据,并将数据集清洗、转化为神经网络输入的minbatch
- 读取数据 ,并进行数据清洗
def preprocess_raw(text):
text = text.replace('\u202f', ' ').replace('\xa0', ' ') # 数据清洗
out = ''
for i, char in enumerate(text.lower()):
if char in (',', '!', '.') and i > 0 and text[i-1] != ' ':
out += ' '
out += char
return out
字符在计算机里是以编码的形式存在,我们通常所用的空格是 \x20 ,是在标准ASCII可见字符 0x20~0x7e 范围内。
而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表不间断空白符nbsp(non-breaking space),超出gbk编码范围,是需要去除的特殊字符。再数据预处理的过程中,我们首先需要对数据进行清洗。
- 分词: 将字符串转成单词组成的列表
- 建立字典
- 统计词频并去重
- 处理特殊tokens, 比如:padding, begin of sentence, end of sentence, unknown
- 构建一个list列表,建立index to token,用列表的下标表示index
- 将lists转为dict,从而 实现token to index,实现 每个词映射到一个唯一的索引编号。
- 制作数据生成器
1.2 Seq2Seq 模型
Seq2Seq模型是输出的长度不确定时采用的模型,常应用于机器翻译,其输入是一段序列文本,输出也是序列文本,值得注意的是:输入序列和输出序列长度可能不同。 Seq2Seq模型 通过Encoder-Decoder框架 实现。
Encoder-Decoder
文本处理领域的Encoder-Decoder框架可以这么直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对<Source,Target>,我们的目标是给定输入句子Source,期待通过Encoder-Decoder框架来生成目标句子Target。Source和Target可以是同一种语言,也可以是两种不同的语言。而Source和Target分别由各自的单词序列构成:
S o u r c e = [ x 1 , x 2 , . . . , x m ] T a r g e t = [ y 1 , y 2 , . . . , y n ] Source=[x_1,x_2,...,x_m] \\ Target=[y_1,y_2,...,y_n] Source=[x1,x2,...,xm]Target=[y1