无监督从海量语料中挖掘关键事件

前言

 

新闻语料库的自动事件检测是挖掘结构化知识的关键任务,挖掘事件的粒度很多,从比较大的主题粒度到比较小的动作粒度都有相关的研究,但是这些动作通常过于细化,无法理解现实世界的事件,今天要介绍的这篇paper是提出了一项新任务:中间级别的关键事件检测,它的好处就是可以将结构化信息和对事件本身的理解进行连接。

为此作者还举了个例子:“8 月 12 日至 14 日的香港机场抗议”,即每个事件都发生在特定的时间或地点并有一主题,所以旨在从新闻语料库中检测关键事件。为了完成这一任务,面临着两大挑战首先是不同关键事件的主题和时间比较接近,其次是缺标记数据。

论文链接:https://arxiv.org/pdf/2206.04153.pdf

概念

这里首先介绍一些事件挖掘的概念。其实这项工作侧重于从新闻语料库中提取关于一个主题的关键事件,进而有助于人们了解该主题的整体情节并获取有用的知识。

关键事件(Key Even):关键事件是指关于特定主题的一组主题连贯的文档,并且对应在特定时间或地点发生的真实事件。

在日常中人们通常使用不同的方式描述同一件突发事件,尽管描述的形式可能不同,但是大家都基本会使用事件的一些关键短语,也就是说在关键短语上大家都是相同的,比如时间、地点和主题,这些其实也是关键事件的最重要信息,一但事件确实形成热点,那这些事件指示短语将在时间维度上成为可以识别关键事件的频率峰值,基于这一先验前提,作者又进行如下的一些概念定义:

高峰短语(Peak Phrase):(p, t)是短语 p 和日期 t的元组,表示 p 在 t上异常频繁出现,那这就说明当前事件很可能是来自当天发生的关键事件,同时这里之所以没有使用单个单词而是使用短语,作者是认为短语相对来说携带更丰富的语义信息。

关键事件监测(Key Event Detection):给一个关于某一主题的语料(D, T),其中𝑑 ∈ D 是在某个时间date 𝑡(𝑑) ∈ T发表的文章,我们的目标就是去得到一组聚类簇K = {𝐾1, 𝐾2, . . . , 𝐾𝑀 },每一个代表一个关键事件,每两个簇没有交集。

同时作者这里也稍微简单介绍了一下收集某主题文档语料的方法:就是使用关键字(具体的使用的是BM25)作为query然后去检索大量的文章,然后如果检索回来的文章不是在事件发生的事件内发表的就抛弃不要了,当然最后召回的文章里面会有大量的噪声,不过没关系,因为这里要做的并不是需要在一份干净的数据集上聚类,而仅仅是抽取关键事件。

方法

作者这里提出了一个无监督框架命名为EvMine,总体框架如下:主要分为三部分,我们一点点来解读

(1)Quality Phrase Mining

首先是从语料中抽取短语,作者这里用的是UCPhrase方法,其是一种无监督的方法,主要作用就是抽取高质量短语,具体的就是先去挖掘一些高频出现的短语作为silver labeled,然后以此训练一个轻量级的CNN model,更详细的大家可以去看paper中列出的文献【14】。

UCPhrase方法选出的短语只考虑了质量,为了更加准确,作者这里进一步使用后tf-idf来进行过滤即过滤掉那些太常见或者太少见的短语。

tf-idf相信大家都很熟悉了,其是频率和逆文档率的乘积。最后使用的过滤门限是70%,当然了作者也说了框架对60%-80%这段的门限不是特别敏感,因为后续还会进一步选择时间频繁的峰值短语作为关键事件指示特征。

(2)Event-Related Peak Phrase Detection

就像开头说的,在一定时间内突发的某些短语很有可能就是关键短语,基于这个道理作者提出了ttf,具体量化如下:

𝑓 𝑟𝑒𝑞𝑡 (𝑝)就是短语p在t这一天的频率,𝑛𝑡是我们要往后考虑的天数,因为一件事爆发后后面持续好几天人们都会讨论,可以看到作者在公式里面用了衰减权重。

除了上述ttf,还应该考虑真真作为一个关键事件的短语,其应该是具有一定特殊性的,于是这里又定一个类似逆文档率的itf量化指标:

它的分子是文章包含的一段时间内(即使有的天数没有文字也算)所有天数总和,分母是有短语出现的天数。所以如果一个短语是关键事件短语,那么它应该只在相关时间内出现导致具有一个高的itf值,相反如果在事件发生这段时间内,短语频繁出现在所有文章中,大概率也不是关键短语,会有一个低的itf值。

所以最后总的公式是:

(3)Event-Indicative Peak Phrase Clustering

这里主要就是将上述抽取的短语进行聚类,将同一事件的关键短语聚在一起,这里需要考虑两个事情第一就是在同一天的两个的峰值短语是否属于同一个事件,第二连续几天的两个峰值短语是否属于同一事件。前者有助于区分具有重叠时间段的关键事件,后者是检测持续数天的事件。为此作者这里构建了graph结构,具体如下:

首先是提取关键短语的表征,这里考虑了短语本身和其上下文,短语本身的话就是将其所在的句子送到预训练模型然后pooling短语那几个token对应的embedding就行,上下文就是把句子中短语处用[mask]替换然后重新送到句子中,提取[mask]处的embedding就行。最后将两个向量concatenate就可以啦,当然了假设该短语一共出现𝑁𝑝次,那最后就整个再取一次平均就行如下:

接下来就是具体的建造图谱啦,图谱的节点就是之前说的(𝑝𝑖 , 𝑡𝑖 )由短语和其出现的时间组成。

边的话这里有两种:

一种是对于同一天出现的两个节点,它们之间会进行相连,边的权重是由npmi score 决定的,这个npmi score 是什么意思呢?它的原理是:假设一对节点偶然出现的概率是p,但是真实出现的概率为q,当q大于p就代表它们不是“偶然”同时出现,所以最后的npmi score定义如下(附录A):

这里看着复杂就是就两个概率,一个是独立概率一个是联合概率,所以npmi score越大越代表不是“偶然”同时出现,同时考虑到一些近义短语比如“Hong Kong Airport” 和“Hong Kong International Airport”,由于一篇文章通常只使用其中的一种短语(个人写作习惯等等造成的),所以会导致npmi score的分数比较低,所以这里作者又加了一个相似度即用上述说的embedding计算余弦相似度,所以最后的边权重是:

另外一种边是对于连续几天的两个峰值短语,如果它们是同一个短语,就默认是来自同一个事件,由于前面一种边的权重最大值是1,所以为了区分这里设置变的权重时是一个恒定值𝑤 > 1,这样在后续利用这个graph做社区发现的时候算法就会强制将连续日峰值相同短语放入同一个簇中。

有了上述的graph后就可以使用一些社区发现算法进行聚类啦,具体的作者使用的是Louvain。

(4)Iterative Key Event Document Selection

之前其实都是靠短语规则匹配得到的事件以及其相关的文章,但是有可能会遗漏一些文章即本身也是说相关事件的但是短语没有匹配上,为此这里作者就想再训练一个分类器去识别出这一部分文章,这就是总体思路。

具体的文章表征还是预训练模型,既然要训练就得有监督样本,这里还是使用之前的挖掘的短语来挖掘给相关文章打分,这里为了获得一份高质量的训练样本,作者把门限卡的比较高,只选取那些置信度比较高的样本,在具体训练的时候,由于这是一个预先不知道类别数的分类,所以这里采用对每个事件进行单独的binary classifiers而不是多分类,最后在分类完后作者为了确保准确率还进行了一些后处理,其实就再用了一下之前说的时间信息。

实验结果

总体上不错,同时作者还给了一些case:

总结

(1) 做什么还是得抓住本质,事件挖掘这个任务最本质的一条线索就是短时间内大规模爆发,有了这个先验,我们就可以从时间维度下手,至于怎么设计可以千千万,但是这个时间维度或者说方向是至关重要的。

(2) 构图挖掘这是一个常见的手段,大家可以试着多用用graph这种结构来做一些事情。

 关注

欢迎关注,下期再见啦~

欢迎关注笔者微信公众号:

github:

Mryangkaitong · GitHubhttps://github.com/Mryangkaitong

知乎:

小小梦想 - 知乎

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值