【王树森】RNN模型与NLP应用(7/9):机器翻译与Seq2Seq模型(个人向笔记)

news2024/9/23 19:22:40

Machine Translation Data

  • 做机器学习任务的第一步都是处理数据,我们首先需要准备机器翻译的数据。
  • 由于我们是学习用途,因此拿一个小规模数据集即可:http://www.manythings.org/anki/
  • 下面的数据集中:一个英语句子对应多个德语句子,如果翻译的时候能命中其中的一个则算作完全正确。
    在这里插入图片描述

1. Preprocessing

  • 将大写全部转化为小写
  • 去掉标点符号
    在这里插入图片描述

2. Tokenization & Build Dictionary

  • 我们分别需要两个Tokenizer,一个英语Tokenizer和一个德语Tokenizer
  • 英语的text最后经过英语Tokenizer转化为 input_tokens
  • 德语的text经过德语Tokenizer转化为target_tokens
  • 在Tokenization后需要建立两个字典,一个英语字典和一个德语字典
  • Tokenization既可以是char-level的,也可以是word-level的
    在这里插入图片描述
  • 本节课使用的是char-level的Tokenization
  • 但是实际的机器翻译都是用word-level的,因为它们的数据集足够大
    在这里插入图片描述
    Question:为什么要用两个不同的Tokenizer?
    答案是在char-level中,语言有不同的char,如下图所示:英语和德语的char总数并不相同,希腊语也类似:
    在这里插入图片描述
    而在word-level的情况下则更需要两个了,原因是:①词汇完全不一样。②分词方法不同。
  • 下面是经过Tokenizaion后的字典:其中 \t 是起始符,\n是终止符。选用其他的字符也行,只要不和已有的冲突即可。
    在这里插入图片描述

3. One-Hot Encoding

  • 经过上面的Tokenize后,我们可以将一段text通过字典转化为一个个数
    在这里插入图片描述在这里插入图片描述
  • 接下来我们把每一个数字用一个One-Hot向量表示如下:
    在这里插入图片描述

Training the Seq2Seq Model

  • LSTM Encode用于提取输入英文文本的信息,它将这句话的最后状态信息作为输入传到LSTM Decoder
  • LSTM Decoder用于生成德语,这其实就是上节课讲到的文本生成器,只不过区别在于这里的文本生成器的初始向量为LSTM Encoder,接受了输入的英语文本的特征作为初始状态,Decoder通过被输入的这个状态来指导这句英语是 go away
  • LSTM Decoder作为一个文本翻译器,那么它需要每次接受一个输入,然后输出对下一个字符的预测。
  • LSTM Decoder第一个输入必须是起始符,这也是为什么需要定义一个起始符的原因
  • 起始符后面预测的字母为m,我们对m作One-Hot Encoding,作为标签y和预测的概率p一起传入交叉熵损失函数,我们希望p尽量接近y,所以损失越小越好。这样我们就可以利用反向传播计算梯度,梯度会传到Decoder,然后顺着Decoder传到Encoder,利用梯度下降即可更新Decoder和Encoder的参数。
  • 我们不断重复这个过程,直到这句德语被预测完

在这里插入图片描述

Seq2Seq Model in Keras

最后对Dense作反向传播的时候可以顺着这张图的链路一直传到Encoder和Decoder
在这里插入图片描述


Inference

  • 在预测时,我们用LSTM Encoder把go away转化为状态向量指导Decoder进行翻译。
    在这里插入图片描述

  • 而Decoder则是从 \t(起始符)开始对整句德语进行预测,过程和上节课讲到的文本生成器一致,直到遇到终止符 \n。
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述


Summary

在这里插入图片描述


How to Improve

1. Bi-LSTM instead of LSTM(Encoder only!)

  • Encoder对一个句子只取最后的那个状态向量,最后的状态向量包含句子的所有信息
  • 如果句子很长的话就会导致遗忘,导致传入的英语文本信息不全导致遗漏
  • 可以想到用双向LSTM来增加LSTM的记忆力
  • 注意Decoder不能用双向,由于文本生成任务的原因,Decoder只能单向
    在这里插入图片描述

2. Word-level Tokenization

  • 本节课用的时char-level比较方便,但是会导致一个句子比较长,容易导致LSTM的遗忘
  • 如果用word-level的话,token的长度会缩短四到五倍,比较容易避免遗忘
  • 但是这样的话需要一个额外的Embedding层,这样就需要大量的数据来对Embedding层的参数进行训练
  • 若训练数据不够而Embedding层的参数又过多就会导致过拟合,这样就还可能需要额外的预训练
    在这里插入图片描述

3. Multi-Task Learning

  • 在任务里多加一个训练从英语到英语的任务,这样在数据量不变的情况下,可训练的数据就多了一倍,这样Encoder会被训练得更好
    在这里插入图片描述
  • 还可以增加更多的任务,比如训练英语到其他语言的翻译,虽然增加了更多Decoder,而且德语Decoder没有改进,但是Encoder只有一个,这样可以更好的训练Encoder。翻译效果还是会提升。
    在这里插入图片描述
    在这里插入图片描述

4. Attention

下节课!

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

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

相关文章

Spring MVC执行流程

整体流程: 用户向前端控制器发送请求前端控制器接收到请求后调用处理映射器处理器映射器找到具体的处理器,生成处理器对象以及处理器拦截器,再一起返回给前端控制器然后前端控制器调用处理器适配器处理器适配器调用具体的处理器处理器适配器…

element plus el-upload上传组件,自动上传,记录解决:本地报404,文件找不到问题

问题&#xff1a; 解决问题&#xff1a; 重点是&#xff1a;加入action"#"和:http-request"uploadHttpRequest" <el-uploadv-loading"isLoading"ref"upload"v-model"fileList":multiple"multiple"action&quo…

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(1)

前言中曾提到&#xff1a;本章重点介绍PCI Express总线的数据链路层与物理层。 PCIe总线的数据链路层处于事务层和物理层之间&#xff0c;主要功能是保证来自事务层的TLP在PCIe链路中的正确传递&#xff0c;为此数据链路层定义了一系列数据链路层报文&#xff0c;即DLLP。数据链…

AI实践与学习8-AI Agent Workflow助力解题和验证答案置信度

背景 之前在试着提高解题正确率&#xff0c;目标100%&#xff0c;发现外部知识不足仅依靠大模型的话比较困难。而试题人工生产成本巨大。 本质因为大模型生成内容会有幻觉特点&#xff0c;也就是说解答的试题正确性不太好评判&#xff0c;直接解答试题生产场景不太可控。 后…

市场纷乱中,沃尔沃坚守长期主义之道,用“P1+P4”解决用户痛点3A品质,插混王者——沃尔沃插混让性能成为插混必要条件

“造车就像西天取经&#xff0c;明确的方向、实现目标的能力&#xff0c;内心的坚持缺一不可”,本届成都国际车展上&#xff0c;来自沃尔沃汽车集团全球高级副总裁袁小林的一句话可谓是振聋发聩&#xff0c;向沉迷玩转“流量密码”的车企&#xff0c;向因各种噱头而迷茫的用户发…

RISC-V全志D1sCVBS套件

此开发板的任何问题都可以在我们的论坛交流讨论 https://forums.100ask.net/c/10-category/75-category/75 硬件简述 D1s主板 主板如下&#xff1a; D1s板载功能 板载功能有 XR829 WIFI蓝牙模组芯片&#xff0c;Bluetooth支持标准蓝牙与 低功耗蓝牙&#xff0c;Wifi 支持…

论被动元数据的弊端,以及主动元数据的技术优势

元数据是企业数据生态系统中不可或缺的组成部分&#xff0c;核心在于为数据本身提供完整的描述性信息&#xff0c;包括数据来源、数据结构、语义含义、物理位置、所有权归属、创建时间、流转路径等关键要素&#xff0c;是企业理解、开发、消费和应用数据的基石。 元数据管理&a…

毕设创新点之一:基于GD32/STM32的AI模型部署-github库

将AI模型成功部署到边缘MCU中&#xff0c;常常受限于MCU的计算峰值和内存峰值的限制&#xff0c;部署较为困难&#xff0c;目前有一个将AI算法MCU部署到GD32系列MCU中的宝藏的开源库。 项目网址&#xff1a;HomiKetalys/gd32ai-modelzoo: Provide deployable deep learning mo…

springweb获取请求数据、spring中拦截器

SpringWeb获取请求数据 springWeb支持多种类型的请求参数进行封装 1、使用HttpServletRequest对象接收 PostMapping(path "/login")//post请求//spring自动注入public String login(HttpServletRequest request){ System.out.println(request.getParameter("…

若依脚手架 创建一个系统 his医院信息管理系统

一、创建his-medicine模块 0) 在创建好的若依后端项目中创建一个maven模块his-medicine 1&#xff09;his模块的整合步骤 ①&#xff09;his的依赖 这个是若依项目所有系统模块都需要添加的依赖&#xff0c;domain和controller继承的类就在这里面。 <!-- 通用工具--><…

【位置编码】【Positional Encoding】直观理解位置编码!把位置编码想象成秒针!

【位置编码】【Positional Encoding】直观理解位置编码&#xff01;把位置编码想象成秒针&#xff01; 你们有没有好奇过为啥位置编码非得长成这样&#xff1a; P E ( p o s , 2 i ) s i n ( p o s 1000 0 2 i / d m o d e l ) P E ( p o s , 2 i 1 ) c o s ( p o s 1000 …

基于yolov8的手势识别0-9检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的手势识别0-9检测系统是一个利用深度学习技术&#xff0c;特别是YOLOv8算法&#xff0c;实现对手势&#xff08;0至9的数字手势&#xff09;进行快速、准确识别的系统。YOLOv8以其高效的性能和准确性&#xff0c;在实时性要求较高的手势识别领域表现出…

ant-design-vue v-decorator用法

笔者一直在做后端&#xff0c;最近公司要求&#xff0c;帮助前端同时写一下前端页面。这里也记录下一些新学的知识&#xff0c;帮助大家避坑 在ant-design中&#xff0c;v-decorator可以实现双向绑定与表单验证。即如果你使用v-decorator 你可以不用使用v-model。 <a-form…

[000-01-015].第03节:SpringBoot中数据源的自动配置

我的后端学习大纲 SpringBoot学习大纲 1.数据访问流程&#xff1a; 2.搭建数据库开发场景&#xff1a; 2.1.导入JDBC场景&#xff1a; 2.2.分析自动导入的内容&#xff1a; 2.3.分析为何没有导入数据库驱动&#xff1a; 1.因为人家也不知道我要用啥数据库&#xff0c;所以在自…

92. UE5 RPG 使用C++创建GE实现灼烧的负面效果

在正常游戏里&#xff0c;有些伤害技能会携带一些负面效果&#xff0c;比如火焰伤害的技能会携带燃烧效果&#xff0c;敌人在受到伤害后&#xff0c;会接受一个燃烧的效果&#xff0c;燃烧效果会在敌人身上持续一段时间&#xff0c;并且持续受到火焰灼烧。 我们将在这一篇文章里…

PTA L1-028 判断素数

L1-028 判断素数&#xff08;10分&#xff09; 本题的目标很简单&#xff0c;就是判断一个给定的正整数是否素数。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;≤ 10&#xff09;&#xff0c;随后N行&#xff0c;每行给出一个小于的需要判断的正整数。 …

vscode里调试python3.6的配置

vscode里需要降级如下插件&#xff1a; ● Python v2022.8.1 ● Pylance v2022.6.30 ● Python Debugger v2023.1.XXX (pre-release version | debugpy v1.5.1)

vue-echarts :知识图谱可视化,动态更新 动态赋值series,更新options

<template><div style="display: flex;align-items: center;justify-content: space-between;"><

Java语言程序设计基础篇_编程练习题*17.10 (分割文件)

目录 题目&#xff1a;*17.10 (分割文件) 代码示例 输出结果 题目&#xff1a;*17.10 (分割文件) 假设希望在 CD-R 上备份一个大文件(例如&#xff0c;一个 10GB 的 AVI文件)。可以将该文件分割为几个小一些的片段&#xff0c;然后独立备份这些小片段。编写一个工具程序&am…

Taro 微信小程序 分页上拉加载

需求&#xff1a; 页面表头及上面部分都固定&#xff0c;表格数据部分可以滚动&#xff0c;支持分页&#xff0c;上拉加载下一页数据 如果是最后一页需判断一下&#xff0c;上拉不再继续加载数据 效果&#xff1a; template&#xff1a; <scroll-view class"db-det…