【自然语言处理】 - 作业2: seq2seq模型机器翻译

news2025/1/17 4:39:32

课程链接: 清华大学驭风计划

代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com)


驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算机语言(刘知远教授) 以及数据结构与算法(邓俊辉教授)。本人是综合成绩第一名,除了数据结构与算法其他单科均为第一名。代码和报告均为本人自己实现,由于篇幅限制,只展示任务布置以及关键代码,如果需要报告或者代码可以私聊博主



自然语言处理部分授课老师为刘知远教授,主要通过从统计方法入门,embedding,预训练模型,知识图谱,关系抽取,文本生成以及信息检索等不同下游任务入门自然语言处理


有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~



任务介绍

seq2seq是神经机器翻译的主流框架,如今的商用机器翻译系统大多都基于其构建,在本案例中,我们将使用由NIST提供的中英文本数据训练一个简单的中英翻译系统,在实践中学习seq2seq的具体细节,以及了解机器翻译的基本技术。

seq2seq模型

从根本上讲,机器翻译需要将输入序列(源语言中的单词)映射到输出序列(目标语言中的单词)。正如我们在课堂上讨论的那样,递归神经网络(RNN)可有效处理此类顺序数据。机器翻译中的一个重要难题是输入和输出序列之间没有一对一的对应关系。即,序列通常具有不同的长度,并且单词对应可以是不平凡的(例如,彼此直接翻译的单词可能不会以相同的顺序出现)。

为了解决这个问题,我们将使用一种更灵活的架构,称为seq2seq模型。该模型由编码器和解码器两部分组成,它们都是RNN。编码器将源语言中的单词序列作为输入,并输出RNN层的最终隐藏状态。解码器与之类似,除了它还具有一个附加的全连接层(带有softmax激活),用于定义翻译中下一个单词的概率分布。以此方式,解码器本质上用作目标语言的神经语言模型。关键区别在于,解码器将编码器的输出用作其初始隐藏状态,而不是零向量。

数据和代码

本案例使用了一个小规模的中英平行语料数据,并提供了一个简单的seq2seq模型实现,包括数据的预处理、模型的训练、以及简单的评测。

评分要求

分数由两部分组成,各占50%。第一部分得分为对于简单seq2seq模型的改进,并撰写实验报告,改进方式多样,下一小节会给出一些可能的改进方向。第二分部得分为测试数据的评测结果,我们将给出一个中文测试数据集(test.txt),其中每一行为一句中文文本,需要同学提交模型做出的对应翻译结果,助教将对于大家的提交结果统一机器评测,并给出分数。请 以附件形式提交实验报告

改进方向

初级改进:

  • 将RNN模型替换成GRU或者LSTM
  • 使用双向的encoder获得更好的源语言表示
  • 对于现有超参数进行调优,这里建议划分出一个开发集,在开发集上进行grid search,并且在报告中汇报开发集结果
  • 引入更多的训练语料(如果尝试复杂模型,更多的训练数据将非常关键)

进阶改进:

  • 使用注意力机制(注意力机制是一个很重要的NMT技术,建议大家优先进行这方面的尝试,具体有许多种变体,可以参考这个综述)
  • 在Encoder部分,使用了字级别的中文输入,可以考虑加入分词的结果,并且将Encoder的词向量替换为预训练过的词向量,获得更好的性能

复杂改进:

  • 使用beam search的技术来帮助更好的解码,对于beam-width进行调优
  • 将RNN替换为Transformer模型,以及最新的改进变体


报告

代码

encoder的实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zYj7uK5h-1684725445394)(image/hw2/1684724912658.png)]

decoder的实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ELfCeV3H-1684725445395)(image/hw2/1684724958327.png)]



结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2PN2Cbr8-1684725445396)(image/hw2/1684725032710.png)]

上面的是对比的不同比例的teacher force的对比,其中teacher force的机制是在ground truth 和 predict中随机切换,这个比例如果是1则全为ground truth则,模型的泛化性就会受到影响,但是如果是0的话就是我们平时最普通的训练,都用predict去训练,这样的话收敛的慢,所以一般来说这个比例一半是0.5左右,具体是一个超参数需要去微调。

下面的图是attention层在每次的输出,可以看到原始的seq2seq的模型是由整个encoder 的输出作为decoder的输入,而缺少了局部的信息。加入了attention的机制后,就可以解决这个问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python地理空间分析快速入门

地理空间数据描述了地球表面上的任何物体或特征。 常见的例子包括: 品牌应该在哪里开设下一家门店?天气如何影响区域销售?乘车的最佳路线是什么?哪个地区受飓风影响最严重?冰盖融化与碳排放有何关系?哪些地…

chatgpt赋能Python-python_dog

Python Dog: 一个好玩的机器人狗 Python Dog是一个由Python编程语言编写的机器人狗。它是一个有趣且有用的工具,可以帮助您学习Python编程,并了解如何通过Python编写和控制机器人。在本文中,我们将介绍Python Dog的功能,并讨论为…

Leetcode每日一题——“用栈实现队列”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是用栈实现队列,这和小雅兰的上一篇博客“用队列实现栈”好像有点点关系噢,事实上,也确实是这样的,下面,让我们进入Leetcode的世界吧!&…

RK3399平台开发系列讲解(网络篇)Linux 发送网络包流程

🚀返回专栏总目录 文章目录 一、发送网络包流程图二、发送网络包步骤沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将详细介绍Linux网络包发包流程。 一、发送网络包流程图 二、发送网络包步骤 VFS 层:write 系统调用找到 struct file,根据里面的 file_oper…

chatgpt赋能Python-python_end___t_

Python中的end\t’介绍 Python是一种非常流行的编程语言,它在各种领域中得到广泛应用。与许多其他编程语言不同的是,Python中提供了一种方便的 way来创建格式化字符串。一个常见的方法是使用end‘\t’。 在本文中,我将介绍Python中的end‘\…

常见 Web 安全攻防总结

Web 安全地对于 Web 从业人员来说是一个非常重要的课题,所以在这里总结一下 Web 相关的安全攻防知识,希望以后不要再踩雷,也希望对看到这篇文章的同学有所帮助。今天这边文章主要的内容就是分析几种常见的攻击的类型以及防御的方法。 也许你对…

QTP10.0安装及问题

1、如果没有特殊要求,安装都是直接选下一步 2、然后出现问题就是 提示脚本调试器没有下载成功: 看提示就是缺了一个东西,另外下载安装就可以 百度网盘 请输入提取码 链接:https://pan.baidu.com/s/195hEKOPbpp37okysutcqEQ 提取…

sql查询指定数据的函数(等于、and、or、in、find_in_set、like)

sql查询指定数据的函数(等于、and、or、in、find_in_set、like): 1.查询指定单字段的指定数据: 举例:查询user表中address字段数据等于aa的数据; select * from user where address aa 2.查询指定多字段…

【Linux--基础IO(动静态库)】】

动态库和静态库 静态库与动态库 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候不再需要静态库。 动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序…

对抗物联网网络威胁

物联网 (IoT) 技术的快速发展以多种方式改变了世界。从家庭自动化到工业控制系统,物联网已成为我们日常生活中不可或缺的一部分。 然而,与任何新技术一样,随之而来的是重大的网络安全问题。在这篇博文中,我们将探讨物联网网络安全…

Linux网络编程—Day9

今天!我们来学习新的章节——I/O。 Linux提供了很多高级的I/O函数。它们并不像Linux基础I/O函数 (比如open和read)那么常用,但在特定的条件下却表现出优秀的性能。我们学习下和网络编程相关的几个,这些函数大致分为三…

二、注册中心与服务调用-Nacos

文章目录 二、注册中心与服务调用1、Nacos概述1.1 什么是Nacos1.2 常见的注册中心1.3 Nacos结构图1.4 Nacos下载和安装 2、注册服务2.1 Nacos注册service-hosp 二、注册中心与服务调用 目前在医院列表中需要医院的信息和等级信息,而两段信息属于不同的的模块,service-hosp和se…

【自然语言处理】- 作业4: 预训练语言模型BERT实现与应用

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

Leetcode—回溯算法

​ 回溯算法的本质 是穷举,穷举所有可能,然后选出合适的答案,一般用于解决以下类型的问题: 组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题&#xf…

Day4——数据库基础1

Day4——数据库基础 数据库基础--基于phpstudy自带的MySQL数据库(下载了PHPstudy后就无需下载额外的MySQL) 一、数据库概念1、为什么要学习数据库?2、什么是数据库?3、数据库的访问方式4、数据管理技术经历的三个阶段5、关系型数据…

Three.js深度冲突(模型闪烁)与解决方案

Mesh面重合渲染测试 下面代码创建两个重合的矩形平面Mesh,通过浏览器预览,当你旋转三维场景的时候,你会发现模型渲染的时候产生闪烁。 这种现象,主要是两个Mesh重合,电脑GPU分不清谁在前谁在后,这种现象&a…

Debug | Litemall项目上线

文章目录 1. litemall资源1.1 Litemall项目开源网址1.2 Litemall网盘地址 2. 项目上线2.1 项目框架2.2 项目配置2.3 依赖工具安装2.4 数据库导入2.5 启动小商城和管理后台的后台服务2.6 启动管理后台的前台服务 3项目展示: 1. litemall资源 1.1 Litemall项目开源网…

webpack 自定义loader

文章目录 项目目录搭建项目my-raw-loader参数schema-utils tpl-loader 项目目录 让我们实现一些简易的loader,从大量的简易loader的实现过程中学习编写如何 webpack loader ├── loaders # loader目录 ├── src …

数据库sql语句-----游标和存储过程

关键词: create procedure xxx()as.......go 查询: exec ... 从例子中感悟一下: create table cartoon( linenum int, name varchar(50) not null, line varchar(100) not null )insert into cartoon values(1,灰太…

基于SpringBoot+Vue+MybatisPlus的智慧校园系统

智慧校园系统 1. 项目简介2. 项目模块3. 技术栈4. 软件环境4.1 安装数据库4.2 安装数据库客户端Navicat工具4.4 安装IDEA4.4 安装Maven 5. 系统页面5.1 首页登录页5.2 系统功能模块5.3 Swagger2接口文档查阅5.4 运行截图 6. 源代码下载 1. 项目简介 智慧校园管理系统是一个基于…