当前位置:   article > 正文

NLP—基于Transformer实现机器翻译_transformer机器翻译

transformer机器翻译

前言

本次基于Transformer的机器翻译任务训练量大,需要借用GPU进行加速训练,没有GPU的可以白嫖免费的服务器进行训练。很多平台可以进行学生认证,免费领取服务器,赶紧趁着自己还是学生,快去白嫖吧。

这里小王白嫖的是阿里云服务器,GPU为Tesla V100-SXM2 ,做深度学习时的性能表现非常出色。领取步骤:打开阿里云,注册账户,学生认证,搜索找到人工智能平台PAI。它支持交互式建模,支持Python代码编写Notebook,内置JupyterLab、WebIDE及Terminal,提供底层Sudo权限,开放灵活。不会的可以去搜索教程。

实验环境

  • 阿里云人工智能平台PAI
  • GPU型号: Tesla V100-SXM2 
  • sentencepiece 0.2.0
  • torchtext 0.6.0

目录

一、基础知识

1.1 编码器—解码器

1.2 搜索方法

1. 贪婪搜索

2. 穷举搜索

3. 束搜索

1.3 注意力机制

二、机器翻译(注意力机制)

2.1 读取和预处理数据

 2.2 含注意力机制的编码器—解码器

2.2.1 编码器

2.2.2 注意力机制

2.2.3  解码器

2.3 训练模型

2.4 预测不定长的序列

2.5 评价翻译结果 

三、基于Transformer实现机器翻译(日译中)

3.1 导入相关的包

3.2 获取并行数据集

3.3 分词

 3.4 构建TorchText词汇表对象

3.5 创建迭代的 DataLoader 对象

3.6 Transformer模型

3.6.1 编码器-解码器架构

3.6.2 位置编码器和标记嵌入器

3.6.3 掩码 

3.6.4 创建Transformer实例

3.7 训练模型

3.8 尝试翻译

3.9 保存Vacab对象和模型 


一、基础知识

1.1 编码器—解码器

编码器—解码器(encoder-decoder)或序列到序列(seq2seq)模型广泛应用于自然语言处理领域,如机器翻译。它包括两个主要组件:编码器和解码器,它们通常由循环神经网络(RNN)构成。编码器将输入序列转化为背景变量,解码器则利用这个背景变量生成输出序列。

编码器

功能:

  • 将一个不定长的输入序列变换成一个定长的背景变量 c,编码输入序列的信息。

结构:

  • 编码器通常是一个RNN。假设输入序列为 x1, x2, ..., xT,在每个时间步 t,RNN将输入 xt 和上一个时间步的隐藏状态 ht-1 变换为当前时间步的隐藏状态 ht

h_{t}=f(x_{t},h_{t-1})

  • 编码器最终通过函数 q 将所有时间步的隐藏状态转化为背景变量 c: 

c=q(h_{1},h_{2},......,h_{T})

  • 例如,q(h_1, ..., h_T) = h_T 表示使用最终时间步的隐藏状态 h_T 作为背景变量 c

单向与双向RNN:

  • 单向RNN:每个时间步的隐藏状态只取决于当前及之前的输入子序列。
  • 双向RNN:每个时间步的隐藏状态同时考虑当前时间步之前和之后的子序列输入,更全面地编码整个序列的信息。

解码器

功能:

  • 利用背景变量 c 和之前的输出生成当前时间步的输出序列。

结构:

  • 解码器也是一个RNN。在输出序列的时间步 t',解码器将上一个时间步的输出 yt'-1 和背景变量 c 作为输入,并结合上一个时间步的隐藏状态 st'-1 生成当前时间步的隐藏状态 st': 

s_{t'}=g(y_{t'-1},c,s_{t'-1})

  • 通过解码器的隐藏状态 st' 和背景变量 c,利用自定义的输出层和softmax运算,计算当前时间步输出 yt' 的条件概率分布: 

P(y_{t'} | y_{1},......,y_{t'-1},c)

编码器—解码器模型利用编码器将不定长的输入序列编码为定长的背景变量,并通过解码器生成不定长的输出序列。通过这种架构,seq2seq模型可以处理自然语言处理中的许多复杂任务。

1.2 搜索方法

上一节介绍了如何训练输入和输出均为不定长序列的编码器—解码器。本节我们介绍如何使用编码器—解码器来预测不定长的序列。

上一节里已经提到,在准备训练数据集时,我们通常会在样本的输入序列和输出序列后面分别附上一个特殊符号"<eos>"表示序列的终止。我们在接下来的讨论中也将沿用上一节的全部数学符号。为了便于讨论,假设解码器的输出是一段文本序列。设输出文本词典(包含特殊符号"<eos>")的大小为|y|,输出序列的最大长度为

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/921190
推荐阅读
相关标签