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

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

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

代码仓库: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.lryc.cn/news/70205.html

相关文章:

  • 随身WIFI折腾日记(四)---拓展USB接口读取U盘内容
  • 【C++初阶】类与对象(中)之取地址及const取地址操作符重载(了解即可)
  • 代驾公司如何管理司机
  • 面了一个5年经验的测试工程师,自动化都不会也敢喊了16k,我也是醉了····
  • ChatGPT:你真的了解网络安全吗?浅谈攻击防御进行时之网络安全新定义
  • LeetCode_DFS_困难_1377.T 秒后青蛙的位置
  • 第四十九天学习记录:C语言进阶:结构体
  • LeeCode [N字形变换]算法解析
  • CPU性能提升:流水线
  • C语言指针初级
  • C++的历史
  • 保姆级别!!!--全网绝对教你会!!教你如何使用MQTTFX连接阿里云平台中的设备----下期告诉你如何创建!
  • Unexpected token ‘‘‘, “‘{“type“:““... is not valid JSON
  • 关于C语言的杂记5
  • YOLOv5 vs YOLOv6 vs YOLOv7目标检测模型速度和准确度的性能比较——深入研究
  • 如何增加网站权重?有效提高网站权重的技巧方法
  • 路径规划 | 图解快速随机扩展树RRT算法(附ROS C++/Python/Matlab仿真)
  • 【Stable Diffusion WebUI】一篇文章教你如何安装和使用Stable Diffusion WebUI
  • Python篇——数据结构与算法(第二部分)
  • 人工智能之读懂CNN卷积神经网络
  • go手写Redis(1)之协议说明
  • Hadoop/HbBase/Hive/HDFS/MapReduce都是什么?
  • 羽毛球中级提高班课后总结
  • 多维时序预测 | Matlab基于最小二乘支持向量机LSSVM多维时间序列预测,LSSVM多变量时间序列预测
  • KDZK-F水轮发电机转子测试仪
  • I2C通信协议原理和MPU6050
  • 3.5 RDD持久化机制
  • Nginx(四)
  • 【fps系统重构】-观察cpu、memroy、io -iostat
  • iptables 添加,删除,查看,修改,及docker运行时修改端口