指代消解模型浅析

本文主要根据以下几个方面进行阐述:
01 指代消解主流模型
02 模型分析
03 数据集介绍
04 模型调研结果及调试过程记录


01 指代消解的主流模型

指代消解任务再OntoNotes数据集上的刷榜记录

16年Clark等人发表 《Improving Coreference Resolution by Learning Entity-Level Distributed Representations》
论文下载:https://arxiv.org/abs/1606.01323
该文章使用4个深度学习模块实现指代消解,分别是实体表述对Encoder,实体对Encoder,表述排序模型和实体排序模型。

17年Lee等人发表 《End-to-end Neural Coreference Resolution》
论文下载:https://arxiv.org/abs/1707.07045
该文章使用端到端的神经网络模型实现指代消解,在不需要语法分析和命名实体识别的情况下,表现超过了之前的所有模型的效果,这篇文章是后面模型发展的baseline模型,包括最后结果的对比都是根据这个模型来进行比对的。

18年还是Lee等人发表 《Higher-order Coreference Resolution with Coarse-to-fine Inference》
论文下载:https://arxiv.org/abs/1804.05392v1
该文章是在之前发表的《End-to-end…》论文基础上对做了些许改进(一阶模型变成高阶模型)

19年用bert做指代消解 《BERT for Coreference Resolution: Baselines and Analysis》
论文下载:https://arxiv.org/abs/1908.09091
上文也说了就是用 Transformer的Encoder 替换 Bi-LSTM+attention 的方法,就是简单的将原来的句子向量使用Bert进行编码,当时受限与长度的问题,文章统一使用滑窗进行处理超长的文本。

19年之后还出了 Spanbert 来做指代消解 《SpanBERT: Improving Pre-training by Representing and Predicting Spans》
论文下载:https://arxiv.org/abs/1907.10529v2
只是使用spanbert了,spanbert和Bert在预训练阶段是对两个子任务上面的差异LML和NSP,spanbert在边界预测方面的效果比Bert要好。

2020年新出了一种准确且可扩展的解决指代消解任务《Coreference Resolution as Query-based Span Prediction》
论文下载:https://arxiv.org/abs/1911.01746
主要有以下的优势:span prediction策略在mention proposal stage具有很强的灵活性,可以检索出遗漏的mention;在MRC 框架下,用query明确地去encoding the mention和它的context,这样的cues embedded能够深入透彻的理解coreferent mention的context;大量现有的MRC数据集可用于数据增强,以提高模型的泛化能力


02 模型分析

主要对:
End-to-end Neural Coreference Resolution
Coreference Resolution as Query-based Span Prediction
这两个模型进行分析

第一个模型 End-to-end Neural Coreference Resolution:
想法 :通过考虑文档中所有的span【 文本中的子串/短语 】以及学习每个span的可能的指代。
方法 :通过计算span本身embedding表示和span边界的头注意力机制
训练目标 :配合上剪枝,训练得到在共指簇中可能性最大的指代的span
实验表现:在ontonote5.0上F1提升1.5,集成5个的小技巧后,F1提升3.1
算法的流程如下:
在这里插入图片描述

第二个模型Coreference Resolution as Query-based Span Prediction

比如这个句子: _ / 北京大学 ,简称 北大 ,成立之初为中国最高学府。中华民国建立后,校名改为 北京大学校 ,后又改名为 国立北京大学 现有六个校区。/ _

过去的共指消解模型大都分为两个步骤处理:

  • 首先考虑文本中所有限定长度的文段,挑出其中可能成为共指词的那部分(称为候选指称);
  • 再按照寻找前驱的方法找到下一个共指词(比如当然已经找到的共指词有{北京大学校、国立北京大学、她},那么下一个前驱共指词就是“北大”,再下一个就是“北京大学”)。

然而,这种做法有两个问题:

  • 在任务层面,第一步被遗漏的共指词就会被永远遗漏,造成错误传递,比如漏选了“北大”之后,它就永远没有机会被选为共指词了;
  • 在算法层面,这些模型通常给一对指称打分,然后根据得分大小判断是否这一对指称共指,这就忽略了显式的上下文信息。
    用问答(QA)的方式进行共指消解:
    首先,我们还是提取出一些候选指称,但是之后,我们对每个指称, 将它所在的句子作为问题将整个文本作为上下文 ,把二者拼接起来,通过一个 问答模型 抽取整个文本中 该指称 的所有的共指词。
    模型的主要框架:

该模型由一个 指称提取模块 和一个 指称链接模块 组成,前者从原始文本中提取出所有可能的指称,后者将指称聚类为共指词。


03 数据集介绍

目前主要的数据集ontoNotes_Release_5.0
并且官方给出了如何处理数据集 http://cemantix.org/data/ontonotes.html
整理好的数据集如下:

bc/cctv/00/cctv_0001   0    0           WW    NNP  (TOP(NP(NP(NP*   -   -   -   Speaker#1   (WORK_OF_ART*      -
bc/cctv/00/cctv_0001   0    1           II    NNP               *   -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0    2    Landmarks   NNPS               *)  -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0    3           on     IN            (PP*   -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0    4          the     DT         (NP(NP*   -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0    5        Great    NNP               *   -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0    6        Earth    NNP               *)  -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0    7           of     IN            (PP*   -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0    8        China    NNP        (NP*)))))  -   -   -   Speaker#1               *    (59)
bc/cctv/00/cctv_0001   0    9            :      ,               *   -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0   10      Eternal     JJ         (NP(NP*   -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0   11     Memories   NNPS               *)  -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0   12           of     IN            (PP*   -   -   -   Speaker#1               *      -
bc/cctv/00/cctv_0001   0   13      Taihang    NNP            (NP*   -   -   -   Speaker#1               *    (74
bc/cctv/00/cctv_0001   0   14     Mountain    NNP           *)))))  -   -   -   Speaker#1               *)    74)

最后一个字段就是指代的span。
数据处理的具体流程可以参照:https://blog.csdn.net/weixin_44912159/article/details/105692082


04 模型调研结果及调试过程记录

这个阶段主要调试的模型:
End-to-end Neural Coreference Resolution
可以参考的代码:
https://github.com/shayneobrien/coreference-resolution 以及
https://github.com/fastnlp/fastNLP/tree/master/reproduction/coreference_resolution
其中
第一个项目代码,训练的过程中F1标签的值一直为0,原因是项目代码有bug,后期作者也没有再继续维护了。
第二个项目代码,能够成功的运行成功。训练的结果如下图所示:

f score的得分和论文的相差不远62.2%,需要2537M的GPU,耗时24小时。该模型作者发布时,最好的得分是67%。

Coreference Resolution as Query-based Span Prediction
参考的项目代码:
https://github.com/stepperL/CorefQA-pytorch
以及
https://github.com/ShannonAI/CorefQA
自己在debug pytorch版本的过程中发现复现的几个bug,主要是复现的代码需要V100勉强跑通,原论文的代码是在TPU V2-4上面训练以及推理的,可想所需资源的大小,在自己debug的过程,把能减少的参数降至最低,依然无法跑通,曾尝试过:多卡GPU训练,CPU训练。程序上的bug主要体现在,不支持GPU的多卡实现,单卡又需要超过32G的内存的刚需。需要消耗如此多的内存主要是在,进行mention linking阶段需要多次加载Bert模型,并且又Bert模型的串联情况,以及多个mention之间计算复杂度原本是O(k^2),
虽然作者再这部分有优化,但是依然还是很大的计算量。假设一篇文章有5000个字,200个句子,假设有潜在为指代消解的实体有50000个,那么在做实体连接判断不同实体之间是否存在链接关系,那么这部分的计算就有50000^2个,即使后面作者能发布2.0支持GPU上多卡的训练,最后的模型训练以及推理,乃至后期模型部署,需要的资源也是相当大的。

以上都是自己的理解,如有错误,尽情指出,留言联系我。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值