首页 > 编程语言 >【Python机器学习】序列到序列建模——对序列到序列模型的增强

【Python机器学习】序列到序列建模——对序列到序列模型的增强

时间:2024-09-17 18:50:59浏览次数:11  
标签:词条 训练 Python 建模 解码器 向量 序列 输入

有两种增强训练序列到序列模型的方法,可以提高模型的精确率和可扩展性。

使用装桶法降低训练复杂度

输入序列可以有不同的长度,这使短序列的训练数据添加了大量填充词条。过多的填充会使计算成本高昂,特别是当大多数序列都很短,只有少数序列接近最大词条长度时。假设用数据训练序列到序列网络,其中几乎所有的样本都是100个词条长,只有几个包含1000个词条的异常值除外。若不进行装桶,我们需要用900个填充词条填充大部分训练数据,并且在训练阶段,序列到序列网络必须对填充词条进行循环遍历。这种填充数据会大大减缓训练速度。在这种情况下,装桶法可以较少计算量。我们可以按长度对序列排序,并在不同的批处理期间使用不同的序列长度。我们将输入序列分配到不同长度的桶中,例如长度在5~10个词条之间的所有序列放在一个桶中,然后训练该批次时使用这个序列的桶,例如,先训练5~10个词条之间的所有序列,然后训练10~15个词条之间的所有序列,等等。一些深度学习框架提供了一些装桶工具为输入数据提供最佳装桶方式。

如上图,序列首先按照长度排序,然后仅填充到特定桶的最大词条长度。这样,在训练序列到序列网络时,可以减少所有批处理所需的时刻数量。在特定的批处理中,只在需要的范围内(到最长的序列)展开网络。

注意力机制

与隐性语义分析一样,较长的输入序列(文档)倾向于产生不精确表示这些文档的思想向量。思想向量受LSTM层(神经元数量)维数的限制。对于短输入/输出序列,一个思想向量就够了,类似于聊天机器人示例。但是,如果想训练一个序列到序列模型来概述在线文章。在这种情况下,输入序列可以使一篇很长的文章,要将这篇文章压缩到一个思想向量中,以生成一个标题。可以想想,训练网络来确定较长的文档中最相关的信息是很棘手的。标题或摘要(以及相关的思想向量)必须关注该文档的某个特定方面或部分,而不是试图表示其具有的所有复杂含义。

对于这一问题的解决方案就是注意力机制(如上图)。顾名思义,这个想法是要告诉解码器应该注意输入序列中的哪些部分。这种“预演”是通过允许解码器除查看思想向量外,还允许查看编码器网络的所有状态来实现。整个输入序列上的“热图”版本将于网络的其他部分一起学习。每个时刻不同的映射会与解码器共享。当它解码序列的某个特定部分时,思想向量产生的概念会被它直接产生的信息所增强扩充。换句话说,注意力机制通过选择与输出相关的输入部分,允许输入和输出之间直接相连。这并不意味着输入和输出序列的词条要对齐,因为那样就违背了目标,使我们返回了自编码器的阶段。无论概念的表示出现在序列中的哪个部分,它(注意力机制)都可以使它们更加丰富。

有了注意力机制,在给定解码器时刻时,解码器都会接受一个额外的具有每个时刻的输入,表示要“注意”的输入序列中的一个(或多个)系统。编码器中所有序列的重要程度将由解码器各个时刻的加权平均值表示。

配置和调优注意力机制并不简单,但是各种深度学习框架都提供了简单的实现方法。

标签:词条,训练,Python,建模,解码器,向量,序列,输入
From: https://blog.csdn.net/weixin_39407597/article/details/142315721

相关文章

  • 2024.9.16 Python,最短的桥
    1.最短的桥:这个题我最新的代码如下:fromcollectionsimportdequeclassSolution:defshortestBridge(self,grid:List[List[int]])->int:nr=len(grid)ifnr==0:return0nc=len(grid[0])island=deque([])......
  • 2024.9.17 Python
    1.现有字典d={‘a’:24,’g’:52,’l’:12,’k’:33}请按字典中的value值进行排序?sorted(d.items(),key=lambdax:x[1])[1]换成0即可变成按照键排序2.del列表名[index]:删除指定索引的数据3.列表名.remove(数据):删除第一个出现的指定数据4.列表名.pop(index)5.列表名......
  • python电子书,网安电子书,电脑维修电子书【免费】
    下载地址百度网盘:python电子书提取码:ihpn下载地址百度网盘:电子书合集提取码:mvvk......
  • 【python学习】深入掌握 Python RQ 任务队列库:全面处理异步任务的实战指南
    引言rq是基于Redis的Python任务队列库,用于处理异步任务。它能帮助开发者将繁重的后台任务交由独立进程执行,从而提高系统性能。在复杂项目中,任务的超时、重试、定时执行、依赖关系以及队列优先级等功能尤为重要。本文将全面介绍rq的常用和高级功能,帮助你在项目中灵活......
  • 2024年全国大学生数学建模竞赛B题生产过程中的决策问题分析
    目录引言问题1:抽样检测方案设计问题2:生产过程中的决策决策阶段划分决策方案结果问题3:多道工序和零配件的决策生产流程决策过程问题4:基于抽样检测的重新决策动态调整次品率结论引言在2024年全国大学生数学建模竞赛B题中,企业需要对生产中的各个环节进行决策......
  • opencv-python学习笔记10-图像形态学处理
    目录一、基本概念: (1)结构元素(StructuringElement):(2)膨胀(Dilation):(3)腐蚀(Erosion):(4)开运算(Opening)(5)闭运算(Closing)(6)形态学梯度(MorphologicalGradient)(7)顶帽(Top-hat)和黑帽(Black-hat)转换(8)应用领域 二、膨胀:(1)基本概念:(2)原理:(3)方法:(4)OpenCV中的膨胀函数:(5)代码示例:(6)应用领域:(7......
  • “序列化”与 “反序列化”
    学习Rustweb的过程中,前后端处理数据的过程中,要用到serde这个库,科普了一下这是Rust序列化、反序列化的方案,新的疑惑来了,什么是序列化、反序列化?概念序列化和反序列化,是计算机中用于数据存储和传输的重要概念。序列化(Serialization)是将数据结构或对象转换成一种可存储、......
  • python标准库模块 pickle 详解
    什么是pickle模块?pickle是Python的一个标准库,用于序列化和反序列化Python对象。所谓序列化,就是将一个Python对象转换成字节流,以便存储到磁盘或通过网络传输。反序列化则是将字节流恢复为原来的Python对象。为什么使用pickle?保存Python对象:可以将Python中的各......
  • Python使用starmap函数批量更新数据库
    在数据库操作中,有时候需要对多条记录进行批量更新操作,而这些记录的更新逻辑可能是相同的,只是参数不同。starmap函数可以更加高效地实现批量更新数据库的操作。importsqlite3fromitertoolsimportstarmap#连接数据库conn=sqlite3.connect('example.db')cursor=conn......
  • Python 之函数
    函数参数位置参数: defpower(x):默认参数: defpower(x,n=2): 默认参数必须指向不变对象!可变参数: defcalc(*numbers):关键字参数: defperson(name,age,**kw):命名关键字参数:defperson(name,age,*,city,job):参数组合:在Python中定义函数,可以用必选参数、默认参数......