目录

  • 前言
  • 1. 数据集
    • 1.1 下载数据集并处理
    • 1.2 将数据集分为source和target
    • 1.3 定义词汇类
    • 1.4 获取训练集
  • 2. 定义模型
    • 2.1 导入相关工具包
    • 2.2. 定义Encoder模型
    • 2.3.定义Decoder模型
    • 2.4.定义seq2seq模型
    • 2.5.定义loss
  • 3.训练函数
  • 4.预测函数
  • 5.测试
    • 5.1定义参数
    • 5.2.训练
    • 5.3.预测

前言

这两天学习了RNN,就想实现一下机器翻译,如果有什么问题,可以随时交流!

1. 数据集

本文的数据集来自李沐老师的《动手学深度学习》

数据集下载 : https://github.com/codefly-xtl/translation/tree/main/data

首先看看数据集啥样子:左边为英语,右边为法语

1.1 下载数据集并处理

在这一部分,我们首先读取出数据存放到 raw_data 中,再使用空格替换不间断字符,再小写。再对标点符号前添加空格,最后返回数据。

def process_data():# 判断标点前是否有空格def no_peace(char, pre_char):return char in set(',.!?') and pre_char != ' '# 加载数据with open('./data/fra.txt', encoding='utf-8') as f:raw_data = f.read()# 对数据进行处理:变小写,在标点符号前插入空格raw_data = raw_data.replace('\u202f', ' ').replace('\xa0', ' ').lower()out = [' ' + char if i > 0 and no_peace(char, raw_data[i - 1]) else char for i, char in enumerate(raw_data)]data = ''.join(out)return data

1.2 将数据集分为source和target

在这一部分,我们获取原文以及译文的句子,source存放原文,target存放译文。根据 \n 取出数据的每一行,再根据 \t 将数据分为原文以及译文,再分别对原文以及译文根据 空格 将句子按词分开组成列表。source例子如下:source = [[‘i’, ‘am’, ‘person’],[‘i’, ‘like’, ‘you’]]

def get_sentence(data):# 存储两种语言source = []target = []# 取出每一行for line in data.split('\n'):# 取出每一行的两个部分parts = line.split('\t')if len(parts) == 2:# 将英语放入sourcesource.append(parts[0].split(' '))# 将法语放入targettarget.append(parts[1].split(' '))# source 的样子如下:# source = [['i', 'am', 'person'],['i', 'like', 'you']]return source, target

1.3 定义词汇类

这个类的创建过程如下:

  1. 先从句子列表中读取到每一个单词,得到all_words
  2. 再按单词出现的频率排序得到word_preq
  3. 接下来就实现index_to_word以及word_to_index,这两个可以实现单个index和对应的word之间的互转
  4. 接下来实现to_index以及wo_word,这两个可以实现index列表和对应的word列表之间的互相转换,例如:index = [88,102,562,4850] 转为 word = [‘点’,‘个’,‘赞’,‘

    手把手教你使用pytorch实现双向LSTM机器翻译相关推荐

    1. 简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码)

       简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码) 雷锋网(公众号:雷锋网)按:本文作者甄冉冉,原载于作者个人博客,雷锋网已获授权. 最近在学pyTorch的实际应用 ...

    2. 深度学习实战(2)用Pytorch搭建双向LSTM

      用Pytorch搭建双向LSTM 应最近的课程实验要求,要做LSTM和GRU的实验效果对比.LSTM的使用和GRU十分相似,欢迎参考我的另外一篇介绍搭建双向GRU的Blog:https://blog. ...

    3. 手把手教你用Pytorch代码实现Transformer模型(超详细的代码解读)

      手把手教你用Pytorch代码实现Transformer模型(超详细代码解读)

    4. 关于Pytorch中双向LSTM的输出表示问题

      在使用pytorch的双向LSTM的过程中,我的大脑中蒙生出了一个疑问. 双向的lstm的outputs的最后一个状态与hidden,两者之间肯定有所联系, 但具体是什么样子的呢?会不会hidden状 ...

    5. 实例 :手把手教你用PyTorch快速准确地建立神经网络(附4个学习用例)

      作者:Shivam Bansal:翻译:陈之炎:校对:丁楠雅: 本文约5600字,建议阅读30+分钟. 本文中,我们将探讨PyTorch的全部内容.我们将不止学习理论,还包括编写4个不同的用例,看看P ...

    6. 基于pytorch构建双向LSTM(Bi-LSTM)文本情感分类实例(使用glove词向量)

      学长给的代码,感觉结构清晰,还是蛮不错的,想以后就照着这样的结构走好了,记录一下. 首先配置环境 matplotlib==3.4.2 numpy==1.20.3 pandas==1.3.0 sklea ...

    7. [深度学习] PyTorch 实现双向LSTM 情感分析

      一  前言 情感分析(Sentiment Analysis),也称为情感分类,属于自然语言处理(Natural Language Processing,NLP)领域的一个分支任务,随着互联网的发展而兴 ...

    8. 手把手教你用fairseq训练一个NMT机器翻译系统

      以构建英-中NMT为例,在linux上运行,fairseq版本为0.8.0 环境准备 Requirements: fairseq:pytorch包,包括许多网络结构,https://github.co ...

    9. 手把手教你洞悉 PyTorch 模型训练过程,彻底掌握 PyTorch 项目实战!(文末重金招聘导师)...

      (文末重金招募导师) 在CVPR 2020会议接收中,PyTorch 使用了405次,TensorFlow 使用了102次,PyTorch使用数是TensorFlow的近4倍. 自2019年开始,越来 ...

    最新文章

    1. 皮一皮:这年头,没看过火影还没法做医生了...
    2. CTFshow 文件包含 web88
    3. C#简易通讯录的开发试题
    4. 如何在 Windows 10 上安装 WSL 2
    5. jmeter file upload 变量_通达OA上传漏洞之变量覆盖分析
    6. 关于Bus的几个问题
    7. PAT乙级(1032 挖掘机技术哪家强 )
    8. 《高性能路由器 设计与实现》高性能路由器新型体系结构 小记
    9. PostgreSQL中UUID的完整指南
    10. Android线程和线程Handler基础一览
    11. Objective-C学习之旅(四)----内存管理2----retain点语法
    12. Android Framework内核之旅
    13. SSM仓库管理系统毕业设计-附源码061015
    14. WPF之Binding深入探讨
    15. stroj测试网络搭建
    16. 愤世嫉俗的程序员,在网上当起了“键盘侠”
    17. Numpy中使用astype函数将字符串格式数据转换为数值数据类型
    18. 【Proteus仿真】T6963C驱动PG12864示例(带中英文显示)
    19. cok无法连接验证服务器,黎明杀机在线服务无法连接解决方法一览
    20. module java.base does not “opens java.xxx“ to unnamed module @xxxx

    热门文章

    1. 世界杯之人间绝唱——性情中人黄健翔
    2. SCI文献采集方法:SCI,CSCI等各个期刊论文检索方法以及文献分类管理的方法
    3. [CVPR 2017] Matrix Tri-Factorization with Manifold Regularization for Zero-shot Learning
    4. mats在linux运行,N显卡显存测试mats367.38.1-支持GTX1080以下的显卡 Linux下运行,有点难度.zip...
    5. 嘉立创EDA-PCB产品设计操作概要
    6. 机械手-送料机械手设计及Solidworks运动仿真 4轴机械手,四轴机械手,4自由度机械手
    7. 医院对患者监护系统可行性分析
    8. android 仿京东抢购上下轮播消息
    9. http websocket共用同个端口
    10. Linux的快捷键和主要命令