赞
踩
根据之前训练的字模型+PALM效果和经验。真是胡言乱语,牛头不搭马嘴。观察了模型的在各种条件下的输出。看大佬的各种的增强方法,搞了2周写完了新的增强管道。
换了新方案,继续训练了一晚上,马上就有不错的生成效果了,泪目。
在老的增强方法和损失函数上,T5 模型不太行,8+8 层的情况下生成效果不如12层相似参数量的PALM连贯,准确度也不如PALM,训练速度也比PALM慢2倍。
训练语料是质量较好的,但比较少,而且生僻字略多,所以使用字模型。
训练模型:GPT模型(参数量44M)
训练任务:翻译;对话续写;填空
词袋:单字(char)
词采样方法:top_K + top_P + temperature + 重复词概率惩罚
设计思路:
基于FLM方法,只能看到前面的词,而看不到后面的词的原理。随机破坏的前面的词,同时给予这些词分类 低权重或负权重进行学习,意为阻止模型对被破坏词的学习;然后适当降低被破损词的下一个词的权重,意为使下一个词受前一个词影响而降低概率了,但影响不大。
注意:所有增强均为训练中动态增强,而不是扩增后保存下来作为增强数据库。
第一行为分词
第二行为权重
预先设定,0.3概率,整句跳过所有增强
枯叶堆静静地燃烧起来
1.0
枯叶 | 堆 | 静静地 | 燃烧 | 起来 |
---|---|---|---|---|
1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
下面以选中 “静静地” 这个词为例
迭代所有词,对每一个词都使用概率 0.05 判断是否增强,增强方法从下面4个随机选一个
:选中词的权重 * 0.9
枯叶 | 堆 | 寂静地 | 燃烧 | 起来 |
---|---|---|---|---|
1.0 | 1.0 | 0.9 | 1.0 | 1.0 |
:选中词的权重 * 0.4
枯叶 | 堆 | 暗暗地 | 燃烧 | 起来 |
---|---|---|---|---|
1.0 | 1.0 | 0.4 | 1.0 | 1.0 |
:选中词的权重 * -0.3
枯叶 | 堆 | 嘈杂地 | 燃烧 | 起来 |
---|---|---|---|---|
1.0 | 1.0 | -0.3 | 1.0 | 1.0 |
:选中词的权重 * -1.0
枯叶 | 堆 | 飞机 | 燃烧 | 起来 |
---|---|---|---|---|
1.0 | 1.0 | -1.0 | 1.0 | 1.0 |
逆向迭代所有词,对每一个词都使用概率 0.05 判断是否增强,增强方法从下面4个随机选一个
词插入的位置是当前位置(即代表当前词会往后挪一下)
:选中词的下一个位置的词权重 * -0.3
枯叶 | 堆 | 寂静地 | 静静地 | 燃烧 | 起来 |
---|---|---|---|---|---|
1.0 | 1.0 | 1.0 | -0.3 | 1.0 | 1.0 |
:选中词的当前位置的词权重 * 0.7
:选中词的下一个位置的词权重 * -0.5
枯叶 | 堆 | 暗暗地 | 静静地 | 燃烧 | 起来 |
---|---|---|---|---|---|
1.0 | 1.0 | 0.7 | -0.5 | 1.0 | 1.0 |
:选中词的当前位置的词权重 * -0.5
:选中词的下一个位置的词权重 * 0.5
枯叶 | 堆 | 嘈杂地 | 静静地 | 燃烧 | 起来 |
---|---|---|---|---|---|
1.0 | 1.0 | -0.5 | 0.5 | 1.0 | 1.0 |
:选中词的当前位置的词权重 * -1.0
:选中词的下一个位置的词权重 * 0.3
枯叶 | 堆 | 飞机 | 静静地 | 燃烧 | 起来 |
---|---|---|---|---|---|
1.0 | 1.0 | -1.0 | 0.3 | 1.0 | 1.0 |
迭代所有词,对每一个词都使用概率 0.05 判断是否增强
:选中词的当前位置的词权重 * 0.65
:选中词的下一个位置的词权重 * 0.65
枯叶 | 堆 | 燃烧 | 静静地 | 起来 |
---|---|---|---|---|
1.0 | 1.0 | 0.5 | 0.5 | 1.0 |
迭代所有词,对每一个词都使用概率 0.05 判断是否增强
:选中词的当前位置的词和词权重删除
:选中词的下一个位置的词权重 * 0.7
枯叶 | 堆 | 燃烧 | 起来 |
---|---|---|---|
1.0 | 1.0 | 0.7 | 1.0 |
把词进一步拆开,得到一串单字列表
枯 | 叶 | 堆 | 静 | 静 | 地 | 燃 | 烧 | 起 | 来 |
---|---|---|---|---|---|---|---|---|---|
1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
下面以选中 “烧” 这个字为例
迭代所有字,对每一个字都使用概率 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 |
迭代所有字,对每一个字都使用概率 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 |
迭代所有字,对每一个字都使用概率 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 |
迭代所有字,对每一个字都使用概率 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 |
迭代所有字,对每一个字都使用概率 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的权重设为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] = -100
assert label.shape == x.shape
loss = F.cross_entropy(out.transpose(1, 2), label, label_smoothing=label_smoothing, reduction='none')
loss = loss * label_weight
loss = 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。