当前位置: 首页 > news >正文

9.5. 机器翻译与数据集

笔记

9.5. 机器翻译与数据集 — 动手学深度学习 2.0.0 documentation

1.下载文件 读文件

2.处理数据 在所有标点符号前面加空格 后面用于分割  因为法语英语可能有半角全角的字符区分用utf编码的方式统一成半角字符的空格

3.因为分隔用的是空格split 所有vocab是没有空格的

4.分割之后 分别是词源和翻译两个list

分别都是一个大list装着不同的小list,小list对应的是原本的词语加字符,用空格split之后分开装了

5.后续用vocab处理,  提前加入reserved_tokens=['<pad>', '<bos>', '<eos>'] 这三个 pad是后续padding用的就是填充的缩写,填充标识符,bos是开始标识符,eos是结束标识符  因为固定'unknown'排第一,下标0,所有这三个正好是下标1,2,3的位置 

min_freq=2出现次数少于2次的生僻词过滤,处理后得到词源和翻译字典 每一个下标对应一个word而不是字符

#此处用字典是为了之后将word和字符转成字典中按频率排的数字list,减少内存和方便操作

6.之后将词源内容src每一句转成数字list,但同时还要加上eos标识符标志结束,因为没有其他办法标志句子的结束,

标识符在vocab下标是3 

7.之后将所有lines中的文本每一行line填充为num_steps长度,当num_steps为8的时候

以str的角度来看go.这个文本转换成vocab的数字序列之后只有2的长度,加上eos标志符也只有3.所以需要填充为go.<eos><pad><pad><pad><pad><pad>  这样的话就是长度为8了

以数字序列来看就是[9, 4, 3, 1, 1, 1, 1, 1] 9是go,.是4, eos是3 注意是在eos后面加

 因为要方便后面算valid有效长度

8.算有效长度:

valid_len = (array != vocab['<pad>']).type(torch.int32).sum(1)

用下标0组实例分解

(array != vocab['<pad>']).type(torch.int32)  布尔转int

 最后以全组再用sum在1维处减少维数

 得到有效长度list

9.最后就是构成传数据的函数load_data_nmt返回数据 返回四个成员组成的tuple  

 
import os
import torch
from d2l import torch as d2l#@save
d2l.DATA_HUB['fra-eng'] = (d2l.DATA_URL + 'fra-eng.zip','94646ad1522d915e7b0f9296181140edcf86a4f5')#@save
def read_data_nmt():"""载入“英语-法语”数据集"""data_dir = d2l.download_extract('fra-eng')with open(os.path.join(data_dir, 'fra.txt'), 'r',encoding='utf-8') as f:return f.read()raw_text = read_data_nmt()
print(raw_text[:75])#@save
def preprocess_nmt(text):"""预处理“英语-法语”数据集"""def no_space(char, prev_char):return char in set(',.!?') and prev_char != ' '# 使用空格替换不间断空格# 使用小写字母替换大写字母text = text.replace('\u202f', ' ').replace('\xa0', ' ').lower()# 在单词和标点符号之间插入空格out = [' ' + char if i > 0 and no_space(char, text[i - 1]) else charfor i, char in enumerate(text)]return ''.join(out)text = preprocess_nmt(raw_text)
print(text[:80])#@save
def tokenize_nmt(text, num_examples=None):"""词元化“英语-法语”数据数据集"""source, target = [], []for i, line in enumerate(text.split('\n')):if num_examples and i > num_examples:breakparts = line.split('\t')if len(parts) == 2:source.append(parts[0].split(' '))target.append(parts[1].split(' '))return source, targetsource, target = tokenize_nmt(text)
source[:6], target[:6]#@save
def show_list_len_pair_hist(legend, xlabel, ylabel, xlist, ylist):"""绘制列表长度对的直方图"""d2l.set_figsize()_, _, patches = d2l.plt.hist([[len(l) for l in xlist], [len(l) for l in ylist]])d2l.plt.xlabel(xlabel)d2l.plt.ylabel(ylabel)for patch in patches[1].patches:patch.set_hatch('/')d2l.plt.legend(legend)show_list_len_pair_hist(['source', 'target'], '# tokens per sequence','count', source, target);src_vocab = d2l.Vocab(source, min_freq=2,reserved_tokens=['<pad>', '<bos>', '<eos>'])#空格只做分割 vocab是没有空格的 src_vocab[' ']
len(src_vocab)#@save
def truncate_pad(line, num_steps, padding_token):#padding_token指用哪个token用于填充padding 传进去的是vocab的下标"""截断或填充文本序列 truncate翻译是截断"""if len(line) > num_steps:return line[:num_steps]  # 截断return line + [padding_token] * (num_steps - len(line))  # 填充#line是[47, 4]  这里意思是往里面一直加元素这样一个[1]truncate_pad(src_vocab[source[0]], 10, src_vocab['<pad>'])#@save
def build_array_nmt(lines, vocab, num_steps):"""将机器翻译的文本序列转换成小批量"""lines = [vocab[l] for l in lines]lines = [l + [vocab['<eos>']] for l in lines]#数字list加上一个eos标识符的下标 所以加了一个结束的标志下标  比如[9,4]->[9,4,3]array = torch.tensor([truncate_pad(l, num_steps, vocab['<pad>']) for l in lines])valid_len = (array != vocab['<pad>']).type(torch.int32).sum(1)return array, valid_len#@save
def load_data_nmt(batch_size, num_steps, num_examples=600):"""返回翻译数据集的迭代器和词表"""text = preprocess_nmt(read_data_nmt())source, target = tokenize_nmt(text, num_examples)src_vocab = d2l.Vocab(source, min_freq=2,reserved_tokens=['<pad>', '<bos>', '<eos>'])tgt_vocab = d2l.Vocab(target, min_freq=2,reserved_tokens=['<pad>', '<bos>', '<eos>'])src_array, src_valid_len = build_array_nmt(source, src_vocab, num_steps)tgt_array, tgt_valid_len = build_array_nmt(target, tgt_vocab, num_steps)data_arrays = (src_array, src_valid_len, tgt_array, tgt_valid_len)data_iter = d2l.load_array(data_arrays, batch_size)return data_iter, src_vocab, tgt_vocabtrain_iter, src_vocab, tgt_vocab = load_data_nmt(batch_size=2, num_steps=8)
for X, X_valid_len, Y, Y_valid_len in train_iter:print('X:', X.type(torch.int32))print('X的有效长度:', X_valid_len)print('Y:', Y.type(torch.int32))print('Y的有效长度:', Y_valid_len)break

相关文章:

9.5. 机器翻译与数据集

笔记 9.5. 机器翻译与数据集 — 动手学深度学习 2.0.0 documentation 1.下载文件 读文件 2.处理数据 在所有标点符号前面加空格 后面用于分割 因为法语英语可能有半角全角的字符区分用utf编码的方式统一成半角字符的空格 3.因为分隔用的是空格split 所有vocab是没有空格的 …...

跟着凯新生物2 Arm PEG Biotin,2-Branched PEG Biotin,生物素-聚乙二醇-二臂/支,学试剂知识

中英文名&#xff1a;2 Arm/Branched PEG Biotin&#xff0c;2 ArmPEG Biotin&#xff0c;二臂/支 PEG 生物素一、Product specifications&#xff1a; 1.CAS No&#xff1a;N/A 2.Packaging specification&#xff1a;10mg&#xff0c;25mg&#xff0c;50mg, flexible packagi…...

react组件进阶(四)

文章目录1. 组件通讯介绍2. 组件的 props3. 组件通讯的三种方式3.1 父组件传递数据给子组件3.2 子组件传递数据给父组件3.3 兄弟组件4. Context5. props 深入5.1 children 属性5.2 props 校验5.3 props 的默认值6. 组件的生命周期6.1 组件的生命周期概述6.2 生命周期的三个阶段…...

阿维塔城区NCA智驾导航辅助,复杂路口,全面胜任

阿维塔11城区NCA智驾导航辅助将于3月在上海、深圳等城市分阶段开启体验&#xff0c;以看得清、判得准、控得稳的“智驾”&#xff0c;进一步巩固业界智能天花板的地位。智能驾驶里程碑&#xff0c;拨杆两下开启都市安适旅程作为AVATRANS智能领航系统的重要组成部分&#xff0c;…...

[Pandas] div()函数

div()方法将DataFrame中的每个值除以指定的值&#xff0c;并返回一个计算处理后的Dataframe结果 DataFrame.div()函数其实是除法运算&#xff0c;表格中的每个数据都是被除数 导入数据 import pandas as pd df pd.DataFrame({"col1":[5, 3, None, 4], "col2…...

c++并发与多线程

c并发与多线程 子线程结束&#xff0c;主线程不能结束&#xff0c;否则会出错&#xff0c;和java不一样。 可以用join的方式让主线程等待子线程执行结束。 quickStart 线程相关头文件 #include <thread> 使用全局函数构造一个线程对象 #include <iostream> #…...

Vinylsulfone PEG Biotin,Biotin-PEG-VS,生物素聚乙二醇乙烯砜,VS基团容易与游离巯基发生反应

●中文名&#xff1a;乙烯砜PEG生物素&#xff0c;生物素聚乙二醇乙烯砜 ●英文名&#xff1a;Vinylsulfone PEG Biotin, VS-PEG-Biotin&#xff0c;Vinyl sulfone-PEG-Biotin&#xff0c;Biotins-PEG-sulfone Vinyl●产品理化指标&#xff1a; CAS号&#xff1a;N/A 分子量&am…...

论文学习——Tune-A-Video

Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation Abstract 本文提出了一种方法&#xff0c;站在巨人的肩膀上——在大规模图像数据集上pretrain并表现良好的 text to image 生成模型——加入新结构并进行微调&#xff0c;训练出一套 …...

C++类与对象part1

目录 1.类的6个默认函数 2.构造函数&#xff08;相当于init&#xff09; 3.析构函数 &#xff08;相当于destroy&#xff09; 4.拷贝构造函数 赋值运算符重载 运算符重载 赋值运算符重载 引入&#xff1a; 你知道为什么cout可以自动识别类型吗&#xff1f; 其实cout是一…...

记一次抓取网页内容

已打码 // UserScript // name --------- // namespace http://tampermonkey.net/ // version 0.1 // description https://---------oups/{id}/topics?scopeall&count20&begin_time2022-09-01T00%3A00%3A00.000%2B0800&end_time2022-10-01T00%…...

parasoft帮助史密斯医疗通过测试驱动开发提供安全、高质量的医疗设备

parasoft是一家专门提供软件测试解决方案的公司&#xff0c;Parasoft通过其经过市场验证的自动化软件测试工具集成套件&#xff0c;帮助企业持续交付高质量的软件。Parasoft的技术支持嵌入式、企业和物联网市场&#xff0c;通过将静态代码分析和单元测试、Web UI和API测试等所有…...

SpringBoot整合Oauth2开放平台接口授权案例

<!-- SpringBoot整合Web组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId>&l…...

Linux_创建用户

创建一个名为hello的用户&#xff0c;并指定/home/hello为根目录useradd -d /home/hello -m hello 设置密码 ,密码会输入两次&#xff0c;一次设置密码&#xff0c;一次确认密码&#xff0c;两次密码要输入的一样passwd hellouseradd的常用参数含义-d指定用户登入时的主目录&am…...

RDD(弹性分布式数据集)总结

文章目录一、设计背景二、RDD概念三、RDD特性四、RDD之间的依赖关系五、阶段的划分六、RDD运行过程七、RDD的实现一、设计背景 1.某些应用场景中&#xff0c;不同计算阶段之间会重用中间结果&#xff0c;即一个阶段的输出结果会作为下一个阶段的输入。如&#xff1a;迭代式算法…...

服务器版RstudioServer安装与配置详细教程

Docker部署Rstudio server 背景&#xff1a;如果您想在服务器上运行RstudioServer&#xff0c;可以按照如下方法进行操作&#xff0c;笔者测试时使用腾讯云服务器&#xff08;系统centos7&#xff09;&#xff0c;需要在管理员权限下运行 Rstudio 官方提供了使用不同 R 版本的 …...

如何在Java中将一个列表拆分为多个较小的列表

在Java中&#xff0c;有多种方法可以将一个列表拆分为多个较小的列表。在本文中&#xff0c;我们将介绍三种不同的方法来实现这一目标。 方法一&#xff1a;使用List.subList()方法 List接口提供了一个subList()方法&#xff0c;它可以用来获取列表中的一部分元素。我们可以使…...

TryHackMe-Inferno(boot2root)

Inferno 现实生活中的机器CTF。该机器被设计为现实生活&#xff08;也许不是&#xff1f;&#xff09;&#xff0c;非常适合刚开始渗透测试的新手 “在我们人生旅程的中途&#xff0c;我发现自己身处一片黑暗的森林中&#xff0c;因为直截了当的道路已经迷失了。我啊&#xf…...

微信原生开发中 JSON配置文件的作用 小程序中有几种JSON配制文件

关于json json是一种数据格式&#xff0c;在实际开发中&#xff0c;JSON总是以配制文件的形式出现&#xff0c;小程序与不例外&#xff0c;可对项目进行不同级别的配制。Q&#xff1a;小程序中有几种配制文件A:小程序中有四种配制文件分别是&#xff1a;project.config.json si…...

【python】为什么使用python Django开发网站这么火?

关注“测试开发自动化” 弓中皓&#xff0c;获取更多学习内容&#xff09; Django 是一个基于 Python 的 Web 开发框架&#xff0c;它提供了许多工具和功能&#xff0c;使开发者可以更快地构建 Web 应用程序。以下是 Django 开发中的一些重要知识点&#xff1a; MTV 模式&#…...

Java设计模式(五)—— 责任链模式

责任链模式定义如下&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者与接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;知道有一个对象处理它为止。 适合使用责任链模式的情景如下&#xff1a; 有许多对…...

AssetStudio终极指南:5步解锁Unity游戏资源的完整实战教程

AssetStudio终极指南&#xff1a;5步解锁Unity游戏资源的完整实战教程 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and additio…...

Win10下VSCode与OpenCV环境搭建:从零到一的避坑指南

1. 环境准备&#xff1a;安装必要工具链 在Windows 10上搭建OpenCV开发环境&#xff0c;首先需要准备好三个核心工具&#xff1a;MinGW、CMake和VSCode。这三个工具就像盖房子需要的钢筋、水泥和施工图纸&#xff0c;缺一不可。 MinGW是Windows下的GNU工具集&#xff0c;相当…...

在Windows电脑上畅享酷安社区的完整指南:桌面端酷安客户端终极教程

在Windows电脑上畅享酷安社区的完整指南&#xff1a;桌面端酷安客户端终极教程 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 想要在大屏幕上舒适地浏览酷安社区吗&#xff1f;厌倦了手机…...

ESP32-C3驱动2寸ST7789屏幕?手把手教你搞定LVGL移植(附避坑代码)

ESP32-C3与ST7789屏幕的LVGL移植实战指南 在物联网设备开发中&#xff0c;显示交互界面往往是提升用户体验的关键一环。ESP32-C3作为乐鑫推出的高性价比RISC-V芯片&#xff0c;搭配ST7789驱动的2寸LCD屏幕&#xff0c;能够构建出性能稳定、成本可控的嵌入式显示方案。本文将带你…...

别再写for循环了!用Java8的groupingBy分组统计,5分钟搞定报表数据聚合

告别繁琐循环&#xff1a;Java8 groupingBy让数据聚合优雅如诗 当我们需要从数据库查询结果中生成各类业务报表时&#xff0c;那些重复的for循环是否已经让你感到厌倦&#xff1f;比如按地区统计销售额、按部门计算平均年龄&#xff0c;传统做法往往需要编写大量样板代码。而Ja…...

别再手动画甘特图了!用VS Code插件MarkWhen,写几行文本就能生成炫酷时间轴

用MarkWhen在VS Code中打造极简时间轴&#xff1a;告别繁琐拖拽&#xff0c;拥抱文本化项目管理 在数字时代&#xff0c;时间管理和项目规划已经成为每个高效能人士的必修课。无论是开发者跟踪项目里程碑&#xff0c;学生规划学习路径&#xff0c;还是个人记录生活轨迹&#xf…...

安卓android无法创建文件夹权限-幽冥大陆(一百21)-东方仙盟

谷歌从安卓 6 开始强制规定直接锁死&#xff1a;根目录 /、system、storage 根目录 全部禁止 APP 写入。目的&#xff1a;防流氓软件乱改系统、乱建文件夹、乱篡改系统文件。瑞芯微等主板厂商二次加锁RK、全志、晶晨这类工控主板&#xff0c;还额外加了两层限制&#xff1a;分区…...

无感定位技术白皮书——ReID跨镜靠特征接力,原生时空轨迹实现无短板碾压

无感定位技术白皮书——ReID跨镜靠特征接力&#xff0c;原生时空轨迹实现无短板碾压前言在智慧安防、智慧园区、工业物联网等数字化转型核心场景中&#xff0c;跨摄像头目标追踪与精准定位是支撑场景智能化升级的关键底座。长期以来&#xff0c;ReID&#xff08;行人重识别&…...

实在Agent如何破解成本分析报告编制耗时耗力与数据滞后?企业架构师的避坑指南

摘要&#xff1a;在2026年的今天&#xff0c;尽管AI技术已深度普及&#xff0c;但许多企业的财务与运营部门仍深陷“数据泥潭”。传统的成本分析报告编制依赖于大量的人工导数、Excel汇总及跨系统搬运&#xff0c;导致报告产出即滞后&#xff0c;严重误导决策。作为一名深耕行业…...

信号净化实战:从基础平滑到智能去噪

1. 信号净化入门&#xff1a;为什么我们需要处理噪声&#xff1f; 第一次接触传感器数据时&#xff0c;我被现实狠狠上了一课——实验室里漂亮的平滑曲线在真实场景中根本不存在。记得去年处理工厂振动传感器数据时&#xff0c;原始信号看起来就像心电图叠加了摇滚乐节奏。这种…...