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

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

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

作者&编辑 | 小Dream哥

前述

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

因此,必然会有工作考虑利用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模型要一起优化,所以总的损失函数为:

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


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

【关系抽取】详聊如何用BERT实现关系抽取相关推荐

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

    https://mp.weixin.qq.com/s?__biz=MzA3NDIyMjM1NA%3D%3D&chksm=8712ab8db065229bc8ea68f94332be9e03a0 ...

  2. 【信息抽取】如何使用BERT进行关系抽取

    事物.概念之间的关系是人类知识中非常重要的一个部分,但是他们通常隐藏在海量的非结构文本中.为了从文本中抽取这些关系事实,从早期的模式匹配到近年的神经网络,大量的研究在多年前就已经展开. 然而,随着互联 ...

  3. 【文本信息抽取与结构化】详聊文本的结构化【上】

    常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识图谱.信息抽取.文本摘要这些任务中格外明 ...

  4. 【文本信息抽取与结构化】详聊文本的结构化【下】

    常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识图谱.信息抽取.文本摘要这些任务中格外明 ...

  5. 「文本信息抽取与结构化」详聊文本的结构化「下」

    2020-02-19 08:20:08 常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识 ...

  6. 信息抽取(二)花了一个星期走了无数条弯路终于用TF复现了苏神的《Bert三元关系抽取模型》,我到底悟到了什么?

    信息抽取(二)花了一个星期走了无数条弯路终于用TF复现了苏神的<Bert三元关系抽取>模型,我到底悟到了什么? 前言 数据格式与任务目标 模型整体思路 复现代码 数据处理 数据读取 训练数 ...

  7. 利用Bert进行关系抽取

    Bert模型是谷歌2018年10月底公布的,反响巨大,效果不错,在各大比赛上面出类拔萃,它的提出主要是针对word2vec等模型的不足,在之前的预训练模型(包括word2vec,ELMo等)都会生成词 ...

  8. 【信息抽取】如何使用循环神经网络进行关系抽取

    事物.概念之间的关系是人类知识中非常重要的一个部分,但是他们通常隐藏在海量的非结构文本中.为了从文本中抽取这些关系事实,从早期的模式匹配到近年的神经网络,大量的研究在多年前就已经展开. 然而,随着互联 ...

  9. 【信息抽取】如何使用卷积神经网络进行关系抽取

    事物.概念之间的关系是人类知识中非常重要的一个部分,但是他们通常隐藏在海量的非结构文本中.为了从文本中抽取这些关系事实,从早期的模式匹配到近年的神经网络,大量的研究在多年前就已经展开. 然而,随着互联 ...

  10. 【文本信息抽取与结构化】深入了解关系抽取你需要知道的东西

    常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式.这一点在知识图谱.信息抽取.文本摘要这些任务中格外明 ...

最新文章

  1. ssh其他机器的Expect脚本
  2. retina 负样本回归增强loss
  3. centos安装时各个版本的含义
  4. abaqus pythonreader_【技术邻】Abaqus里应用Python的一些技巧
  5. android menu item 显示,Android 如何通过menu id来得到menu item 控件 .
  6. Qt SizeHint()
  7. python机器学习-乳腺癌细胞挖掘
  8. 网站性能优化——雅虎14条
  9. CSS的行内样式与内联样式,看完就会了
  10. 基础算法练习200题07、编框
  11. wordpress漏洞工具_WordPress自由职业者,设计师和开发人员的43种顶级工具
  12. 用友U8案例实验应收管理后台配置
  13. blender布尔运算差值看不出效果/blender布尔差值无效
  14. JS中常用的函数求和方法总结【五种方法】
  15. 使用jQuery重置(reset)表单的方法
  16. 9 EDA实用技术与教程【Verilog深入】
  17. 2022团体程序设计天梯赛
  18. 免费共享给大家一些免费的代理服务器(包括sock http https)
  19. 【buildroot】buildroot的相关make命令
  20. 股票之四大支撑法则(平台,趋势,均线,缺口)

热门文章

  1. 05-python中的异常
  2. [4.6校内训练赛]
  3. css3的新属性 新增的颜色--- 透明度---两种渐变---定义多张背景图--background-size...
  4. Linux下vsftpd的安装,Java上传文件实现。
  5. 转:初学 Java Web 开发,请远离各种框架,从 Servlet 开发
  6. 全双工音频播放器在c#中使用waveIn / waveOut api
  7. Windows RPC Demo实现
  8. BITED数学建模七日谈之一:参加全国大学生数学建模比赛前你需要积累哪些
  9. OpenStack云计算快速入门之三:OpenStack镜像管理
  10. Linux下的iftop命令介绍