Chapter7-7_Deep Learning for Coreference Resolution

本文为李弘毅老师【Deep Learning for Coreference Resolution】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 7-6 Text Style Transfer

下篇 - 7-8 Deep Learning for Constituency Parsing

总目录

1 什么是coreference resolution

coreference resolution翻译过来就是指代消解,它的目的是搞清楚一句话中的代词指的是什么。比如下图中有两句话,第一句是"The trophy would not fit in the brown suitcase because it was too big.",这里的it显然值得是"trophy";第二句是"The trophy would not fit in the brown suitcase because it was too small.",这里的it显然指的是"suitcase"。我们人很容易区分出来,但是要机器去找"it"指代的是什么就比较困难了。
ch7-7-1

刚说的是比较通俗的说法,更准确地说coreference resolution是这样的。在一个句子中会有很多的mention,mention就是句子中的一些名词,比如"鍾佳播瞪著樂咖舉起他的拳頭說"这句话中,“鍾佳播”,“樂咖”,“他”,"他的拳頭"都算是mention。这些mention会指向一个实际存在的事物,如果两个或两个以上的mention指向了同一个事物,那么这就叫做corefer。第一个出现的corefer叫做antecedent,之后出现的叫做anaphor。如果某个事物只有一个mention指向它,那么就叫做singleton。
ch7-7-2

总结一下,指代消解需要模型做两件事情,第一件事情就是把所有的mention都找出来,singletons往往会被忽略掉;第二件事情就是对所有的mention进行分组,把指代同一个事物的mention分到一个组里。
ch7-7-3

2 框架

2.1 Mention Detection

Mention Detection要做的就是把所有的mention都给找出来,它就是一个Binary Classifier。这个Binary Classifier吃一个span,然后告诉我们这个是不是一个mention。span就是说整个句子中的一段。如果句子的长度为N,那么这个步骤会被重复N(N-1)/2次,也就是概率论中的 C N 2 C_N^2 CN2,从N个tokens当中,任选两个作为起始token和结尾token。

为什么要这么做?比如“他的拳头”这个sequence当中,“他”是一个mention,“他的拳头”整句话也是一个mention,为的就是把这两者都找出来。
ch7-7-4
这里起始我还是有点小疑惑,一是sequence是不是按照标点符号切过的,因为有些标点明显不可能在mention中出现,除了老外的名字中的那个"·";二是这个binary classifier只吃一个span吗?那比如一个人的名字叫做"张小明",那么“张小明”会被当成mention,"小明"也会被当成mention吗?不过这种其实也能通过后处理解决掉。

2.2 Mention Pair Detection

Mention Pair Detection也是一个Binary classifier。不过它吃两个mention,然后吐出这两个mention是不是指向同一个东西,也就是上面所说的cluster的过程。当然这里的mention肯定不知是mention对应的tokens这么简单,应该是两个特征。

加入我们根据上一步得到了K个mentions,那么这里会执行K(K-1)/2次。
ch7-7-5

2.3 End-to-End

像上述这样分成两步的过程并不是end-to-end的,我们其实可以把这两步合成一步。就是train一个Binary Classifier,它吃两个span,然后在这两个span都是mentions且指向同一个entity的时候,输出yes。

如果是这样的一个模型的话,要运行几次呢?假设我们有N个tokens,那么会有N(N-1)/2个span,记K=N(N-1)/2的话,就会有跑K(K-1)/2次,也就是复杂度为 N 4 N^4 N4
ch7-7-6
相信说到这里,大家也都是有点疑惑的。那么,这个Binary classifier究竟长什么呢?它就下长下图这样子。先会把整个句子经过一个Pre-trained Model,可以是ELMo或者Bert之类的。然后每个token会有一个对应的输出,这里的每个输出都是包含了全局的信息的。然后我们就选择两个span,分别去抽取特征,这两个特征又会分别经过一个输出Mention分数的网络,这两个特征又会一起进入一个输出Mention Pair分数的网络,然后这三个分数整合之后,得到最终的分数。看了这个图,其实大多数的疑惑都消失了。
ch7-7-7

2.4 Span Representation

Span Feature Extraction的做法是如何的呢?一种常见的做法是先把头尾两个特征拿出来(下图中 x 1 x_1 x1 x 4 x_4 x4),然后对整个span算attention之后,取weighted sum。最后把这三个特征concat起来就是最终的输出了。需要有weighted sum的步骤,是因为这样可以让模型focus在span中讲述entity本质的东西上,比如“湖旁小屋”,这里的本质其实是“小屋”。
ch7-7-8

2.5 Pratical Implementation

刚才我们说了,假设我们有N个tokens,那么会有N(N-1)/2个span,记K=N(N-1)/2的话,就会有跑K(K-1)/2次,也就是复杂度为 N 4 N^4 N4。在实际操作的时候,有两招可以减少运算量。一招是,在inference的时候,先把mentin detection的部分单独拿出来过一遍,可以大大减小K;另一招是限制一个span的最大长度,这个很容易理解。

2.6 Result

那么,这么做的效果如何呢?下面有一些模型输出结果的句子,其中小括号括起来的部分,是模型认为是coreference的部分,用颜色highlight的部分,则是attention权重比较大的部分。下面的有正确的例子,也有错误的例子,总体来说,还是挺棒的~
ch7-7-9

3 应用

做coreference resolution主要是为了一下下游的任务。比如chatbot。在chatbot当中,往往需要机器去看历史内容,指导此刻人说的话,指的是刚才说过的什么东西。在做chatbot的时候,也有用seq2seq的方法去做的,比如有如下对话:

人:“梅西多高?”

机器:“官方说法他是5英尺7英寸。”

人:“他和C罗谁是最好的球员?”

这个时候,最后一句的他,我们希望可以替换成"梅西",这样机器回答起来会容易很多。这时,有人的做法就是,输入上面这三个句子,让机器输出“梅西和C罗谁是最好的球员?”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七元权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值