文章目录

  • 一、机器翻译
  • 二、机器翻译数据集
    • 1. 下载和预处理数据集
      • 1.1 文本预处理
      • 1.2 词元化 [tokenization](https://zhuanlan.zhihu.com/p/371300063)
      • 1.3 词汇表( [word embedding](https://www.zhihu.com/question/32275069))
    • 2. 加载数据集
    • 小结
    • 练习

  这篇Blog开始介绍翻译,都是NLP的相关内容,翻译和我们前面提到的序列预测(RNN、LSTM、GRU等等)、填空(Bi-RNN)等等有什么联系和区别?

一、机器翻译

  机器翻译(machine translation)指的是将序列从一种语言自动翻译成另一种语言。事实上,这个研究领域可以追溯到数字计算机发明后不久的20世纪40年代,特别是在第二次世界大战中使用计算机破解语言编码。几十年来,在使用神经网络进行端到端学习的兴起之前,统计学方法在这一领域一直占据主导地位Brown.Cocke.Della-Pietra.ea.1988, Brown.Cocke.Della-Pietra.ea.1990 。因为 统计机器翻译(statistical machine translation)涉及了翻译模型和语言模型等组成部分的统计分析,因此基于神经网络的方法通常被称为 神经机器翻译(neural machine translation),用于将两种翻译模型区分开来。(统计机器翻译与神经机器翻译

  我们主要关注神经机器翻译方法,强调的是端到端的学习。与语言模型中的语料库是单一语言的语言模型问题存在不同,机器翻译的数据集是由源语言和目标语言的文本序列对组成的。因此,我们需要一种完全不同的方法来预处理机器翻译数据集,而不是复用语言模型的预处理程序。下面,我们将展示如何将预处理后的数据加载到小批量中用于训练。

二、机器翻译数据集

import os
import torch
from d2l import torch as d2l

1. 下载和预处理数据集

  首先,下载一个由Tatoeba项目的双语句子对组成的“英-法”数据集,数据集中的每一行都是制表符分隔文本序列对,序列对由英文文本序列和翻译后的法语文本序列组成。请注意,每个文本序列可以是一个句子,也可以是包含多个句子的一个段落。在这个将英语翻译成法语的机器翻译问题中,英语是 源语言(source language),法语是 目标语言(target language)。

d2l.DATA_HUB['fra-eng'] = (d2l.DATA_URL + 'fra-eng.zip','94646ad1522d915e7b0f9296181140edcf86a4f5')def read_data_nmt():"""载入“英语-法语”数据集"""data_dir = d2l.download_extract('fra-eng')with open(os.path.join(data_dir,'fra.txt'),'r') as f:return f.read()raw_text = read_data_nmt()
print(raw_text[:80])
Go.  Va !
Hi. Salut !
Run!    Cours !
Run!    Courez !
Who?    Qui ?
Wow!    Ça alors !
Fire!

1.1 文本预处理

  1. 使用空格代替不间断空格(non-breaking space)
  2. 使用小写字母代替大写字母
  3. 在单词和标点符号之间插入空格
def preprocess_nmt(text):"""预处理"""# 使用空格替换不间断空格,(\xa0是拉丁扩展字符集里的字符,代表的是不间断空白符)# 使用小写字母替换大写字母text = text.replace('\u202f', ' ').replace('\xa0', ' ').lower()# 在单词和标点符号之间插入空格out = ''for i,char in enumerate(text):if i>0 and char in (',','!','.','?') and text[i-1] !=' ':out += ' 'out +=char# 下面是沐神的原代码,我写成上面的感觉比较好理解
#     def no_space(char,prev_char):
#         return char in set(',.!?') and prev_char != ' '
#     out = [
#         ' ' + char if i > 0 and no_space(char, text[i - 1]) else char
#         for i, char in enumerate(text)]return ''.join(out)text = preprocess_nmt(raw_text)
print(text[:80])
go . va !
hi .    salut !
run !   cours !
run !   courez !
who ?   qui ?
wow !   ça alors !

1.2 词元化 tokenization

我个人的理解:将句子/段落划分成一个个单词组成的向量。就像是把一把

动手学深度学习(四十三)——机器翻译及其数据构建相关推荐

  1. 【动手学深度学习PyTorch版】27 数据增强

    上一篇请移步[动手学深度学习PyTorch版]23 深度学习硬件CPU 和 GPU_水w的博客-CSDN博客 目录 一.数据增强 1.1 数据增强(主要是关于图像增强) ◼ CES上的真实的故事 ◼ ...

  2. 动手学深度学习 leaf-classify实践

    动手学深度学习 leaf-classify实践 基本思路 数据增强:翻转(水平.垂直).平移.旋转.改变明亮对比度.Normalize def get_transform(mode):if mode= ...

  3. 动手学深度学习(十四)——权重衰退

    文章目录 1. 如何缓解过拟合? 2. 如何衡量模型的复杂度? 3. 通过限制参数的选择范围来控制模型容量(复杂度) 4. 正则化如何让权重衰退? 5. 可视化地看看正则化是如何利用权重衰退来达到缓解 ...

  4. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ

    开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...

  5. 【动手学深度学习】(task123)注意力机制剖析

    note 将注意力汇聚的输出计算可以作为值的加权平均,选择不同的注意力评分函数会带来不同的注意力汇聚操作. 当查询和键是不同长度的矢量时,可以使用可加性注意力评分函数.当它们的长度相同时,使用缩放的& ...

  6. 动手学深度学习(文本预处理+语言模型+循环神经网络基础)

    文本预处理 文本是一类序列数据,一篇文章可以看作是字符或单词的序列,本节将介绍文本数据的常见预处理步骤,预处理通常包括四个步骤: 读入文本 分词 建立字典,将每个词映射到一个唯一的索引(index) ...

  7. 动手学深度学习实现DAY-2

    节选自"ElitesAI·动手学深度学习PyTorch版" Task03:过拟合.欠拟合及其解决方案:梯度消失.梯度爆炸:循环神经网络进阶(1天) Task04:机器翻译及相关技术 ...

  8. 《动手学深度学习》—学习笔记

    文章目录 深度学习简介 起源 特点 小结 预备知识 获取和运行本书的代码 pytorch环境安装 方式一 方式二 数据操作 创建 运算 广播机制 索引 运算的内存开销 NDArray和NumPy相互变 ...

  9. 第1章【深度学习简介】--动手学深度学习【Tensorflow2.0版本】

    项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0 UC 伯克利李沐的<动手学深度学习>开源书一经推出便广受好评.很多开 ...

  10. 资源 | 李沐等人开源中文书《动手学深度学习》预览版上线

    来源:机器之心 本文约2000字,建议阅读10分钟. 本文为大家介绍了一本交互式深度学习书籍. 近日,由 Aston Zhang.李沐等人所著图书<动手学深度学习>放出了在线预览版,以供读 ...

最新文章

  1. PyTorch数据加载处理
  2. AcornCharts
  3. MIT机器狗再进化,碎石冰面上跑也不打滑,这次真的稳如狗了
  4. ffmpeg多线程转码
  5. Java UDP协议传输
  6. opencv学 之图像傅里叶变换dft
  7. 『设计模式』JAVA I/O 与装饰者模式UML图
  8. EIGRP个人学习笔记
  9. 别人在忙挖矿,京东架构师却悄悄用区块链搞了件大事
  10. Kafka测试1.0.0
  11. XML fragments parsed from previous mappers already contains value for xxxxx
  12. 用python实现websocket请求遇到的问题及解决方法。
  13. LR:Code-29723 Error: Failed to deliver a p2p message from parent to child process, reason。。。
  14. pdf怎么解除限制?如何解密?一步解决
  15. 在实现视频播放器的步骤client(三)风行网络电影列表
  16. WINCE下ActiveSync连接故障修复办法
  17. 用x32/x64dbg脱DLL壳(IAT表修复和重定位表修复)
  18. 历史库存sap_SAP历史库存MB5B的详解
  19. 针式打印机打印显示传真服务器,针式打印机三联纸怎么设置 点击上面的工具栏上的打印服务...
  20. php guzzlehttp,PHP HTTP客户端-Guzzle原理解析

热门文章

  1. 最小二乘法简解及空间直线拟合
  2. libVLC 播放控制
  3. 51单片机间接寻址C语言,51单片机寄存器间接寻址方式与举例
  4. win10系统下插入U盘有声音提示却不显示盘符
  5. ∀x(P(x) → Q(x))和∀xP(x) → ∀xQ(x) 的区别
  6. Datax-HdfsWriter如何实现支持decimal类型数据写入
  7. 阿里P7、P8、P9级别需要多少年的工作经验,还是因能力而定?
  8. mysql联合索引原理
  9. win11 打开 IE7 兼容模式
  10. 【Shashlik.EventBus】.NET 事件总线,分布式事务最终一致性简介