【自然语言处理八-transformer实现翻译任务-一(输入)】

自然语言处理八-transformer实现翻译任务-一(输入)

  • transformer架构
  • 数据处理部分
    • 模型的输入数据(图中inputs outputs outputs_probilities对应的label)
      • 以处理英中翻译数据集为例的代码
    • positional encoding 位置嵌入
      • 代码

鉴于transfomer的重要性,在两篇介绍过transfomer模型理论的基础上,我们将分几篇文章,用pytorch代码实现一个完整的transfomer模型。
下面是之前介绍模型的文章:
自然语言处理六-最重要的模型-transformer-上
自然语言处理六-最重要的模型-transformer-下

transformer架构

在这里重新给出transfomer架构图以及用中文翻译后的对照图:
在这里插入图片描述

从架构图可以看出实现transformer架构,encoder和decoder大部分相同。因此也规划几篇内容,介绍以下几大块:

  1. 输入输出部分
    处理数据,源和目标以及输出,以及位置编码

  2. 注意力部分
    多头注意力和掩蔽多头注意力

  3. 前馈网络等
    加和归一化,以及逐位前馈网路

  4. 训练和测试

本篇作为开始,先介绍处理数据部分

数据处理部分

模型的输入数据(图中inputs outputs outputs_probilities对应的label)

这部分用来处理transformer模型需要输入的数据,这部分其实和seq2seq架构是相同的,以自然语言的翻译为例:
比如transformer需要将 ich mochte ein bier 翻译成 i want a beer,那如需要输入的数据格式是这样的(假设句子最大长度5):
[ich mochte ein bier , i want a beer, i want a beer ]

那么上面那部分输入的用途都是什么呢?
encoder输入需要翻译的句子 ich mochte ein bier
decoder输入是 i want a beer
decoder的label是i want a beer
分别对应于图中inputs outputs outputs_probilities相对应的标签

其中是填充字符,用来填充到一个我们超参数中我们设定的sequence的长度
代表句子的开始, 代表句子结束
当然模型真正要处理还是需要根据词汇表转成数字格式的形式,才能被模型处理

以处理英中翻译数据集为例的代码

# -*- coding: utf-8 -*-"""
加载源数据,并处理成data set和data loader
"""
import os
import zipfile
import torch
import torch.utils.data as Data
from src.configs import config
from src.utility.utils import Utils
from src.vocabulay.vocabulary import Vocabularyclass DataSetLoader:"""数据封装成dateset和datelaoder"""def __init__(self, is_train=True, numbers=config.num_examples):"""init parameters"""self.raw_file_path = config.raw_file_pathself.raw_zip_path = config.raw_zip_pathself.batch_size = config.batch_sizeself.num_steps = config.num_stepsself.num_examples = numbersself.is_train = is_traindef load_array(self, data_arrays):"""构造一个数据迭代器:param data_arrays:  输入数据的列表:param is_train:     训练/测试数据集:return:             dataloader"""dataset = Data.TensorDataset(*data_arrays)return Data.DataLoader(dataset, self.batch_size, shuffle=self.is_train)def load_data_nmt(self):"""返回翻译数据集的迭代器和词表:return: 迭代器和词表"""source, src_vocab, target, tgt_vocab = build_vocabu()src_array, src_valid_len = self.build_array_nmt(source, src_vocab)tgt_array, tgt_valid_len = self.build_array_nmt(target, tgt_vocab)data_arrays = (src_array, src_valid_len, tgt_array, tgt_valid_len)data_iter = self.load_array(data_arrays)return data_iter, src_vocab, tgt_vocabdef build_array_nmt(self, lines, vocab):"""将机器翻译的文本序列转换成小批量source[['hello', 'world'],..]  target[['你'], [好]]source[[]]"""lines = [vocab[l] for l in lines]lines = [l + [vocab['<eos>']] for l in lines]array = torch.tensor([Utils.truncate_pad(l, self.num_steps, vocab['<pad>']) for l in lines])valid_len = Utils.reduce_sum(Utils.astype(array != vocab['<pad>'], torch.int32), 1)return array, valid_lendef extract_content():"""提取raw text中内容:return: raw text"""if not os.path.exists(config.raw_file_path):with zipfile.ZipFile(config.raw_zip_path, 'r') as zip_ref:zip_ref.extractall(os.path.dirname(config.raw_file_path))print('语料解压缩完成')with open(config.raw_file_path, 'r', encoding='UTF-8') as f:content = f.read()return contentdef build_vocabu():"""创建词表:return: 词表"""text = Utils.preprocess_nmt(extract_content())source, target = Utils.tokenize_nmt(text, config.num_examples)src_vocab = Vocabulary(source, min_freq=2)tgt_vocab = Vocabulary(target, min_freq=2)return source, src_vocab, target, tgt_vocab

positional encoding 位置嵌入

为了添加位置信息,transformer的位置嵌入,每个位置的512维的数据用sin/cos做了处理
在这里插入图片描述
其中pos是在句子中位置,i是维度信息

代码

def get_sinusoid_encoding_table(n_position, d_model):def cal_angle(position, hid_idx):return position / np.power(10000, 2 * (hid_idx // 2) / d_model)def get_posi_angle_vec(position):return [cal_angle(position, hid_j) for hid_j in range(d_model)]

其他处理会在后续章节继续实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/307662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音快手直播整蛊软件插件工具合集(多啦咪/梦歌)

哪一款整蛊直播软件靠谱呢&#xff1f; 相信很多粉丝宝宝们&#xff0c;在做抖音直播或者快手的都在找好用又便宜的直播整蛊插件或者软件&#xff0c;但是好用的几乎少之又少&#xff0c;今天梦歌给大家分享几个&#xff0c;目前在用的也亲测过的几个软件及插件工具给大家参考&…

记录一下MySQL8版本更改密码规则

#查看当前密码策略 show variables like validate_password%;#修改密码等级为low set global validate_password.policy LOW; #注意MySQL8版本这是点&#xff0c;不是_#修改密码长度为6 set global validate_password.length 6;#查询我的数据库中user表host和user select host,…

基于javassm的医院挂号系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

大厂Java笔试题之判断字母大小写

/*** 题目&#xff1a;如果一个由字母组成的字符串&#xff0c;首字母是大写&#xff0c;那么就统计该字符串中大写字母的数量&#xff0c;并输出该字符串中所有的大写字母。否则&#xff0c;就输出* 该字符串不是首字母大写*/ public class Demo2 {public static void main(St…

图片批量高效缩放,批量缩放GIF图片并在缩放后以bmp位图保存

在这个数字化时代&#xff0c;图片已经成为我们生活和工作中不可或缺的一部分。无论是制作海报、设计网站&#xff0c;还是日常分享&#xff0c;我们都需要对图片进行处理。然而&#xff0c;面对大量的GIF图片&#xff0c;如何高效地进行缩放并转换为BMP位图&#xff0c;成为了…

Traefik与传统的Edge Router有何不同?

在云原生时代&#xff0c;传统的网络架构和现代的解决方案之间存在明显的差异。特别是在处理网络流量和路由方面&#xff0c;传统的 Edge Router 与像 Traefik 这样的现代反向代理和负载均衡器相比&#xff0c;展现出许多不同的特点。本文将深入探讨 Traefik 与传统 Edge Route…

阿里云账号注册流程,支持多种方式注册,这种方法最简单

2024年阿里云账号注册支持手机号短信验证码注册、淘宝、支付宝和钉钉注册四种方式&#xff0c;使用手机号注册后还需要完成实名认证&#xff0c;如果选择支付宝、淘宝或钉钉注册的话&#xff0c;可以自动调用实名认证信息&#xff0c;免去实名认证步骤。阿里云百科aliyunbaike.…

Tomcat启动闪退的10个解决小技巧

引言 大家好&#xff01;在我们日常开发中&#xff0c;使用Tomcat作为Web服务器是相当常见的。 然而&#xff0c;遇到Tomcat启动后立即闪退的问题也不是什么稀罕事。 这种情况可能会让人感到困惑和沮丧&#xff0c;特别是当你急需完成一个项目或者修复一个重要的bug时。 不过…

【Java SE】多态

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 多态1.1 多态是什么1.2 多态的意义1.3 多态的实现条件 2. 重写2.1 重写的概念2.2 重写的规则2.3 重写与重…

MP4 封装格式详解

MP4 封装格式详解 MP4 封装格式详解简介概念与术语MP4 整体结构Box 结构Box HeaderBox Data MP4 典型 Boxftyp&#xff08;File Type Box&#xff09;moov&#xff08;Movie Box&#xff09;mvhd&#xff08;moov header&#xff09;traktkhd&#xff08;track header box&…

vue3大事件项目3

弹框验证 先准备变量: const formModel ref({ cate_name: , cate_alias: }) 还有规则&#xff1a; const rules { cate_name: [ { required: true, message: please input name, trigger: blur }, { pattern: /^\S{1,10}$/, message: must be 1-10, trigger: blur } ], …

太阳光光照试验耐久性老化试验使用太阳光模拟器系统

上海科迎法电气科技有限公司生产的太阳光模拟器系统主要应用于太阳能研究、材料研究、光伏组件测试、空间环境模拟器、植物生长研究、光热模拟等领域&#xff0c;主要表现特征为&#xff1a; 1. 太阳能研究&#xff1a;可用于模拟不同光照条件下太阳能电池的性能测试和研究&am…

高清视频素材,免费下载,收藏好这6个网站。

国内大部分视频素材网站都需要付费购买&#xff0c;这让很多从事视频剪辑的朋友不知道去哪里找免费的视频素材&#xff0c;本期就给大家分享我收藏多年的6个视频素材网站&#xff0c;都可以免费下载&#xff0c;还可以商用&#xff0c;而且国内外的都有哦&#xff0c;有需要的朋…

java-spring 图灵 02 手写spring

01.idea中创建一个maven管理的空项目 02.模拟创建出spring容器类&#xff0c;这里叫wzpApplicationContext&#xff0c;创建的时候会自动加载配置类的数据 public class wzpApplicationContext {private Class configClass;public wzpApplicationContext(Class configClass) …

【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的windowOpacity属性 | cursor属性 | font属性 文章编号&#…

解决 MSYS2 Qt 6.7 默认 stylesheet 在 windows 11 下的显示故障

项目场景&#xff1a; MSYS2 升级到 Qt6.7.0&#xff0c;发现显示故障&#xff0c;所有Qt6程序以及 QtCreator的SpinBox都显示不全&#xff0c;Combox的底色不对。 问题描述 2024年4月1日&#xff0c;pacman升级MSYS2后&#xff0c;Qt6遇到风格错误。 msys环境&#xff1a; …

ThingsBoard实现告警规则创建并生成报警信息

一、概述 1.概念 2.告警规则 3.简单报警条件 步骤1. 打开设置配置 ​步骤2. 单击警报规则 ​步骤3. 单击警报条件 ​步骤4. 单击过滤条件 ​步骤5. 选择数据键 ​步骤6. 设置条件 ​步骤7. 保存条件 ​步骤8. 应用更改 4.测试告警 1、使用MQTT发送遥测属性 2、查看…

数据结构:双向链表

一.双向链表的结构 最常用的链表就是单链表和双向链表。我们首先要知道&#xff0c;链表有八种分类。单链表是不带头单向不循环链表。而此篇博客要讲的是带头双向循环链表。 结构如下&#xff1a; 注意&#xff1a;带头链表里的头节点&#xff0c;实际为“哨兵位”&#xff0…

【python】python饮料销售数据分析可视化(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

机器人瓶胚检测工作站(H3U脉冲轴控制)

1、变量定义 2、程序监控1 2、 程序监控2 3、程序监控3 机器人输送料和机构的动作安全尤为重要&#xff0c;下面我们讨论下安全联锁控制逻辑 4、相机拍照触发信号 5、相机拍照触发时序