资源链接:https://www.bilibili.com/video/BV1r4411f7td?p=16
现在有一种想法比较流行:在一个模型中完成10个不同的任务(十项全能比赛)
把所有预处理后发现可能对于一个词在不同的模型中含义是不一样的
基于特征工程的机器学习->特征学习的深度学习->针对单个任务的深层架构工程->?
(如果我们随机权重从头开始是非常困难的,所以加载别人的往往是个很好的选择)
->在每个社区中追逐基准(类似于划分的很明显,可能实际上差不多类型的问题,但是别人依旧把AB分开而不是相互关联的,例如:命名实体识别和词性标注很多都是类似的,但是很多人把他们当成两个完全不一样的问题)
例如命名实体识别中的词性标注对于翻译等其他任务有很大的帮助
现在我们有十项任务了
把 10 项不同的任务都写成了 QA (如上图Question、Answer)的形式,进行训练与测试(把多任务学习当作问答)
Meta-Supervised learning元监督学习 :
使用问题q作为任务t的自然描述,以使模型使用语言信息来连接任务
y是q的答案,x是回答q所必需的上下文
(最简单方式是根据问题来判断,然后选择模型,例如机器翻译就选择机器翻译模型。但是这样可能里面有一大推if语句,然后我们更希望的是这个模型是一个多任务模型,而不是多个单任务的组合模型)
需求:
以一段上下文开始
问一个问题
一次生成答案的一个单词,通过
每个输出单词的指针切换都在这三个选项中切换
固定的 GloVe 词嵌入 + 字符级的 n-gram 嵌入 [公式] Linear [公式] Shared BiLSTM with skip connection
从一个序列到另一个序列的注意力总结,并通过跳过连接再次返回
分离BiLSTM以减少维数,两个变压器层,另一个BiLSTM
分离BiLSTM以减少维数,两个变压器层,另一个BiLSTM
自回归解码器使用固定的 GloVe 和字符 n-gram 嵌入,两个变压器层和一个LSTM层来参加编码器最后三层的输出
LSTM解码器状态用于计算上下文与问题中的被用作指针注意力分布问题
对上下文和问题的关注会影响两个开关: 1、gamma决定是复制还是从外部词汇表中选择。2、lambda决定是从上下文还是在问题中复制
(双向箭头表示双向的意思)
所用的数据集等:
(更关键的讨论如何制定成功的标准,不过每个社区的标准不一样,所以还是沿用了之前的~)
横向是相同数据集不同架构,纵向是不同数据集相同架构
(多任务时,可能某些任务会干扰其他任务,甚至彼此干扰,那么训练过程会发生严重的灾难性遗忘)
变压器层在单任务和多任务设置中产生效益
QA和SRL有很强的联系
指出问题是必要的
多任务处理有助于零风险
组合单任务模型与单任务多任务模型之间存在一定的差距
困难:在单任务设置中收敛多少次迭代
带红色的任务:预训练阶段包含的任务
QA 的 Anti-curriculum 反课程预训练改进了完全联合培训,但MT仍然很糟糕,如下图
答案从上下文或问题中正确的复制,没有混淆模型应该执行哪个任务或使用哪个输出空间
例如额外的IWSLT language pairs或者是新的类似NER的任务
在 Amazon and Yelp reviews 上获得了 80% 的 精确率
在 SNLI 上获得了 62% (参数微调的版本获得了 87% 的精确率,比使用随机初始化的高 2%)
问题指针使得我们可以处理问题的改变(例如,将标签转换为满意/支持和消极/悲伤/不支持)而无需任何额外的微调
使模型无需训练即可响应新任务,例如:
为多个NLP任务训练单问题回答模型
解决方案: