NLP 生成式任务核心梳理
自回归语言模型
能够根据历史数据预测新的数据
- LSTM
本身就是,前面看不到后面,天然具备右上三角 mask。 - CNN
…
UNILM
- mask 机制
- encoder only
- 无 mask
前后内容可见,适用范围:- 文本分类
- 文本匹配
- 无 mask
- decoder only
- 有 mask
- 右上三角 mask
- 前文预测后文
生成式任务 - 仅可看到当前与历史内容
实现 attention 效果- 相当于 local attention
- 可以增强特定内容的权重
- 前文预测后文
- 梯形 mask
seq2seq- 输入部分总为公开信息
输出部分已出现的,为公开信息 - 文本翻译
- 输入部分总为公开信息
- 右上三角 mask
- 有 mask
- encoder only
- 训练时有 mask,预测时没有 mask
不统一,影响模型效果
encoder-decoder 模型
- encoder 训练一套模型
使用输入完成 encoder 层训练 - encoder 到 decoder的过渡层
使用上一个真实 label 计算attention
attention 机制- 形式
- soft attention
会保留除关键字之外的所有权重 - hard attention
使用 one-hot 向量,完全删除关键字之外的权重 - local attention
会保留除关键字之外的部分权重
- soft attention
- 思想
上一个字跟历史的每个字计算得到 attention,然后施加在 V 上(encoder 的输入上) - 对字符进行加权,有关字符给予更高权重
- 使用 decoder 的上一个字符作为输入进行embedding 编码
- 编码结果和 encoder 的隐单元最终状态拼接
- torch.cat(embedding[0], hidden[0])
- 拼接后进行 softmax 归一化计算
- softmax 拼接结果,通过 attention 线性层处理
- 加权结果和 encoder_output 对位相乘(加权)再求和
- 加权求和结果与 decoder 上一个字embedding[0] 拼接,再经过线性变换,得到decoder 层的输入
- Q(query)
decoder 的上一个字符 embedding - K(key)
encoder 的隐单元 - V(value)
encoder_output- teacher forcing
- 给定阈值,当预测标签超过阈值,和预期标签产生过大偏差,直接用真实标签
- 会造成信息泄露
如果预测的是 a,真实标签为 b,需要用 a 和 b 计算loss- teacher forcing 时,下一次真实标签会强制传入 b
- 非 reacher forcing,下一次真是标签会传入 a
- 会造成信息泄露
- 实际上,自回归模型的并行训练,都是 teacher forcing
因为数据规模足够大,可以达到训练效果
- 给定阈值,当预测标签超过阈值,和预期标签产生过大偏差,直接用真实标签
- teacher forcing
- decoder 训练一套模型
使用 attention 的输出开始 decoder 的网络层训练
- 形式
pointer network
针对摘要的生成式模型
T5
seq2seq 预训练
评价指标
- BLEU
- 本质是文本相似度计算的方法
用 n-gram 的重合度代表两句话的相似度
- 重复字 -> 重复二元组 -> 重复三元组…的出现次数
- 过高频率或者过短文本上做惩罚 - 没考虑语义相似度的问题
- 可以跨语种做评价
- from nltk.translate.bleu_score import sentence_bleu
- 本质是文本相似度计算的方法
- Rouge
和BLEU 差不多
解决文本重复问题
模型不变的情况下,进行采样策略调整,避免总选择最高概率词。
- beam size
针对 beam search 每层路径采样策略,beam size 越大,采样越多,速度越慢,最终可生成文本越多 - temperature sampling
- temperature 越大,结果越随机
- temperature 越小,结果越固定
- top-k
在最高 k 个概率中选择 - top-p
从高高低排序,在累加概率不超过p 的范围内中选择 - repetition penalty
重复惩罚- 让前面出现过的文本尽可能少出现
- 对出现过的文本对应张量做缩放
- max memory
截断送入模型的文本