独家 | ​采用BERT的无监督NER(附代码)


作者:Ajit Rajasekharan

翻译:陈之炎

校对:王雨桐

本文约8700字,建议阅读10+分钟。

本文介绍了一种无监督命名实体识别(NER)的方法。

图1. 展示了未微调的BERT(bert-large-cased)无监督NER标记的句子样本

上图仅挑选了用这种方法(BERT)标记的几个实体类型。标记500个句子可以生成大约1000个独特的实体类型——其中一些映射到如上所示的合成标签。

BERT模型无法区分GENE和PROTEIN,因为这些实体的描述符(descriptors)与屏蔽词(masked terms)的预测分布落在同一尾部区域(所以无法将它们与基本词汇表中的词汇区分开来)。区分这些密切相关的实体可能需要对特定领域的语料库进行MLM微调,或者使用scratch中自定义词汇进行预训练(下文将进一步阐述)。

 

TL;DR

在自然语言处理中,为了在句子中识别出感兴趣的实体(NER),如人物、地点、组织等, 我们需要对句子进行标记。其中我们可以手动对每个句子进行标记,或通过某种自动的方法对每个句子进行标记(通常使用启发式方法来创建一个噪声/弱标记的数据集)。随后用这些标记好的句子训练模型以用于识别实体,这可以看作一个监督学习任务。

 

本文描述了一种无监督NER的方法。NER是使用BERT模型在没有标记句子的情况下无监督地完成的,并且BERT模型仅在屏蔽词模型目标的语料库上进行了无监督训练。

 

该模型在25个实体类型(维基文字语料库)小型数据集上的F1得分为97%,在CoNLL-2003语料库上的人员和位置的F1得分为86%。 对于CoNLL-2003语料库的人员、位置和组织,F1得分较低,仅为76%,这主要是由于句子中实体的歧义(在下面的评估部分中进行了阐述)。完成这两项测试时都没有对测试的数据进行任何模型的预训练/微调(这与在特定领域数据上对模型进行预训练/微调,或在监督训练中使用带标签的数据形成了鲜明对比)。

它是如何工作?

如果要问术语(term,术语指文章中的单词和短语)的实体类型到底是什么,即使我们以前从未见过这个术语,但是也可以通过这个术语的发音或句子结构猜得八九不离十,即:

  • 术语的子词结构为它的实体类型提供了线索。

    Nonenbury是_____。

这是一个杜撰的城市名称,但从它的后缀“bury”可以猜出这可能是一个地点。此时即便没有任何语境,术语的后缀也给出了实体类型的线索。

  • 句子结构为术语的实体类型提供了线索。

    他从_____飞到切斯特。

此处句子的语境给出了实体类型的线索,未知的术语是一个地点。即便以前从未见过它,但也可以猜测出句子中的空白处是一个地点(如:Nonenbury)。

BERT的 MLM前端(Masked Language Model head)(MLM-图7)可以对上述屏蔽的候选词进行预测,如前所述:它的训练目标是通过预测句子中空白的单词来进行学习。然后在推理过程中使用这种学习后的输出对屏蔽术语进行预测,预测是基于BERT固定词汇表的概率分布。这种输出分布有一个明显短小的尾部(大约小于总数的0.1%),其中包括了术语语境敏感实体类型的候选词,此短尾便是用BERT词汇表表示的语境敏感术语的标识。例如句子中屏蔽位置的语境敏感标识如下所示:

Nonenbury是_____。

语境敏感性预测:村庄(village,Village) 、小镇(hamlet,Hamlet)、 聚居区、教区村、农场 、小镇(Town,town)。

BERT固定词汇表(bert-large-cased 为28996个词)是一组通用的描述符集合(如:专有名词、普通名词、代词等)。通过下述聚类过程获得这个描述符集合的子集(有可能重叠),其特征为一个独立于句子语境术语的实体类型。这些子集是独立于语境的术语标识。在BERT的词汇表中获取接近语境敏感标识的实体类型的过程如下:

['villages', 'towns', 'village', 'settlements', 'villagers', 'communities', 'cities']
['Village', 'village']
['city', 'town', 'City', 'cities', 'village']
['community', 'communities', 'Community']
['settlement', 'settlements', 'Settlement']
['Township', 'townships', 'township']
['parish', 'Parish', 'parishes']
['neighborhood', 'neighbourhood', 'neighborhoods']
['castle', 'castles', 'Castle', 'fortress', 'palace']
['Town', 'town']

在BERT词汇表的嵌入空间中实现最近的匹配函数(基于单词嵌入的余弦相似度),匹配函数在语境敏感标识/集群和语境独立标识/集群之间产生一个表示术语的NER标签的语境独立标识子集。

具体来说,m组术语 {B1,B2,C3,…. Bm} 构成语境敏感标识的集合, n组术语{C11、C12、C13、… Ck1}、{C21、C22、C23、… Ck2}、…{Cn1、Cn₂、Cn₃、… Ckn}构成语境独立标识,生成带有NER标签的语境独立标识子集(如下图2)。

图2. 句子的NER标记

  1. 经过最小预处理后,将带有屏蔽词的句子输入到模型中。 

  2. 得到BERT词汇表中28996个词汇的前10位预测术语。 

  3. 这10个术语在BERT的字嵌入空间中通过一个函数重新进行排序。 

  4. 重新排序后排位位于顶部的k个术语以及6000个集群(离线计算)作为输入,输入到输出匹配集群的集群匹配函数之中。 

然后,这些集群的标签(可以是一次性手动标记,或在某些用例中使用)聚合后输出NER标签。 在图中执行3、4和5的函数均在BERT的嵌入空间中使用了单词向量之间的余弦相似性,一次性离线生成约6000个集群也是通过计算BERT词嵌入空间的余弦相似度完成的。 图中BERT基模型隐含的大小为768。文中BERT large cased示例隐含大小为1024。

给定语境独立标识的数目,可以从BERT的词汇表中自动获取数千个标识(bert-large-cased 为6000)。利用这种方法,可以实现在细粒度级别上对大量实体类型进行无监督识别,而无须对数据进行标记。

上述无监督的NER方法应用十分广泛:

  • 通过BERT词汇表中的其他词汇,BERT的原始词嵌入可以捕获BERT有用信息和可分离信息(通过词汇量小于0.1%直方图尾进行区分),用它可以生成6000多个集群。

  • 带有MLM head的BERT模型输出经过转换之后,可用于对屏蔽词进行预测。这些预测结果也有一个易于区分的尾部,这一尾部可用于为术语选择语境敏感标识。

执行无监督NER的步骤

 

1. 一次性离线处理

一次性离线处理为从BERT的词汇表中获取的语境独立的标识集合创建映射,将其映射成单个描述符/标签。

第1步:从BERT的词汇表中筛选对语境敏感的标识术语

BERT词汇表是普通名词、专有名词、子词和符号的混合体,对此集合的最小化过滤是删除标点符号、单个字符和BERT的特殊标记。 进而生成包含21418个术语的集合--普通名词和专有名词相混合,作为描述实体类型的描述符。

第2步: 从BERT的词汇表中生成语境独立的标识

如果简单地从它的尾部为BERT词汇表中的每个术语创建语境独立标识,即便选择较高的余弦相似阈值(对于bert-large-cased模型来说,大约有1%的术语位于平均余弦阈值超过0.5的尾部),也会得到数目相当大的集群(大约20000个)。即便有这么大量的集群,也无法捕捉到这些标识之间的相似性。 所以我们要:

  • 迭代BERT词汇表中的所有术语(子词和大多数单

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值