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

RNN模型与NLP应用——(7/9)机器翻译与Seq2Seq模型

声明:

       本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】,结合自身的理解所作,旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。

材料来源:【Shusenwang】的视频课程【RNN模型及NLP应用】

视频链接:RNN模型与NLP应用(7/9):机器翻译与Seq2Seq模型_哔哩哔哩_bilibili


一、学习目标

1.了解什么是Seq2Seq模型

2.掌握Sequence to Sequence模型实现的底层逻辑

3.学会提升Sequence to Sequence模型的几种方法


二、Sequence to Sequence模型

这是一个多对多的模型


【样例介绍】我们要搭建一个将英语文本翻译为德语的模型


(1)处理数据

大家可以在这个网站上找数据来训练

预处理:

将文本中的标点符号删掉,将大写转换为小写等操作

tokenazation:

要用两个不同的tokenizer,因为不同的语言有着不同的字母表,两种语言的字母表通常是不同的,此外不同的语言分词方法不同,所以我们应该构建两种不同的字母表。

char-level可以将文本分割成以一个一个的字符

word-level可以将文本分割成一个一个单词

实际上我们通常会用word-level【这里我们选用char-level】因为实际的数据集通常比较大,但我们这里数据集没有那么大,因此使用char-level

左边的字典是英语字典,右边是德语字典

用字母表示出英语文本序列和德语文本序列

英语:

德语:


(2)搭建模型

接下来,我们搭建一个Sequence to Sequence模型。

Sequence to Sequence模型由编码器和解码器两个部分构成

编码器:

       Encoder是一个LSTM或者其他RNN模型,用来从输入的英语语句中提取特征,Encoder最后一个状态就是从输入的句子中提取的特征,包含这句话的信息。其余的状态信息没有用都被丢掉了。Encoder的输出就是最后一个状态向量h 和传输带c

解码器:

       Decoder的初始状态是Ecoder的最后一个状态,通过Encoder最后一个状态,Decoder得知输入信息是“go away”。

现在Decoder开始输出德语句子,Decoder的第一个输入必须是起始符(如“\t”)

【详细过程】 第一个字母是m,则Decoder会将m做noe hot encoding然后作为标签y,Decoder会输出一个概率分布记作p,用标签y和p的交叉熵作为损失函数,所以损失函数越小越好。有了损失函数,就可以反向传播计算梯度,梯度传到Decoder,再由Decoder传到Encoder,然后用梯度下降来调整Encoder和Decoder的参数,从而使得损失函数减小。

然后输入变为两个字符“\tm”,根据上述过程以此类推,在推出下一个字母

然后输入变为三个字符“...”

.......

不断重复这个过程,直到这句德语的最后一个字符,当输出维停止字符"\n"的话,则停止。 

以下为具体步骤:

(3)推导

       Encoder将英文信息通过RNN模型,最终输出为状态向量h0和传输带c0,h0和c0中存储着听英文文本的特征,被作为Decoder的初始状态向量,这样以来Decoder就知道了输入文本是“go away”。

       当第一个输入“\t”输入到Decoder中时,Decoder就会更新状态和传输带,得到新的状态向量h1和新的传输带C1,并预测下一个字母“m”。并将其记录下来。

不断重复这个过程,就可以完整的输出翻译结果。

三、总结

        在本例中,一段英文文本会输入进Encoder,每输入一个字母,RNN就会记录当前字符的信息,直到输完最后一个字符,Encoder就会记录下整个文本的信息存储在状态向量hm中。

最后一个hm会作为Decoder的初始化状态进入Decoder,这样Decoder就会记住输入的英文句子了

接下来的步骤如下图:

四、思考:我们该如何改进Sequence to Sequence模型

(1)将Encoder由单向LSTM改进为双向LSTM

       由于Encoder从头开始读取英语句子,那么Encoder有可能会遗忘并遗漏一开始输入的信息,

那么我们可以将Encoder改进为双向RNN,这样就可以使Encoder更好的记住整个英语文本。

【注意】Decoder必须是单向LSTM,因为decoder相当于一个文本生成器,只能从头按顺序输出

(2)可以用word-level替代char-level  

         因为word-level处理后的序列更短,可以是LSTM更容易记住英语句子。但是由于单词维度为10000很高,所以需要embedding层将其映射为低维词向量才可以。并且要求拥有足够大的数据集才可以。

(3)采取多任务训练

       我们可以同时采取英语翻译英语本身,英语翻译汉语,英语翻译其他语言这样的多任务训练方法,来提升英语翻译德语的效果。一是因为数据集变大了,导致训练效果变的更好了;而是因为即使训练的是其他语言,但仍会对英语翻译德语的效果有所提升。

(4)注意力机制——这种方法效果最好(我们下节课再学习)

相关文章:

RNN模型与NLP应用——(7/9)机器翻译与Seq2Seq模型

声明: 本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】,结合自身的理解所作,旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。 材料来源:【Shusenwang】的视频课程【RNN模型及NLP应用…...

使用YoloV5和Mediapipe实现——上课玩手机检测(附完整源码)

目录 效果展示 应用场景举例 1. 课堂或考试监控(看到这个学生党还会爱我吗) 2. 驾驶安全监控(防止开车玩手机) 3. 企业办公管理(防止工作时间玩手机) 4. 监狱、戒毒所、特殊场所安保 5. 家长监管&am…...

XT-912在热交换站的应用

热网监控需求 随着国民经济的不断进步和人民生活水平日益提高,社会对环境的要求越来越高。近年来国家大力提倡城镇集中供热,改变原来各单位、各片区自己供热、单独建立锅炉房给城市带来的污染,由城市外围的一个或者多个热源厂提供热源&#…...

语文常识推翻百年“R完备、封闭”论

​语文常识推翻百年“R完备、封闭”论 黄小宁 李四光:迷信权威等于扼杀智慧。语文常识表明从西方传进来的数学存在重大错误:将无穷多各异数轴误为同一轴。 复平面z各点z的对应点zk的全体是zk平面。z面平移变换为zk(k是非1正实常数&#xf…...

解决backtrader框架下日志ValueError: I/O operation on closed file.报错(jupyternotebook)

解决办法: 禁用 IPython 内核的日志重定向 在 IPython 环境下,内核可能会对日志进行重定向,从而引发问题。你可以尝试在运行代码之前禁用 IPython 的日志重定向: import logging# 禁用IPython内核的日志重定向 logging.getLogg…...

基于Docker容器部署DeepSeek-R1-Distill-Qwen-7B

首先打开魔搭社区,然后搜索DeepSeek-R1-Distill-Qwen-7B,进入详情页 官方推荐使用vllm来启动,但是手动搭建vllm环境容易出各种问题,我们这里直接找一个vllm的Docker镜像 一、拉取镜像 docker pull vllm/vllm-openai 如果拉取不…...

UART双向通信实现(序列机)

前言 UART(通用异步收发传输器)是一种串行通信协议,用于在电子设备之间进行数据传输。RS232是UART协议的一种常见实现标准,广泛应用于计算机和外围设备之间的通信。它定义了串行数据的传输格式和电气特性,以确…...

CentOS 7 全流程部署Magic-PDF数据清洗工具(附GPU加速方案)

CentOS 7 全流程部署Magic-PDF数据清洗工具(附GPU加速方案) 一、环境准备与方案选型 1.1 硬件要求 配置项最低要求推荐配置CPU4核8核内存8GB16GB存储50GBSSD/NVMeGPU可选NVIDIA T4 1.2 系统环境检查 # 查看系统版本 cat /etc/redhat-release# 检查G…...

2.1 路径问题专题:LeetCode 62. 不同路径

动态规划解决LeetCode 62题:不同路径问题 1. 题目链接 LeetCode 62. 不同路径 2. 题目描述 一个机器人位于一个 m x n 网格的左上角(起点标记为“Start”)。机器人每次只能向右或向下移动一步。机器人试图达到网格的右下角(标…...

“*(单星号)”和“**(双星号)”在Python中的灵活运用

在Python中,*和**是两个重要的运算符,它们具有不同的用途。 一、*(单星号) 1、*(单星号)作为乘法运算符 2、*(单星号) 用于解包序列或可迭代对象 ‌ 用于解包序列或可迭代对象&…...

LabVIEW多线程

在 LabVIEW 中,多线程编程是提升程序执行效率的关键手段,尤其是在需要并行处理数据采集、控制执行和用户界面交互的场景下。LabVIEW 本身是基于数据流(Dataflow)的编程语言,天然支持多线程,但要高效利用多线…...

ctfshow _萌新 萌新_密码篇

萌新_密码1 先对密文进行 Hex 解码,得到了 S1lkZjBhM2ViZDVjNGRjMTYwLUV7ZmI2M2VlMDI5OGI4ZjRkOH0 再进行 base64 解码,得到了 KYdf0a3ebd5c4dc160-E{fb63ee0298b8f4d8} 再进行栅栏解码,得到了 flag KEY{dffb06a33eeeb0d259c84bd8cf146d08…...

Transformer架构详解:从Encoder到Decoder的完整旅程

引言:从Self-Attention到完整架构 在上一篇文章中,我们深入剖析了Self-Attention机制的核心原理。然而,Transformer的魅力远不止于此——其Encoder-Decoder架构通过巧妙的模块化设计,实现了从机器翻译到文本生成的广泛能力。本文…...

蓝桥杯2024省赛PythonB组——日期问题

题目链接: https://www.lanqiao.cn/problems/103/learning/?page1&first_category_id1&name%E6%97%A5%E6%9C%9F%E9%97%AE%E9%A2%98 题目内容: 解题思路 import os import sys# 请在此输入您的代码 from datetime import datetime date_str input().str…...

带头结点 的单链表插入方法(头插法与尾插法)

带头结点的单链表插入方法(头插法与尾插法) 在单链表的操作中,插入是最常见的操作之一,本文介绍 带头结点的单链表 如何实现 后插法 和 前插法(包括 插入法 和 后插数据交换法),并提供完整的 C …...

Opencv之dilib库:表情识别

一、简介 在计算机视觉领域,表情识别是一个既有趣又具有挑战性的任务。它在人机交互、情感分析、安防监控等众多领域都有着广泛的应用前景。本文将详细介绍如何使用 Python 中的 OpenCV 库和 Dlib 库来实现一个简单的实时表情识别系统。 二、实现原理 表情识别系统…...

基于web的生产过程执行管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着世界经济信息化、全球化的到来和电子商务的飞速发展,推动了很多行业的改革。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、畅通、高效的线上管理系统。当前的生产过程执行管理存在管理效率…...

C++:继承+菱形虚拟继承的一箭双雕

目录 一、继承概念与定义 1.1、什么是继承? 1.2、继承定义 二、继承关系与访问限定符 2.1、继承方式 三、基类与派生类对象的赋值转换 3.1、向上转型 3.2、对象切片 四、继承中的作用域 4.1、隐藏 五、派生类中的成员函数 5.1、构造与析构 六、继承与友…...

网络:华为数通HCIA学习:静态路由基础

文章目录 前言静态路由基础静态路由应用场景 静态路由配置静态路由在串行网络的配置静态路由在以太网中的配置 负载分担配置验证 路由备份(浮动静态路由)配置验证 缺省路由配置验证 总结 华为HCIA 基础实验-静态路由 & eNSP静态路由 基础…...

CFResNet鸟类识别:原网络基础上改进算法

​本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊​ 先放一张ResNet50模型的鸟类识别结果图 一 ResNetSE-NetBN import matplotlib.pyplot as plt import tensorflow as tf import warnings as w w.filterwarnings(ignore) # 支持中文 plt.rcP…...

C++ | 文件读写(ofstream/ifstream/fstream)

一、C文件操作核心类 C标准库通过<fstream>提供了强大的文件操作支持&#xff0c;主要包含三个关键类&#xff1a; 类名描述典型用途ofstream输出文件流&#xff08;Output File Stream&#xff09;文件写入操作ifstream输入文件流&#xff08;Input File Stream&#…...

11_常用函数

文章目录 一、概述二、字符函数2.1、获取字符串所占字节数2.2、获取字符个数2.3、拼接字符串2.4、大小写转换2.5、获取子串2.6、获取子串第一次出现的索引2.7、去除字符串前后子字符串2.7.1、去掉左侧空格2.7.2、去掉右侧空格 2.8、左右填充2.9、字符串替换 三、数学函数3.1、四…...

Android穿山甲banner广告穿插到项目的banner中

Android穿山甲banner广告穿插到项目的banner中 项目中的banner需要用第三库的banner&#xff0c;目前是在下面的banner库测试可以 implementation io.github.youth5201314:banner:2.2.2用自己写的banner会显示不了穿山甲banner的&#xff0c;我也不知道为什么。 给下banner加…...

Ubuntu 20.04 出现问号图标且无法联网 修复

在 Ubuntu 中遇到网络连接问题&#xff08;如出现问号图标且无法联网&#xff09;&#xff0c;可以通过以下命令尝试重启网络服务&#xff1a; 1. 推荐先修改DNS 编辑 -> 虚拟机网络编辑器-> VMnet8 ->NAT 设置 -> DNS 设置 -> 设置DNS 服务器 DNS填什么 取决…...

基于Contiue来阅读open-r1中的GRPO训练代码

原创 快乐王子HP 快乐王子AI说 2025年04月03日 23:54 广东 前面安装了vscode[1]同时也安装了Coninue的相关插件[2]&#xff0c;现在想用它们来阅读一下open-r1项目的代码[3]。 首先&#xff0c;从启动训练开始(以GRPO为例子&#xff09; 第一步&#xff0c;使用TRL的vLLM后端…...

51c嵌入式~单片机~合集7~※

我自己的原文哦~ https://blog.51cto.com/whaosoft/13692314 一、芯片工作的心脏--晶振 在振荡器中采用一个特殊的元件——石英晶体&#xff0c;它可以产生频率高度稳定的交流信号&#xff0c;这种采用石英晶体的振荡器称为晶体振荡器&#xff0c;简称晶振。 制作方法 …...

GRPO训练下的参考模型选择

一、普通全量微调模型 核心机制&#xff1a;模型克隆 深拷贝创建 通过create_reference_model(model)对当前模型进行完全复制&#xff08;包括所有层和参数&#xff09;。示例代码&#xff1a;import copy def create_reference_model(model):ref_model copy.deepcopy(model)…...

英菲克(INPHIC)A9无线蓝牙鼠标 链接电脑的方式

英菲克&#xff08;INPHIC&#xff09;A9鼠标链接至电脑时&#xff0c;要长按住“模式切换MODE”按钮5秒左右的时间&#xff0c;此时模式指示灯变成蓝色&#xff0c;并且闪烁。 这时使用电脑的蓝牙设置中&#xff0c;“添加设备”&#xff0c;会出现BT4.0 Mouse提示&#xff0…...

lua表table和JSON字符串互转

--print("local ssxc{\n"..string.gsub(str,":","").."\n}") Utils {} ---------------------------------------------------------------------------------- -- Lua-Table 与 string 转换 local function value2string(value, isA…...

linux命令-find指令

1.文件名和路径 参数 说明 示例 -name pattern 按文件名匹配&#xff08;区分大小写&#xff09; -iname pattern 按文件名匹配&#xff08;忽略大小写&#xff09; -path pattern 按路径匹配 -ipath pattern 按路径匹配&#xff08;忽略大小写&#xff09; find . -name &…...