首页 昆明信息港 下载客户端 关于彩龙 论坛须知

bert:关系抽取模型实践

        bert是一个很复杂的系统,它是自然语言处理NLP的升级版,在2018年发布的时候在自然语言处理界引发轩然大波,效率和精准度都有大幅提高,深受人们的欢迎。下面有一个实践的例子,我这次先介绍一下这个例子和简单步骤,有机会再为大家讲解其他的。

        一个比赛的例子,其目的是从给定的一个句子中抽取所有三元组。

        项目代码地址:https://github.com/yuanxiaosc/Entity-Relation-Extraction

        

前期准备的数据预处理类

bert的重中之重就是create_model,他定义下具体的下游的工作。


python 使用时需要注意版本问题  这个项目是用的版本为 3.6+

TensorFlow-gpu 安装时需要制定版本,这个项目使用的版本为  1.12.0

不然会报错

如果运算是用gpu运算,请下载gpu版本的TensorFlow

需要准备google中文训练模型,百度自行下载放入pretrained_model文件夹中



准备关系分类数据

(因为我们是自己测试,所以需要将predicate_data_manager.py 中的Competition_Mode 设为 False)

python bin/predicate_classifiction/predicate_data_manager.py

这条命令跑完会提示Competition_Mode到底是false还是true,如果是本地得分务必保证为false,否则test数据不全,到后边得不到评分


关系分类模型训练

python run_predicate_classification.py --task_name=SKE_2019 --do_train=true --do_eval=false --data_dir=bin/predicate_classifiction/classification_data --vocab_file=pretrained_model/chinese_L-12_H-768_A-12/vocab.txt --bert_config_file=pretrained_model/chinese_L-12_H-768_A-12/bert_config.json --init_checkpoint=pretrained_model/chinese_L-12_H-768_A-12/bert_model.ckpt --max_seq_length=128 --train_batch_size=32 --learning_rate=2e-5 --num_train_epochs=6.0 --output_dir=./output/predicate_classification_model/epochs6/


这里简单的解释一下参数的含义


task_name 任务的名字,这里我们Fine-Tuning MRPC任务

do_train 是否训练,这里为True

do_eval 是否在训练结束后验证,这里为True

data_dir 训练数据目录,配置了环境变量后不需要修改,否则填入绝对路径

vocab_file BERT模型的词典

bert_config_file BERT模型的配置文件

init_checkpoint Fine-Tuning的初始化参数

max_seq_length Token序列的最大长度,这里是128

train_batch_size batch大小,对于普通8GB的GPU,最大batch大小只能是8,再大就会OOM

learning_rate

num_train_epochs 训练的epoch次数,根据任务进行调整

output_dir 训练得到的模型的存放目录



准备序列标注数据

python bin/subject_object_labeling/sequence_labeling_data_manager.py 


序列标注模型训练

python run_sequnce_labeling.py --task_name=SKE_2019 --do_train=true --do_eval=false --data_dir=bin/subject_object_labeling/sequence_labeling_data --vocab_file=pretrained_model/chinese_L-12_H-768_A-12/vocab.txt --bert_config_file=pretrained_model/chinese_L-12_H-768_A-12/bert_config.json --init_checkpoint=pretrained_model/chinese_L-12_H-768_A-12/bert_model.ckpt --max_seq_length=128 --train_batch_size=32 --learning_rate=2e-5 --num_train_epochs=9.0 --output_dir=./output/sequnce_labeling_model/epochs9/


预测阶段

关系分类模型预测

python run_predicate_classification.py --task_name=SKE_2019 --do_predict=true --data_dir=bin/predicate_classifiction/classification_data --vocab_file=pretrained_model/chinese_L-12_H-768_A-12/vocab.txt --bert_config_file=pretrained_model/chinese_L-12_H-768_A-12/bert_config.json --init_checkpoint=output/predicate_classification_model/epochs6/model.ckpt-487 --max_seq_length=128 --output_dir=./output/predicate_infer_out/epochs6/ckpt487


把关系分类模型预测结果转换成序列标注模型的预测输入

python bin/predicate_classifiction/prepare_data_for_labeling_infer.py


序列标注模型预测

python run_sequnce_labeling.py --task_name=SKE_2019 --do_predict=true --data_dir=bin/subject_object_labeling/sequence_labeling_data --vocab_file=pretrained_model/chinese_L-12_H-768_A-12/vocab.txt --bert_config_file=pretrained_model/chinese_L-12_H-768_A-12/bert_config.json --init_checkpoint=output/sequnce_labeling_model/epochs9/model.ckpt-1237 --max_seq_length=128 --output_dir=./output/sequnce_infer_out/epochs9/ckpt1237


生成实体-关系结果

python produce_submit_json_file.py


评价

关系抽取模型性能

python bin/evaluation/evaluate_classifiction.py


实体抽取模型性能

python bin/evaluation/evaluate_labeling.py 


网友评论

4条评论

发表

网友评论

4条评论

发表

最新评论

11月30日 15:39

11月29日 20:03

11月29日 16:45

11月29日 16:30

推荐文章

彩龙

Copyright © 2008-2021 彩龙社区 版权所有 All Rights Reserved.

免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。

经营许可证编号:滇B2-20090009-7

下载我家昆明APP 下载彩龙社区APP