Handling Rare Entities for Neural Sequence Labeling文章阅读

    科技2024-07-28  63

    Handling Rare Entities for Neural Sequence Labeling

    这篇文章是发表在ACL2020年上的,哈工大和蚂蚁金服做的工作,代码并没有开源。

    1.Motivation:

    实体的OOV和LF(低频)问题。作者在CONLL-03上做了一个调查,大部分实体,都是这种“稀有实体” 此前工作有两种思路: ①、引入外部知识,如字典,或者词性标注来辅助NER(既然不知道,那就多查字典) ②、预训练模型,如BERT(既然不知道,就读万卷书,再来看) 但是这两种思路都没有确切的解决训练集和测试集(外界)的不一致性。而且对于“张三”“李四”这种实体,根本无法由字典或者外部知识得到,再来个“王五”,模型依旧不认识。而且跨领域效果很差。

    所以作者提出了一种思路:实体和自身具体词汇并没有太大关系。比如“entity摔倒了”,人们根据“摔倒了”判断前面entity大概是个人。或者“entity发布了一则通知”,则entity大概是个机构。

    这就是文章的中心思想,至于后面的LCR(解决OOV),DEI(解决LF),虽然看起来天差地别,花里胡哨,其实核心思想就是上面这句话。(作者大大的坏,这么简单的思路,藏着掖着,组会前差点没看明白)

    2.Overview

    这个图片也费了我不少脑细胞,提出的LCR和DEI往上跑,模型在下头,这是咋回事?? 其实LCR和DEI的消息传递机制,就是一个共享参数而已,具体模型,并没有输出。

    3.LCR:局部文本重构

    模型目的是为了解决OOV问题,这里是用了一个典型的VAE。 大概思想是,将两个实体间的文本压缩成一个LCR,然后将LCR解压出序列。 那么问题来了,为啥要这么麻烦呢?因为泛化时很可能和训练集文本不一样,所以不能用绝对的判别式。比如“???摔倒了”和“???摔跤了”,有细微的差别。 VAE首先在one-2-many场景下效果很好,其次相当于使模型结果逼近一个正态分布,这样就允许了输入文本的随机性,增加了鲁棒。 公式没啥好说的,标准VAE,懒得写。

    4.DEI:去词汇化实体识别

    最开始我最懵的就是这一点,作者没有明确说自己的思路,而且用了两个差别如此之大的模型,又让我掉了不少头发(也可能是我太菜) 其实这个模型核心就是一个【去词汇化】。前面一个模型针对OOV,可以随便MASK,但是对于低频词汇这样无异于自废武功,好好的数据给全MASK上了肯定不行啊。所以作者使用了个去词汇化的方法。 去词汇化的思想,就是让词汇变得非常模糊,不具体,如张三李四,把他们去词汇化为“PER”类别的实体,是非常符合逻辑的,因为到底是张三还是李四并不重要,而且泛化的时候再来个张三李四的概率太低了。加入了去词汇化,就算100个张三,1个李四,在模型眼里,其实就只有101个“PER”类别的实体而已,模型只需要学习这101个“PER”的上下文就行了。 所以,其实,DEI的核心思路跟LCR是一毛一样的,只是一个是OOV,一个是LF,解决问题的方法差别很大。 那么问题来了,怎么让模型知道谁是“PER”呢,毕竟泛化时是不可能打上标签的啊。 所以就需要使用对抗训练的方法。 传统的对抗训练,都是利用一些带噪声的训练样本,来提升模型鲁棒性。但是这篇文章里,需要得到的,就是带噪声的训练样本。 内在的思路很直观:“只要我去词汇化后,模型不认识这到底是不是去词汇化的就行”。 通俗来讲,训练数据都是“张三摔了一跤”,“李四摔倒了”,如果按照去词汇化的思路来说,应该换成“PER摔了一跤”,“PER摔倒了”这样。但是泛化时,不可能进来一个PER啊,所以模型必须将张三,李四,王五,和PER看做同一个东西。 所以需要用到对抗训练,去词汇化即把训练数据的标签给它打上,然后和原训练数据送到MLP里面看看它认识不。最终,能骗过MLP就行。

    这个就是对抗训练目标,rnn代表着模型的BiLSTM encoder,D代表我们要骗过的MLP,可以发现,对 MLP来说,我们要求它效果最差。而对外面真正涉及到模型的RNN,我们要求它效果最好。

    5.实验

    效果当然很好,特别是对OOV,低频词。这个模型最关键的一点是,不需要引用外部知识,也不需要额外数据,仅依靠训练集本身,就可以超过引用外部知识和BERT预训练的效果,还是很牛逼的。 下面这一张图也挺好的 图中大点代表低资源词,小点代表其他词。可以发现,模型真正做到了一视同仁,对低资源,高资源的数据,做到了没有偏向。(张三,李四,都看成人,即使有100个张三1个李四)

    Processed: 0.009, SQL: 9