当前位置:   article > 正文

【NLP】(task8)Transformers完成抽取式问答+多选问答任务(更新ing)_bert 抽取式问答任务

bert 抽取式问答任务

学习总结

(1)学习用BERT模型解决抽取式问答任务的方法及步骤,步骤主要分为加载数据、数据预处理、微调预训练模型和模型评估。

  • 在加载数据阶段中,使用SQUAD数据集;
  • 在数据预处理阶段中,对tokenizer分词器的建模,处理长文本,并完成数据集中所有样本的预处理;
  • 在微调预训练模型阶段,通过对模型训练参数进行设置,训练并保存模型;
  • 在模型评估阶段,通过对模型预测的输出结果进行处理,解决无答案情况,最后使用squad评测方法,基于预测和标注对评测指标进行计算。

(2)抽取式问答:
输入层:问题Q和篇章P(均经过WordPiece分词后得到)拼接得到BERT的原始输入序列X
X = [ C L S ] q 1 q 2 ⋯ q n [ S E P ] p 1 p 2 ⋯ p m [ S E P ] X=[\mathrm{CLS}] q_{1} q_{2} \cdots q_{n}[\mathrm{SEP}] p_{1} p_{2} \cdots p_{m}[\mathrm{SEP}] X=[CLS]q1q2qn[SEP]p1p2pm[SEP] v = InputRepresentation ⁡ ( X ) \boldsymbol{v}=\operatorname{InputRepresentation}(X) v=InputRepresentation(X)BERT编码层:输入表示v经过多层Transformer的编码,借助自注意力机制充分学习篇章和问题之间的语义关联,并最终得到上下文语义表示 h ∈ R N × d \boldsymbol{h} \in \mathbb{R}^{N \times d} hRN×d 其中d为BERT的隐含层维度,N为文本序列长度。 h = BERT ⁡ ( v ) \boldsymbol{h}=\operatorname{BERT}(\boldsymbol{v}) h=BERT(v) 答案输出层:得到输入序列的上下文语义表示h后,通过全连接层,将每个分量(对应输入序列的每个位置)压缩为一个标量,并通过Softmax函数预测每个时刻成为答案起始位置的概率以及终止位置的概率。
通过交叉熵损失函数学习模型参数,将起始位置和终止位置的交叉熵损失平均,得到模型最终的总损失。

解码方法:使用基于Top-k的答案抽取方法获得答案。

(3)抽取式问答如何解决超长的文本context?(参考天国大佬)

  • 使用truncationpadding对超长文本进行切片,允许相邻切片之间有交集
  • 使用overflow_to_sample_mappingoffset_mapping,映射切片前的原始位置,用于找到答案的起始和结束位置
  • 对于所有切片进行遍历
    1)对于无答案的context,使用CLS所在的位置标注答案位置
    2)对于有答案的context,找到切片前的起始和结束位置,找到切片后token的起始和结束位置
    3)检测答案是否超出文本长度,超出则用CLS位置标注,没有超出,找到答案token的start和end位置
  • 返回tokenizer预处理之后的数据,满足预训练模型输入格式

(4)如何选择tokenizer和pre-trained模型?
可以参考huggingface的官网关于tokenizer的介绍:https://huggingface.co/transformers/tokenizer_summary.html


本文涉及的jupter notebook在 篇章4代码库中

建议直接使用google colab notebook打开本教程,可以快速下载相关数据集和模型。
如果您正在google的colab中打开这个notebook,您可能需要安装Transformers和

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/363790
推荐阅读
相关标签