一、前言
相同的一句话,不同的人听的时候侧重点也可能不同。在自然语言处理中,根据任务内容的不同,句子中需要重点关注的部分也会不同,因而引入了注意力机制。
注意力机制:判断在执行某个任务时,词在句子中的重要性,并通过注意力分数来表示词的重要程度。分数越高,说明该词对完成该任务的重要性越大。
计算注意力分数时,我们主要参考三个因素: query(任务内容)、key(帮助定位到答案)和value(答案)。在自然语言处理中通常简称为Q、K、V。用百度网站举例,当我们在百度网站输入我们要搜索的内容(query)时,会返回搜索的结果,我们点击一个结果(key),我们就会看到点击结果的详细内容(value)。
在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子。注意力机制与自身(Source)还有关注对象(Target)都有关系。
自注意力机制:一种特殊的注意力机制,是一种将单个序列的不同位置关联起来以计算同一序列的表示的注意力机制。只关注输入本身或只关注关注对象本身。
多头注意力机制:多头表示对每个Query和所有的Key-Value做多次注意力机制。做两次,就是两头,做三次,就是三头。意义在于获取每个Query和所有的Key-Value的不同的依赖关系,类似CNN的多个卷积核提取不同的特征。
二、Transformer介绍
Transformer是encoder-decoder的结构,只不过这里的“encoder”和“decoder”是由无数个同样结构的encoder层和decoder层堆叠组成。可用于处理机器翻译、语言建模和文本生成等自然语言处理任务。当然在机器视觉中发现也有不错的效果。
Transformer与传统NLP特征提取类模型的区别主要在以下两点:
- Transformer是一个纯基于注意力机制的结构,并将自注意力机制和多头注意力机制的概念运用到模型中;
- 由于缺少RNN模型的时序性,Transformer引入了位置编码,在数据上而非模型中添加位置信息;
以上的处理使训练更加高效且在处理长序列的任务中表现更优秀。
模型结构如下:
基本流程如下:
- inputs是原始句子,经过Tokenizer转变为tokens。
- tokens输入模型,第一个算子是Embedder,tokens转换为float tensor,包含了原始句子的内容信息,经过PE处理后在内容信息的基础上添加位置信息。
- 之后进入layers,每个layers会包含一个attention结构,计算Q和K的tensor的内积,并将内积概率化,乘以对应的V获得新的tensor。
- tensor加上输入的x后(防止层数太深梯度消失)进入Normalization,对tensor分布进行标准化。
- 进入FeedForward(MLP),重新进入下一layer。
- 所有的layers计算过后,经过一个linear求出对vocab每个位置的概率。
Transformer基本原理:让每个文字的Tensor和其他文字的Tensor做内积(也就是cosine投影值,可以理解为文字的相关程度)。之后把这些相关程度放在一起计算各自占比,再用占比比例分别乘以对应文字的Tensor并相加起来,得到了一个新的Tensor(这个Tensor是之前所有Tensor的概率混合,可以理解为对句子所有文字的抽象)。每个文字都进行如上动作,因此生成的新的Tensor和之前输入的Tensor长度相同(比如输入十个字,计算得到的Tensor还是十个),在层数不断堆叠的情况下,最后的Tensor会越来越抽象出文字的深层次意义,用最后输出的Tensor去计算输出一个新的文字或分类。
三、基于MindSpore实现Transformer的文本机器翻译
本次实践参考链接:https://github.com/mindspore-courses/step_into_llm/blob/master/Season1.step_into_chatgpt/1.Transformer/transformer-new.ipynb,感兴趣的同学可在启智平台上尝试运行。
本课程使用mindspore框架实现transformer,然后进行机器翻译。
全流程:
- 数据预处理: 将图像、文本等数据处理为可以计算的Tensor
- 模型构建: 使用框架API, 搭建模型
- 模型训练: 定义模型训练逻辑, 遍历训练集进行训练
- 模型评估: 使用训练好的模型, 在测试集评估效果
- 模型推理: 将训练好的模型部署, 输入新数据获得预测结果
1、训练数据集的信息如下:
2、loss函数使用CE(交叉熵损失函数),该函数也可用于分类问题中。Adam优化器因其自适应学习率、低内存消耗、快速收敛和易于调参等优点,成为许多深度学习任务的首选优化器。本次实验也是使用Adam优化器。
3、代码中对训练和评估需要设置不同模式,训练:model.set_train(True),评估和推理:model.set_train(False)。
4、模型训练情况如下,tqdm库广泛应用于机器学习,可以很好的看到训练进度。如下,loss在不断降低。本次训练保存了最佳的模型的ckpt文件,实践场景中可使用这个特性保留最佳模型并提前退出训练。
5、训练过程可观察NPU资源使用情况,AICore非0,表示正在使用昇腾芯片的算力。
6、推理结果展示:
7、本次训练epoch数为10,BLEU得分如下:
标签:Transformer,Tensor,训练,模型,机器翻译,机制,注意力,MindSpore From: https://blog.csdn.net/weixin_51209423/article/details/143879052