首页 > 其他分享 >基于MindSpore实现Transformer的文本机器翻译

基于MindSpore实现Transformer的文本机器翻译

时间:2024-11-19 16:48:20浏览次数:3  
标签:Transformer Tensor 训练 模型 机器翻译 机制 注意力 MindSpore

一、前言

相同的一句话,不同的人听的时候侧重点也可能不同。在自然语言处理中,根据任务内容的不同,句子中需要重点关注的部分也会不同,因而引入了注意力机制。

注意力机制:判断在执行某个任务时,词在句子中的重要性,并通过注意力分数来表示词的重要程度。分数越高,说明该词对完成该任务的重要性越大。

计算注意力分数时,我们主要参考三个因素: 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

相关文章

  • AI大模型探索之路-训练篇13:大语言模型Transformer库-Evaluate组件实践_transformer库
    目录系列篇章......
  • Transformer Concept Exploration and Practice in Pytorch
    IntroductionTransformer是一种广泛应用与自然语言处理的神经网络架构,它基于自注意力机制,允许模型在做出预测时为句子中的不同单词赋予不同的重要性。它非常擅长处理序列任务,并且具有并行计算的优势,因此在大规模数据集上训练时非常高效。序列任务是任何将输入序列进行变换得到输......
  • MindSpore-2.4版本中的一些新特性
    技术背景在前面的一篇博客中我们介绍了MindSpore-2.4-gpu的安装和其中可能出现的一些问题。这里我们在安装完成之后,可以尝试使用一些MindSpore新版本的特性。那么在安装之后,如果是使用VSCode作为IDE,可以使用ctrl+shift+P快捷键,然后搜索python:sele将Python解释器切换到我们所需要......
  • transformer模型学习路线
    Transformer学习路线前排提示,文末有大模型AGI-CSDN独家资料包哦!完全不懂transformer,最近小白来入门一下,下面就是本菜鸟学习路线。Transformer和CNN是两个分支!!因此要分开学习Transformer是一个Seq2seq模型,而Seq2seq模型用到了self-attention机制,而self-attention机制又在E......
  • 解决MindSpore-2.4-GPU版本的安装问题
    问题背景虽说在MindSpore-2.3之后的版本中不在正式的发行版中支持GPU硬件后端,但其实在开发分支版本中对GPU后端是有支持的:但是在安装的过程中可能会遇到一些问题或者报错,这里复现一下我的Ubuntu-20.04环境下的安装过程。Pip安装基本的安装流程是这样的,首先使用anaconda创建......
  • 小波变换+Transformer:融合创新驱动多领域进步
    2024发论文&模型涨点之——小波变换+Transformer小波变换(WaveletTransform,WT)和Transformer是两种强大的工具,它们在各自的领域内有着广泛的应用。小波变换是一种数学方法,用于分析信号的时间-频率特性,而Transformer则是一种深度学习模型,主要用于处理序列数据,特别是在自然语言......
  • 浅学AI笔记03:一个Transformer自注意力机制的故事
    ChatGPT、百度文心一言等同类的大模型,都使用了Transformer架构,Transformer最大的特点是其有一个“自注意力机制”,搬个定义说的是:允许模型在处理每个输入元素时,能够考虑其与序列中所有其他元素之间的相关性,从而动态调整其权重。白话来说,就是模型要先理解输入句子的含义,才能......
  • 【Transformer】损失函数-交叉熵损失
    目录1.交叉熵损失的定义:2.输入:模型的输出分布和真实标签详细解释输入3.输出:损失值4.详细的步骤5.举例说明总结在《AttentionIsAllYouNeed》论文中的Transformer模型主要用于机器翻译任务。对于这样的序列生成任务(如翻译、文本生成等),模型的损失函数通常是交......
  • 详细介绍Transformer!
     ......
  • Transformer加载预训练模型实践
    以使用google-bert/bert-base-chinese模型为例下载预训练模型官方站点:https://www.huggingface.co/(如果无法访问,使用镜像站点)镜像站点:https://hf-mirror.com/搜索框内搜索自己需要的模型,点击Filesandversions, 一般下载config.json、pytorch_model.bin、tokenizer.json、t......