一种 用于GPT模型 训练的 包含加权 和 数据增强 和 损失方法 的设计
序
根据之前训练的字模型+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模型 训练的 包含加权 和 数据增强 和 损失方法 的设计相关推荐
- 【NLP】好资源!近 20 万本 txt 书籍的语料库,可用于 GPT 模型训练和语义分析...
由于缺少规范化的数据集,训练一个像OpenAI一样的GPT模型通常很难.现在有了,它就是BookCorpus的"books3"数据集,一个包含196,640本书的txt数据集. 下 ...
- InfoWorld文章丨将数据编排技术用于AI模型训练
This article was originally published on InfoWorld on March 22, 2022. Reprinted with permission. IDG ...
- 模型训练太慢?显存不够?这个方法让你的GPU联手CPU
随着深度学习模型复杂度和数据集规模的增大,计算效率成为了不可忽视的问题.GPU凭借强大的并行计算能力,成为深度学习加速的标配.然而,由于服务器的显存非常有限,随着训练样本越来越大,显存连一个样本都容不 ...
- CVPR2021深度框架训练:不是所有数据增强都可以提升最终精度
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 数据增强(DA)是训练最先进的深度学习系统的必要技术.在今天分享中,实证地表明数据增强可能会引入噪声增 ...
- 在模型训练前为什么要把数据打包为.npy文件,和普通文件格式有什么区别?
看看下面两段代码的运行时间! 代码一: import numpy as np import time# 100万个数据 n_samples=1000000# 将随机浮点数作为字符串写入本地TXT文件 ...
- 收藏 | PyTorch深度学习模型训练加速指南2021
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者:LORENZ KUHN 编译:ronghuaiyang ...
- PaddleOCR使用笔记之模型训练
目录 简介 模型训练 步骤一:文本检测模型(`detection`) 1.准备训练数据集 2.下载预训练模型 模型介绍 下载预训练模型 3. 开始训练 断点训练 4.模型评估 5.模型测试 6.训练模 ...
- 【paper 1】2022 一种用于脑内出血血肿体积检测的鲁棒性深度学习分割方法-英文
A Robust Deep Learning Segmentation Method for Hematoma Volumetric Detection in Intracerebral Hemorr ...
- 深度学习模型训练的一般方法(以DSSM为例)
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 本文主要用于记录DSSM模型学习期间遇到的问题及分析.处理经验.先统领性地提出深度学习模型训练 ...
最新文章
- Java项目:(小程序)全套商城系统(spring+spring mvc+mybatis+layui+微信小程)
- Linux系统下基本命令
- 【AI产品】五一出游赏花草,你一定需要这款“形色”
- 居然之家忍“刮骨疗伤”之痛拥抱新零售
- linux 优化内存分配,Linux性能优化 第三章 性能工具:系统内存
- selenium 使用js执行脚本儿链接整理
- some fragments
- GAN——流形(manifold)
- 网络安全模型_工业互联网态势感知,看得见的网络安全
- WinForm小程序系列:注册表阅读器
- 基于java(springboot)餐厅点餐系统源码成品(java毕业设计)
- spring5.X源码构建
- 字体靠右代码_html中怎么把文字往右移
- 新手怎样利用博客推广
- 神奇的css之 -webkit-background-clip: text; 五彩斑斓的文字效果
- 网易云音乐唱片机效果
- 蓝桥杯第四届C/C++ B省赛题目及题解
- 基于Simulink的雷达系统射频前端建模仿真(附源码)
- python如何爬取实时人流量_使用python爬取微信宜出行人流量数据
- poi设置word表格单元格宽度_java poi 设置word 格式如表格一类的
热门文章
- 十款经典php网店系统
- 阻止迅雷播放器暂停广告
- 【大数据相关】电商大数据之用户画像介绍
- 【UVM理论】uvm环境中对uvm_config_db的理解
- 团体程序设计天梯赛-练习集(并查集)
- (休闲小游戏)Adidas的投篮游戏
- 《VLAN中所使用ARP代理命令介绍》
- java中servlet dal bll model_C#中三层架构UI、BLL、DAL、Model实际操作(转)
- 织梦生成小说html,织梦用栏目分页来做小说站实现教程(支持动态静态)
- 动态规划算法之资源分配问题及其空间优化方案