【文本信息抽取与结构化】详聊如何用BERT实现关系抽取

经常在想,天然语言处理到底在作的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在作一件事情,即将天然语言转化为一种计算机可以理解的形式。这一点在知识图谱、信息抽取、文本摘要这些任务中格外明显。不一样的任务的差别在于目标的转化形式不同,于是不一样的任务难度、处理方式存在差别。web


这个系列文章【文本信息抽取与结构化】,在天然语言处理中是很是有用和有难度的技术,是文本处理与知识提取不可或缺的技术。算法


BERT这么强大的预训练模型,固然会想着把他利用起来,本篇介绍如何利用BERT进行关系抽取。微信


做者&编辑 | 小Dream哥app

前述
机器学习

关系分类与提取是一个重要的NLP任务,其主要目标是提取出实体以它们之间的关系。在BERT以前,最有效的关系分类方法主要是基于CNN或RNN。最近,预训练BERT模型在许多NLP的分类和序列标注任务中都得到了很是好的结果。svg


所以,必然会有工做考虑利用BERT来自关系抽取。关系提取与分类的主要难点在于,其不只仅依赖于两个目标实体的信息,还依赖于句子自己的语义及语法信息。利用BERT强大的编码能力,预期可以同时抽取到文本中的两种特征。事实上也正是如此,目前效果最好的关系抽取模型正是基于BERT的工做,本片介绍几个利用BERT来作关系抽取的工做。函数

R-BERT模型
性能

R-BERT(做者这样称呼),是我调研到的第一篇用BERT作RE的模型,因此笔者先介绍这个模型。学习


1) 模型结构优化

Wu S , He Y . Enriching Pre-trained Language Model with Entity Information for Relation Classification[J]. 2019.

如上图所示,是R-BERT的模型结构在模型中,须要注意一下三点:

1.为了使BERT模型可以定位两个实体的位置,做者在每一个句子的开头添加 "[CLS]" ,在第一个实体先后添加特殊字符 "$" ,在第二个实体先后添加特殊字符"#"


2.R-BERT利用了BERT三部分特征进行最后的关系分类:

    (1)[CLS]最终隐含状态向量,这部分提取了句子

             的语义特征

    (2)两个实体的隐含状态向量,这部分提取了实体 

             特征


3.最后,利用拼接三个特征进行关系分类,接一个softmax进行分类

2) 模型运算

下面来说一讲如何获取这三个特征,对于[CLS]特征,利用BERT输出的第一个编码向量,作如下的处理便可获得:

对于两个实体的特征,在训练时,拿到BERT输出对应位置的隐藏向量后作以下的处理便可获得:


获取到3个特征以后,如何进行关系分类呢?模型将上述3个特征拼接起来,而后接一个DENSE层,在经过softmax进行分类,具体运算过程以下:

做者还作了去除了实体先后的标识符的实验,发现模型的F1值从89.25%降到87.98%,代表标识符能够帮助提供实体信息;假如仅仅使用BERT输出层的[CLS]句子向量,会使得模型F1值从89.25%降到87.99%;上述实验证实在关系分类任务中,明确实体的位置,可以提高模型的性能。


可是这仅仅是一个关系分类的模型,在前面的文章咱们介绍过,在关系抽取模型中,其实end-to-end模型才是更合理的方式,下面介绍一种端到端的BERT关系抽取模型。

2  End-to-End BERT RE

1) 模型结构

Giorgi J , Wang X , Sahar N , et al. End-to-end Named Entity Recognition and Relation Extraction using Pre-trained Language Models[J]. 2019.

如上图所示是该模型的结构示意图,模型能够分为两个部分:实体抽取模块和关系分类模块。


1. 实体识别模块

实体抽取模块和咱们前面介绍的实体抽取模块基本相同,感兴趣的同窗能够看以下的文章:

【NLP-NER】如何使用BERT来作命名实体识别

该模型中差别仅仅在于,文本通过BERT进行特征抽取以后,接一个Feed-Forward层和sonftmax,而不是CRF。


2. 关系分类模块

咱们重点来看关系抽取的模块,该模块的输入由2个部分组成:实体抽取信息以及BERT编码信息。将实体抽取模块输出的BIOES类别信息,编码成固定维度的向量。而后将该向量与BERT的编码向量拼接起来,做为关系抽取模块的输入,以下公式所示:

该输入并行的经过了两个FFN层,称为FFN-head和FFN-tail,如上面的模型结构图所示,获得两个向量。

随后,将这两个向量经过一个 Biaffine层,预测出属于每一个关系的类别:

这里U的维度是m*C*m,W的维度是C*2m。m是FFN层输出的向量的维度,C是关系的类别数。

2)损失函数

如上公式所示,是该模型采用的损失函数,其中S_r是模型预测的样本中真正有的关系的预测得分,即r in R(样本标签里的关系)。S_r_c表示模型预测样本有某一个关系的得分,r in C。


固然,NER模型和RE模型要一块儿优化,因此总的损失函数为:

这个模型的特色是端到端的实现了实体抽取和关系抽取,同时也可以预测多个关系类别。

总结


文本信息抽取与结构化是目前NLP中最为实际且效益最大的任务,熟悉这个任务是一个NLP算法工程师必须要作的事情。


读者们能够留言,或者加入咱们的NLP群进行讨论。感兴趣的同窗能够微信搜索jen104,备注"加入有三AI NLP群"


下期预告:详述关系识别模型

知识星球推荐

扫描上面的二维码,就能够加入咱们的星球,助你成长为一名合格的天然语言处理算法工程师。


知识星球主要有如下内容:

(1) 聊天机器人;

(2) 知识图谱;

(3) NLP预训练模型。


转载文章请后台联系

侵权必究

往期精选


本文分享自微信公众号 - 有三AI(yanyousan_ai)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索