Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
B

Bert-In-Relation-Extraction

> 编程语言
Open source

使用Bert完成实体之间关系抽取

756 stars0 likes0 views
WebsiteGitHub

About

使用Bert完成实体之间关系抽取

Bert In Relation Extraction

大创所需,所以写了一个模型用来完成关系抽取(模型很简单,一拍脑袋想的然后就写了)

假如项目对你有用的话,欢迎Star。(别光fork不给star哇 (´・ω・`) 搞得没啥动力更新和回复Issue了。。。 )

最后在百度DuIE数据集的完整测试集上达到95.37%正确率

PS1:最近:我弄的一个自然语言处理仓库,用Pytorch实现了很多自然语言处理常用的任务,可以参考参考 https://github.com/Ricardokevins/Kevinpro-NLP-demo

PS2:我目前不再做关系抽取的相关工作,所以这个repo理论上不会增加新的feature了,但是有bug或者需要升级代码api可以在issue里留言,我会收到邮件并回复,请不要用私人联系方式

效果:

…

使用方法

准备

  1. 将DUIE文件路径放置于代码同目录(或者自己的数据,具体可见loader.py),更加具体的获取和数据处理见下文

  2. 将bert-base-chinese放置于同目录下的bert-base-chinese下或者自行指定位置

  3. 安装pytorch,cuda,transformer,numpy等组件(实际测试可运行环境为pytorch=1.5.1 transformers=2.5.1)

train and eval

(注意,在此之前,请做好数据的获取和预处理,步骤见文)

python3 main.py执行训练,并得到Fine-Tuing后的BERT

python3 demo.py得到样例输出,或自行阅读代码,修改test函数的传入参数内容即可自定义。

如果仅用于测试和实际使用,可以下载已经训练好的Model,然后调用demo.py下对应函数

caculate_acc:计算每一个类别的正确率

demo_output:随机选择样本,输出原文,实体对以及预测的关系,即实例输出

Model download(92.5%正确率的) 链接:https://pan.baidu.com/s/1f-sXZTzvb0Bn0qGAdTRSSg 提取码:bert

Model download(95.37%正确率的) 链接:https://pan.baidu.com/s/1nbC4qZUWT3DZUIAGVT1Tyw 提取码:bert

PS:截至2021.12.18 模型被下载了300多次了,只有43个star...... QAQ

数据

数据使用的是百度发布的DUIE数据,包含了实体识别和关系抽取

旧链接:

原数据地址:https://ai.baidu.com/broad/download?dataset=dureader

由于百度可能重新组织了数据集的页面,所以旧链接似乎用不了了,我去AIStduio里找了一个我印象里差不多的(关键词是DUIE,Knowledge Extraction) 你们可以根据自己的需要去找自己喜欢的数据集

新链接:https://aistudio.baidu.com/aistudio/datasetdetail/88472

打开后在左侧栏选择knowledge extraction,然后如下界面点击下载train_data.json和dev_data.json,然后放到对应的位置

运行loader.py里的prepare_data,观察到目录里生成了train.json和dev.json

截止这里,数据的预处理完成了,可以运行main和demo

我对数据进行了预处理,提取关系抽取需要的部分

关系设定有49类,还是非常的丰富的

…

数据的格式如下,ent1和ent2是实体,rel是关系

Model

模型就是直接使用Bert用于序列分类的(BertEncoder+Fc+CrossEntropy)

具体的处理就是把ent1,ent2和sentence直接拼接送进模型

相对我之前对Bert的粗糙处理,这里加上了MASK-Attention一起送进模型

Result

从百度的原数据中选择20000条,测试数据2000条(原数据相对很小的一部分)

训练参数:10 Epoch,0.001学习率,设置label共有49种(包含UNK,代表新关系和不存在关系)

然后在训练前和训练后的分别在测试数据上测试,可以看到Fine-Tuing高度有效

测试集正确率达到 92.5%

修正:后来在所有的数据上训练和测试,测试数据36w,测试数据4w,eval正确率95+%

实际测试

在数据中抽取一部分实际测试

效果不错

2020.11.6:修复了demo.py里的Bug,无需bert-base-chinese依赖

2021.2.3 :更新了demo.py,优化了结构

2021.2.4: 更新了readme关于数据获取部分的说明,上传和更新了第二次训练95%Acc的模型文件

2021.3.6: 修改了模型的定义,更新了代码的结构

2022.2.23: 修复了对旧模型文件的兼容性BUG,目前可以流畅的用demo.py加载新训练的模型和我公开的训练后模型

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Python

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言