传统方法:textcnn文本分类中超参数对分类器的影响

2023-11-09

引言

众所周知,文本分类是自然语言处理中最常见的任务之一。而TEXTCNN是每一个NLPer入门学习,deeplearning在自然语言处理中应用的首选。相对现在火热得BERT而言,TEXTCNN得结构相对来说更加简单,但其容易被理解,模型更小,训练更快,更易灵活调整得特点,仍然被广泛应用于工业界。现就textCNN使用中的超参数,以及调整超参数的结果做相应的总结。

实验

这里使用的TEXTCNN模型可以参考:中文文本分类项目
使用的数据量:85万+(由于是用专有领域的数据,具有隐私性,所以不便于公布)
**分类的类别:**1497类(样本间的数据分布表现得极为不均衡)
由于存在样本类别不均衡的情况,因此这里采用了Focal loss来作为损失函数来知道模型的训练,不了解FOCAL LOSS的小伙伴可以参考:何凯明老师的focal loss简要描述其工作为:focal loss是以预测类别的置信度的大小来约定item奖惩程度的一种方式。

多分类的FOCAL LOSS代码如下:

class MultiCEFocalLoss(torch.nn.Module):
    def __init__(self, Config, gamma=2, alpha=None, reduction='mean'):
        super(MultiCEFocalLoss, self).__init__()
        if alpha is None:
            self.alpha = Variable(torch.ones(Config.num_classes, 1))
        else:
            self.alpha = alpha
        self.gamma = gamma
        self.reduction = reduction
        self.class_num = Config.num_classes


    def forward(self, predict, target):
        pt = F.softmax(predict, dim=1) # softmmax获取预测概率
        class_mask = F.one_hot(target, self.class_num) #获取target的one hot编码
        ids = target.view(-1, 1)
        alpha = self.alpha[ids.data.view(-1)].cuda() # 注意,这里的alpha是给定的一个list(tensor
#),里面的元素分别是每一个类的权重因子
        probs = (pt * class_mask).sum(1).view(-1, 1) # 利用onehot作为mask,提取对应的pt
        log_p = probs.log()
# 同样,原始ce上增加一个动态权重衰减因子
        loss = -alpha * (torch.pow((1 - probs), self.gamma)) * log_p

        if self.reduction == 'mean':
            loss = loss.mean()
        elif self.reduction == 'sum':
            loss = loss.sum()
        return loss

实验涉及到超参数如下:

drop out batch_size learn rate pad_size embedding freeze epoch
丢弃神经单元的比例 训练时的批大小 学习率 句子的最大填充长度 训练时是否冻结初始向量 训练迭代次数

实验结果于结论

为了验证每个超参数对实验结果的影响,这里通过贪心算法的思想+控制变量法来实现:

base实现的超参数设计如下(acc=70.09%):

drop out batch_size learn rate pad_size embedding freeze epoch
0.2 128 1e-4 118 true 50

对比实验一(acc=70.69%):

drop out batch_size learn rate pad_size embedding freeze epoch
0.5 128 1e-4 118 true 50

结论: 适当的增加drop_out值有助于提升模型效果。

对比实验二:
以实验一的超参数为基准对lr进行调整。

drop out batch_size learn rate pad_size embedding freeze epoch
0.5 128 1e-3 118 true 50

以上超参数的到的结果:acc=63.13%

drop out batch_size learn rate pad_size embedding freeze epoch
0.5 128 1e-5 118 true 50

以上超参数的到的结果:acc=69.79%

drop out batch_size learn rate pad_size embedding freeze epoch
0.5 128 5e-5 118 true 50

以上超参数的到的结果:acc=70.81%

观察可知,lr过大,模型往往很难找到最优点,lr过小模型往往收敛困难。建议: 用少量数据进行多次实验,先现定出lr的最优的取值空间,再取适当的值。

对比实验三:
以实验二的超参数的最优结果为基准对pad_size进行调整。

drop out batch_size learn rate pad_size embedding freeze epoch
0.5 128 5e-5 64 true 50

以上超参数的到的结果:acc=71.16%
结论: 合理的pad_size可以保留更多有用信息,pad_size过大会填充大量无用信息,pad_size过小会丢失重要信息。这个需要根据实验的语料进行合理的统计和调整。

对比实验四:
以实验三的超参数的最优结果为基准对embedding_freeze进行调整。

drop out batch_size learn rate pad_size embedding freeze epoch
0.5 128 5e-5 64 flase 50

以上超参数的到的结果:acc=72.21%

结论: 在训练过程中开放预训练词向量的更新,可以有助于提升模型的表达能力。可能你会问,既然如此,那为何不直接为每个词随机生成一个词向量,而言调用预训练好的词向量模型呢,那是因为,预训练好的词向量模型可以有效帮助分类器前期快速收敛。当然如果你的资源特别丰富,又有足够多的时间,也时没有问题的,两种方式都可以,最终都会达到差不多的效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

传统方法:textcnn文本分类中超参数对分类器的影响 的相关文章

  • 博物馆(展览馆)RFID信息化建设管理方案

    项目概述 基于博物馆 展览馆 RFID信息化建设管理方案 博物馆是征集 典藏 陈列和研究代表自然和人类文化遗产的实物的场所 并对那些有科学性 历史性或艺术价值的物品进行分类 为公众提供知识 教育和欣赏的文化教育机构 建筑物 地点或社会公共机
  • openresty ngx_lua定时任务

    openresty ngx lua定时任务 ngx timer every https github com openresty lua nginx module ngxtimerevery ngx timer at https githu
  • No implementation found for void java接口不能跳转到实现类

    No implementation found for void 前两天idea还是好的 现在就是不能跳转到impl实现类 总是提示no implementation found for void 后来通过百度发现 其实是idea的缓存在作
  • 【知识学习】马氏距离 Mahalanobis Distance

    目录 1 协方差的意义 2 马氏距离 2 1 概述 2 2 公式 2 3 实际意义 2 4 局限性 2 4 1 协方差矩阵必须满秩 不平衡数据少数类一般都不是 2 4 2 不能处理非线性流形 manifold 的问题 线性流形和非线性流形
  • JSON.parseArray报错

    JSON parseArray报错 com alibaba fastjson JSONException syntax error expect actual error pos 1 fastjson version 1 2 47 解决方案
  • 在JavaScript中确认字符串结尾的两种方法

    In this article I ll explain how to solve freeCodeCamp s Confirm the Ending challenge This involves checking whether a s
  • 有趣的xss靶场

    最近发现一个在线xss靶场 挺有趣的 靶场只有12关卡 上面还写了服务区原代码 对于想入门xss的小伙伴可以试着玩一玩 结果只要实现弹窗结果为1即可 链接在这里 https xss haozi me 0x00 server code fun

随机推荐

  • C++基础知识 - 异常处理机制

    异常处理的基本思想 C 的异常处理机制使得异常的引发和异常的处理不必在同一个函数中 这样底层的函数可以着重解决具体问题 而不必过多的考虑异常的处理 上层调用者可以再适当的位置设计对不同类型异常的处理 异常是专门针对抽象编程中的一系列错误进行
  • 代码审查最佳实践

    代码审查是一种出色的软件工具 您绝对应该使用它来提高代码质量 但是像其他任何工具一样 有时可能会误用它 这就是为什么我提出了一些最佳做法来指导您查看同行代码的原因 代码审查不是测试 代码审查是开发人员对开发人员的业务 它不涉及任何测试 代码
  • 目标检测算法分类

    目标检测算法分类 1 两步走的目标检测 先找出候选的一些区域 再对区域进行调整分类 代表 R CNN SPP net Fast R CNN Faster R CNN 2 端到端的目标检测 采用一个网络一步到位 输入图片 输出有哪些物体 物体
  • Mysql之流程控制语句case

    CASE函数 情况1 实现等值判断 类似于switch语句 语法 CASE 要判断的字段或表达式 WHEN 常量1 THEN 要显示的值1或语句1 WHEN 常量2 THEN 要显示的值2或语句2 ELSE 要显示的值n或语句n END 案
  • 将项目部署到服务器

    首先确定各个需要被部署的应用所对应的ip 数据库类型 数据库名 中间件 应用名 版本及端口号 重要提示 主要分为六大步骤 1 部署数据库 kingbase8 导出导入数据库dmp文件 2 安装redis 系统后端需要用到redis 3 部署
  • cocos creator主程入门教程(十)—— A*寻路

    这一篇介绍A 寻路算法 在RPG SLG 模拟经营类游戏 有需要给角色寻路的需求 一般寻路我们采用A 寻路算法 A 寻路算法是一种广度优先启发性算法 先说说什么叫广度优先 搜索分为广度优先和深度优先 主要体现在对节点的展开上 深度优先一直往
  • 关于 html 或 jsp 页面调用js文件里的函数报错onclick is not defined处理方法

    错误 zygh is not defined at HTMLAnchorElement onclick 原因 function 方法写在 function 中 function 相当于匿名方法 里面是私有变量 所以页面找不到这个 funct
  • OpenCV13(摄像机显示和图像捕获 + 控制台下获取时间)

    1 摄像机测试程序 图像捕获 VS2012 OpenCV2 4 9 基于OpenCV的单个摄像机显示程序 控制台 按 c 键捕获图像 按照时间格式命名 默认C盘 Alex 2016 9 14 include stdafx h include
  • 【Python报错】在定义class时,出现AttributeError: ‘tuple‘ object has no attribute ‘describe_user‘

    请求各位大神的帮助 我在做class这一章的练习时 遇到报错 不知道如何修改 题目是要输出用户信息以及问候语 出现报错后 我有三个疑惑点 1 tuple指的是程序中的哪一部分 2 为什么会出现识别为tuple的情况 3 如何纠正这个错误 求
  • 关于使用STM32CubeMx配置串口出现的一些问题

    一 使用CubeMX配置好串口中断的工程 打开工程添加相关代码后串口没有数据输出或者看不见数据但串口助手的RX会一直增加的问题 参考 这里 大概意思就是时钟的原因 需要把stm32f4xx hal conf h文件中的时钟改一下 将25MH
  • Write Amplification Analysis in Flash-Based Solid State Drives

    Write Amplification Analysis in Flash Based Solid State Drives 摘要 第一部分 第二部分 第三部分 此文发表于2009年 摘要 写入放大是限制基于NAND闪存的存储设备中的随机写
  • 华为OD机试真题 Java 实现【水仙花数】【2022Q4 100分】

    一 题目描述 所谓水仙花数 是指一个n位的正整数 其各位数字的n次方和等于该数本身 例如153是水仙花数 153是一个3位数 并且153 1 3 5 3 3 3 二 输入描述 第一行输入一个整数n 表示一个n位的正整数 n在3到7之间 包含
  • 深入剖析C语言结构体内存对齐:轻松计算结构体大小的技巧

    本篇博客会讲解C语言结构体的内存对齐 并且给出一种快速计算结构体大小的方式 主要讲解下面几点 结构体的内存对齐是什么 如何快速计算结构体的大小 如何利用内存对齐节省结构体占用的内存空间 为什么结构体要内存对齐 如何修改默认对齐数 结构体内存
  • 国际版腾讯云阿里云免费开户:全站加快 DCDN 重磅发布!打造新一代加快引擎

    腾讯云全站加快 DCDN 重磅发布 打造新一代加快引擎 在数字化转型革新逐渐深化的当下 安全高效成为企业上云 全球化布置的要害需求 跟着运用场景复杂度不断提高 事务需求差异化开展 为了给企业供给更完善的安全加快服务 阿里云对全站加快DCDN
  • ubuntu 16.04安装提示end Kernel panic

    问题描述 ubuntu 最新版本VM虚拟机安装时出现错误end kernel panic not syncing corrupted stack end detected inside scheduler的解决方式 解决办法 选择自定义安装
  • 剑指 Offer 20. 表示数值的字符串

    表示数值的字符串 思路 多边界的问题 求解 package swordPointingToTheOffer public class Twenty public static boolean isNumber String s 空格 小数点
  • js解决0.1+0.2==0.3的问题的几种方法

    js解决0 1 0 2 0 3的问题的几种方法 JavaScript有7种基本类型分别是 Undefined Null Boolean String Number Symbol Object 对于JS中的Number类型 不区分整数和浮点数
  • 外挂编写完全攻略

    外挂编写完全攻略一 先说一下写一个外挂需要什么条件 1 熟练的C语言知识 目前的外挂大部分都是用BC或者是vc写的 拥有熟练的C语言知识是写外挂的基本条件 2 具有很强的汇编基础 一般游戏都不可能有原代码的 必须 反汇编或者跟踪的办法来探索
  • 31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器

    说在前面 开发环境 Vivado 语言 Verilog cpu框架 Mips 控制器 组合逻辑 指令译码器 我们需要根据一条32位的指令的结构确定是哪一条指令 可以根据操作码 op 以及功能码 func 使用case语句确定 下述代码中ca
  • 传统方法:textcnn文本分类中超参数对分类器的影响

    引言 众所周知 文本分类是自然语言处理中最常见的任务之一 而TEXTCNN是每一个NLPer入门学习 deeplearning在自然语言处理中应用的首选 相对现在火热得BERT而言 TEXTCNN得结构相对来说更加简单 但其容易被理解 模型