CommonsenseQA:A question answering challenge targeting commonsense knowledge

2019.03 -NAACL 2019

CommonsenseQA 任务排名结果
数据众包连接及demo
训练集
测试集
论文地址
论文解读1
论文解读2
技术分享丨ALBERT在CommonsenseQA方向的应用
ALBERT代码
ALBERT论文

任务关键

CommonsenseQA任务的关键是让模型学到更多的先验知识,这样在一些给定相关文件或上下文的问题(只需要很少的背景知识)上,模型获得的先验知识越多,给出正确预测答案的概率越大。

预训练本质

预训练本质上是通过设计好一个网络结构来做语言模型任务,然后把大量甚至是无穷尽的无标注的自然语言文本利用起来,预训练任务把大量语言学知识抽取出来编码到网络结构中,当手头任务带有标注信息的数据有限时,这些先验的语言学特征当然会对手头任务有极大的特征补充作用,因为当数据有限的时候,很多语言学现象是覆盖不到的,泛化能力就弱,集成尽量通用的语言学知识自然会加强模型的泛化能力。

改进方向

针对CommonsenseQA任务主要有两大改进方向,一是采用更强大,引用更多高质量、大规模数据集训练的预训练模型–xlnet、roberta、albert等。越强大的预训练语言模型其特征抽取能力越强,能更好的引入大量无监督数据中包含的语言学知识,其推理能力也就越强大。二是引入外部知识。针对常识问答在问题中只给定很少的背景知识,而预训练模型本身蕴含的知识不足以让模型“推理”出正确答案,于是,引入跟答案或者问题关联的外部知识就成了关键。

XLNet与Bert

XLNet通过引入permutation language modeling,解决了BERT预训练阶段和微调阶段差异性,消除了BERT的预测目标独立性假设,同时数据规模扩充到了126G。

RoBERTa与Bert

RoBERTa在BERT基础上主要做了四点改进:使用动态mask;移除NSP任务;更大的batch size;更长的输入序列。
同时,它使用了更大规模的数据集(160G)。

这或许证明不了这三个模型的内部机制谁更为优秀,但至少证明了一点:引入更大规模,更高质量的数据集能更好的提升模型表现。

本质上预训练是通过设计好一个网络结构来做语言模型任务,然后把大量甚至是无穷尽的无标注的自然语言文本利用起来,预训练任务把大量语言学知识抽取出来编码到网络结构中。这样,引入的数据集规模越大,质量越高,模型学到的先验的语言学特征越多,集成更多的通用的语言学知识,模型的泛化能力也就越强。

在CommonsenseQA任务上,目前由于并没有引入外部数据,并且需要正确预测只需要很少背景知识的问答,所以预训练模型本身蕴含的知识就成了关键。相比之下,RoBERTa引用了最大规模、更高质量的数据集(160G),故而目前效果最好。

ALBERT带来的变化

通常而言,在预训练自然语言表征时增加模型大小可以提升模型在下游任务中的性能。但在某些情况下,由于 GPU/TPU 内存限制、训练时间延长以及意外的模型退化等原因,进一步增加模型大小的难度也随之增加。为了解决这些问题,

谷歌提出了ALBERT(A Lite BERT),通过两种参数精简技术来降低内存消耗,提高BERT的训练速度。

  1. Factorized Embedding Parameterization。研究者通过将大的词汇嵌入矩阵分解为两个小的矩阵,从而将隐藏层的大小与词汇嵌入的大小分离开来。这种分隔使得在不显着增加词汇表嵌入参数大小的情况下更容易增加隐藏层的大小。

  2. Cross-layer Parameter Sharing。研究者共享了所有层的参数,这一技术可以避免参数量随着网络深度的增加而增加。

  3. 为了进一步提升 ALBERT 的性能,研究者还引入了一个自监督损失函数,用于句子级别的预测(SOP)。SOP 主要聚焦于句间连贯,用于解决原版 BERT 中下一句预测(NSP)损失低效的问题。

评价

ALBERT通过两大参数削减技术(嵌入向量参数化的因式分解跨层参数共享)可以充当某种形式的正则化,使训练更加稳定,而且有利于泛化。然后为了进一步提升 ALBERT 的性能,研究者还引入了一个自监督损失函数,用于句子级别的预测(SOP)。SOP 主要聚焦于句间连贯,用于解决原版 BERT 中下一句预测(NSP)损失低效的问题。正是由于这些改造技术,能让ALBERT在很大程度上降低内存消耗,从而能够扩展为更大的版本。尤其要注意到ALBERT_xxlarge的隐藏层已经扩展到4096规模了(BER-TLarge隐藏层H为1024),这是模型能够进一步提升的重要原因。同时,由于所有层共享一样的参数,不断加深ALBERT的网络结构,无法获得持续的性能提升,所以ALBERT_xxlarge只有12层(BERTLarge为24层)。

ALBERT通过一系列改造,大大降低了内存消耗,从而能够扩展为更大版本-
ALBERT-xxlarge,成功地提升了模型的规模并且减少了参数(规模为BERTLarge的70%)。ALBERT_xxlarge超过RoBERTa也不奇怪了,毕竟,这两者“规模”不一样。

有趣的例子

demo

Q: bob早上想吃冰的、甜的东西,下面哪个合适?

A 冰淇淋 B 米饭 C 蛋糕 机器答: C

将C 蛋糕 改为 苦蛋糕 机器答: A

将C 蛋糕 改为 甜蛋糕 机器答: C

也就是说当前训练的72%准确率的模型知道 苦蛋糕不符合冰的、甜的概念,但同时也并不知道冰淇淋是冰的且甜的东西,至少不知道冰淇淋比甜蛋糕更符合问题的描述。

### 基于强化学习的时间知识图谱问答模型 RTA 的实现与应用 #### 时间知识图谱的重要性 时间知识图谱能够捕捉事件随时间的变化和发展,对于理解动态过程至关重要。通过构建包含时间维度的知识图谱,可以更精确地表示实体间的关系及其演变情况[^1]。 #### 强化学习的作用 利用强化学习算法来增强时间知识图谱问答系统的性能是一种有效的方法。该方法允许系统根据反馈不断调整自身的策略,在面对复杂查询时做出更加合理的决策。具体来说,强化学习可以帮助优化路径选择、关系预测以及答案生成等多个方面的工作流程。 #### 模型架构设计 为了有效地处理涉及时间因素的问题,RTA 模型通常会采用一种混合结构,即结合传统的神经网络组件(如LSTM 或 Transformer)用于编码输入序列中的时间和上下文信息,并引入基于Q-learning或者Policy Gradient的强化学习模块来进行下一步动作的选择和评估。这种组合不仅提高了对长期依赖性的建模能力,还增强了应对不确定性环境下的适应性和鲁棒性[^2]。 ```python import torch.nn as nn from transformers import BertModel, BertTokenizer class TimeQA(nn.Module): def __init__(self): super(TimeQA, self).__init__() self.bert = BertModel.from_pretrained('bert-base-uncased') def forward(self, input_ids, attention_mask=None): outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask) return outputs.last_hidden_state[:, 0, :] ``` 此代码片段展示了如何初始化一个简单的BERT模型作为时间感知问答的基础框架的一部分。实际的应用中还需要加入更多针对特定任务定制化的层和技术细节以完成整个RTA体系的设计[^3]。 #### 应用案例分析 在智能客服领域,RTA 可以为用户提供更为精准的历史订单追踪服务;医疗健康行业中,则可用于辅助医生回顾患者病史并提供个性化的治疗建议;金融风控部门也能借助此类技术更好地识别潜在风险信号,提前采取预防措施等。总之,随着应用场景日益多样化,基于强化学习的时间知识图谱问答模型将在众多行业发挥重要作用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值