根据之前训练的字模型+PALM效果和经验。真是胡言乱语,牛头不搭马嘴。观察了模型的在各种条件下的输出。看大佬的各种的增强方法,搞了2周写完了新的增强管道。
换了新方案,继续训练了一晚上,马上就有不错的生成效果了,泪目。

在老的增强方法和损失函数上,T5 模型不太行,8+8 层的情况下生成效果不如12层相似参数量的PALM连贯,准确度也不如PALM,训练速度也比PALM慢2倍。

训练语料是质量较好的,但比较少,而且生僻字略多,所以使用字模型。

训练模型:GPT模型(参数量44M)
训练任务:翻译;对话续写;填空
词袋:单字(char)
词采样方法:top_K + top_P + temperature + 重复词概率惩罚

设计思路:
基于FLM方法,只能看到前面的词,而看不到后面的词的原理。随机破坏的前面的词,同时给予这些词分类 低权重或负权重进行学习,意为阻止模型对被破坏词的学习;然后适当降低被破损词的下一个词的权重,意为使下一个词受前一个词影响而降低概率了,但影响不大。

注意:所有增强均为训练中动态增强,而不是扩增后保存下来作为增强数据库。

中文增强流程

第一行为分词
第二行为权重

下面的 * 号 代表乘法,下面不同的增强方式组合起来,乘法之后,权重会比较多样化

预先设定,0.3概率,整句跳过所有增强


1 输入

枯叶堆静静地燃烧起来
1.0

2 检查汉字数量,如果小于4则跳过增强。

3 首先进行 jieba 分词,并逐词分配基础句子权重

枯叶 静静地 燃烧 起来
1.0 1.0 1.0 1.0 1.0

4 对词进行增强

下面以选中 “静静地” 这个词为例

4.1 随机替换词

迭代所有词,对每一个词都使用概率 0.05 判断是否增强,增强方法从下面4个随机选一个

4.1.1 替换为同义词

:选中词的权重 * 0.9

枯叶 寂静地 燃烧 起来
1.0 1.0 0.9 1.0 1.0

4.1.2 替换为同类词

:选中词的权重 * 0.4

枯叶 暗暗地 燃烧 起来
1.0 1.0 0.4 1.0 1.0

4.1.3 替换为反义词

:选中词的权重 * -0.3

枯叶 嘈杂地 燃烧 起来
1.0 1.0 -0.3 1.0 1.0

4.1.4 替换为无关词

:选中词的权重 * -1.0

枯叶 飞机 燃烧 起来
1.0 1.0 -1.0 1.0 1.0

4.2 随机插入词

逆向迭代所有词,对每一个词都使用概率 0.05 判断是否增强,增强方法从下面4个随机选一个
词插入的位置是当前位置(即代表当前词会往后挪一下)

4.2.1 插入为同义词

:选中词的下一个位置的词权重 * -0.3

枯叶 寂静地 静静地 燃烧 起来
1.0 1.0 1.0 -0.3 1.0 1.0

4.2.2 插入为同类词

:选中词的当前位置的词权重 * 0.7
:选中词的下一个位置的词权重 * -0.5

枯叶 暗暗地 静静地 燃烧 起来
1.0 1.0 0.7 -0.5 1.0 1.0

4.2.3 插入为反义词

:选中词的当前位置的词权重 * -0.5
:选中词的下一个位置的词权重 * 0.5

枯叶 嘈杂地 静静地 燃烧 起来
1.0 1.0 -0.5 0.5 1.0 1.0

4.2.4 插入为无关词

:选中词的当前位置的词权重 * -1.0
:选中词的下一个位置的词权重 * 0.3

枯叶 飞机 静静地 燃烧 起来
1.0 1.0 -1.0 0.3 1.0 1.0

4.3 随机交换词序

迭代所有词,对每一个词都使用概率 0.05 判断是否增强
:选中词的当前位置的词权重 * 0.65
:选中词的下一个位置的词权重 * 0.65

枯叶 燃烧 静静地 起来
1.0 1.0 0.5 0.5 1.0

4.4 随机删除词

迭代所有词,对每一个词都使用概率 0.05 判断是否增强
:选中词的当前位置的词和词权重删除
:选中词的下一个位置的词权重 * 0.7

枯叶 燃烧 起来
1.0 1.0 0.7 1.0

5 对字进行增强

把词进一步拆开,得到一串单字列表

1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0

下面以选中 “烧” 这个字为例

5.1 随机替换字

5.1.1 替换为同音字

迭代所有字,对每一个字都使用概率 0.05 判断是否增强
:选中字的权重 * 0.6
:选中字的下一个字权重 * 0.8

1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.6 0.8 1.0

5.1.2 替换为形近字

迭代所有字,对每一个字都使用概率 0.05 判断是否增强
:选中字的权重 * 0.6
:选中字的下一个字权重 * 0.8

1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.6 0.8 1.0

5.1.3 替换为非同音字

迭代所有字,对每一个字都使用概率 0.05 判断是否增强
:选中字的权重 * -1.0
:选中字的下一个字权重 * 0.3

1.0 1.0 1.0 1.0 1.0 1.0 1.0 -1.0 0.3 1.0

5.1.4 替换为非形近字

迭代所有字,对每一个字都使用概率 0.05 判断是否增强
:选中字的权重 * -1.0
:选中字的下一个字权重 * 0.3

1.0 1.0 1.0 1.0 1.0 1.0 1.0 -1.0 0.3 1.0

5.2 随机交换字序

迭代所有字,对每一个字都使用概率 0.05 判断是否增强
:交换选中字与下一个字的位置和权重
:选中字的权重 * -0.1
:选中字的下一个字权重 * -0.1

1.0 1.0 1.0 1.0 1.0 1.0 1.0 -0.1 -0.1 1.0

特殊token的权重

除了分隔符,结束符等必需的特殊token的权重设为1.0
不必要(不会影响输出文本,或不会在输出文本中看到)的令牌,例如 开始,提示,填充 token 设置权重为0

其他

2023/3/23 更新
新的加权损失函数 weighted_and_neg_topk_cross_entropy ,为以下加权损失函数的改进版。
https://blog.csdn.net/ONE_SIX_MIX/article/details/129732022

旧的加权损失函数

Loss使用加权的交叉熵函数
B: 批量
L: 序列长度
C: 词向量通道数
out shape [B, L, C] --------------- 为模型输出,为 Float Tensor
label shape [B, L] ----------------- 为标签,为 Long Tensor
label_mask shape [B, L] -------- 为标签掩码,为 Bool Tensor,True 代表内容,False 代表是长度填充的token
label_weight shape [B, L] ------ 为标签权重,为 Float Tensor,即上面所述的东西

out = model(x)
if label is not None:if label_mask is not None:label[~label_mask] = -100assert label.shape == x.shapeloss = F.cross_entropy(out.transpose(1, 2), label, label_smoothing=label_smoothing, reduction='none')loss = loss * label_weightloss = loss[label_mask].mean()

附注

因为是小模型,不要因为句子后面的全是简单规律的 pad token 就省去 label_mask,我发现小模型即便记忆规律超级简单的 pad token 也会降低生成文本的质量(两个方面产生负面影响,一个是稀释了有效句子的Loss,使Loss偏小,一个是占用模型的记忆容量)。

引用和参考

【中文同义词近义词】词向量 vs 同义词近义词库
https://www.cnblogs.com/bymo/p/8440722.html

同义词,同类词库:哈工大同义词词林扩展版 存档
https://github.com/One-sixth/HIT-IR-Lab-Tongyici-Cilin-Extended

【NLP】NLP数据增强的15种方法
https://blog.csdn.net/fengdu78/article/details/124622163

一文了解NLP中的数据增强方法
https://blog.csdn.net/u011983997/article/details/122847095

词林:在线词典
https://www.cilin.org/

反义词 修饰副词 停用词 同义关系库 否定词 情态词 抽象关系库 程度副词 等词库
https://github.com/liuhuanyong/ChineseSemanticKB

同音字,形近字,音形码 库
https://github.com/wenyangchou/SimilarCharactor

nlpcda / NLP Chinese Data Augmentation 一键中文数据增强工具
https://github.com/425776024/nlpcda

一种 用于GPT模型 训练的 包含加权 和 数据增强 和 损失方法 的设计相关推荐

  1. 【NLP】好资源!近 20 万本 txt 书籍的语料库,可用于 GPT 模型训练和语义分析...

    由于缺少规范化的数据集,训练一个像OpenAI一样的GPT模型通常很难.现在有了,它就是BookCorpus的"books3"数据集,一个包含196,640本书的txt数据集. 下 ...

  2. InfoWorld文章丨将数据编排技术用于AI模型训练

    This article was originally published on InfoWorld on March 22, 2022. Reprinted with permission. IDG ...

  3. 模型训练太慢?显存不够?这个方法让你的GPU联手CPU

    随着深度学习模型复杂度和数据集规模的增大,计算效率成为了不可忽视的问题.GPU凭借强大的并行计算能力,成为深度学习加速的标配.然而,由于服务器的显存非常有限,随着训练样本越来越大,显存连一个样本都容不 ...

  4. CVPR2021深度框架训练:不是所有数据增强都可以提升最终精度

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 数据增强(DA)是训练最先进的深度学习系统的必要技术.在今天分享中,实证地表明数据增强可能会引入噪声增 ...

  5. 在模型训练前为什么要把数据打包为.npy文件,和普通文件格式有什么区别?

    看看下面两段代码的运行时间! 代码一: import numpy as np import time# 100万个数据 n_samples=1000000# 将随机浮点数作为字符串写入本地TXT文件 ...

  6. 收藏 | PyTorch深度学习模型训练加速指南2021

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者:LORENZ KUHN 编译:ronghuaiyang ...

  7. PaddleOCR使用笔记之模型训练

    目录 简介 模型训练 步骤一:文本检测模型(`detection`) 1.准备训练数据集 2.下载预训练模型 模型介绍 下载预训练模型 3. 开始训练 断点训练 4.模型评估 5.模型测试 6.训练模 ...

  8. 【paper 1】2022 一种用于脑内出血血肿体积检测的鲁棒性深度学习分割方法-英文

    A Robust Deep Learning Segmentation Method for Hematoma Volumetric Detection in Intracerebral Hemorr ...

  9. 深度学习模型训练的一般方法(以DSSM为例)

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 本文主要用于记录DSSM模型学习期间遇到的问题及分析.处理经验.先统领性地提出深度学习模型训练 ...

最新文章

  1. Java项目:(小程序)全套商城系统(spring+spring mvc+mybatis+layui+微信小程)
  2. Linux系统下基本命令
  3. 【AI产品】五一出游赏花草,你一定需要这款“形色”
  4. 居然之家忍“刮骨疗伤”之痛拥抱新零售
  5. linux 优化内存分配,Linux性能优化 第三章 性能工具:系统内存
  6. selenium 使用js执行脚本儿链接整理
  7. some fragments
  8. GAN——流形(manifold)
  9. 网络安全模型_工业互联网态势感知,看得见的网络安全
  10. WinForm小程序系列:注册表阅读器
  11. 基于java(springboot)餐厅点餐系统源码成品(java毕业设计)
  12. spring5.X源码构建
  13. 字体靠右代码_html中怎么把文字往右移
  14. 新手怎样利用博客推广
  15. 神奇的css之 -webkit-background-clip: text; 五彩斑斓的文字效果
  16. 网易云音乐唱片机效果
  17. 蓝桥杯第四届C/C++ B省赛题目及题解
  18. 基于Simulink的雷达系统射频前端建模仿真(附源码)
  19. python如何爬取实时人流量_使用python爬取微信宜出行人流量数据
  20. poi设置word表格单元格宽度_java poi 设置word 格式如表格一类的

热门文章

  1. 十款经典php网店系统
  2. 阻止迅雷播放器暂停广告
  3. 【大数据相关】电商大数据之用户画像介绍
  4. 【UVM理论】uvm环境中对uvm_config_db的理解
  5. 团体程序设计天梯赛-练习集(并查集)
  6. (休闲小游戏)Adidas的投篮游戏
  7. 《VLAN中所使用ARP代理命令介绍》
  8. java中servlet dal bll model_C#中三层架构UI、BLL、DAL、Model实际操作(转)
  9. 织梦生成小说html,织梦用栏目分页来做小说站实现教程(支持动态静态)
  10. 动态规划算法之资源分配问题及其空间优化方案