资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

信息抽取:多对多关系&实体属性抽取

  • 实体关系,实体属性抽取是信息抽取的关键任务;实体关系抽取是指从一段文本中抽取关系三元组,实体属性抽取是指从一段文本中抽取属性三元组;信息抽取一般分以下几种情况一对一,一对多,多对一,多对多的情况:
  • 一对一:“张三男汉族硕士学历”含有一对一的属性三元组(张三,民族,汉族)。
  • 一对多:“华扬联众数字技术股份有限公司于2017年8月2日在上海证券交易所上市”,含有一对多的属性三元组(华扬联众数字技术股份有限公司,上市时间,2017年8月2日)和(华扬联众数字技术股份有限公司,上市地点,上海证券交易所上市)
  • 多对一:“上海森焱软件有限公司和上海欧提软件有限公司的注册资本均为100万人民币”,含有多对一的属性三元组(上海森焱软件有限公司,注册资本,100万人民币)和(上海欧提软件有限公司,注册资本,100万人民币)
  • 多对多:“大华种业稻麦种子加工36.29万吨、销售37.5万吨;苏垦米业大米加工22.02万吨、销售24.86万吨”,含有多对多的属性三元组(大华种业,稻麦种子产量,36.29万吨)和(苏垦米业,大米加工产量,22.02万吨)

快速开始

进入任务目录

cd wenxin_appzoo/tasks/information_extraction_many_to_many/

代码结构

├── data
│   ├── entity_attribute_data
│   │   ├── dev_data
│   │   │   └── dev.json
│   │   ├── predict_data
│   │   │   └── predict.json
│   │   ├── test_data
│   │   │   └── test.json
│   │   └── train_data
│   │       └── train.json
│   └── entity_relation_data
│       ├── dev_data
│       │   └── dev.json
│       ├── predict_data
│       │   └── predict.json
│       ├── test_data
│       │   └── test.json
│       └── train_data
│           └── train.json
├── data_set_reader
│   └── ie_data_set_reader.py
├── dict
│   ├── entity_attribute_label_map.json
│   └── entity_relation_label_map.json
├── examples
│   ├── many_to_many_ie_attribute_ernie_fc_ch_infer.json
│   ├── many_to_many_ie_attribute_ernie_fc_ch.json
│   ├── many_to_many_ie_relation_ernie_fc_ch_infer.json
│   └── many_to_many_ie_relation_ernie_fc_ch.json
├── inference
│   ├── custom_inference.py
│   └── __init__.py
├── model
│   ├── ernie_fc_ie_many_to_many.py
│   └── __init__.py
├── run_infer.py
├── run_trainer.py
└── trainer
    ├── custom_dynamic_trainer.py
    ├── custom_trainer.py
    └── __init__.py

数据准备

  • 这里我们提供一份已标注的示例数据集。该任务预置网络基于ERNIE-3.0_base模型进行训练,数据集不需要分词。
  • 属性抽取训练集、测试集、验证集和预测集分别存放在./data/entity_attribute_data目录下的train_data、test_data、dev_data和predict_data文件夹下,对应的示例标签词表存放在./dict目录下。
  • 关系抽取训练集、测试集、验证集和预测集分别存放在./data/entity_relation_data目录下的train_data、test_data、dev_data和predict_data文件夹下,对应的示例标签词表存放在./dict目录下。
  • 注:数据集(包含词表)均为utf-8格式。

训练集/测试集

  • 训练集、测试集的数据格式相同,每个样例分为两个部分(train_data、test_data、dev_data文件夹下的数据):

    • "text":文本
    • "spo_list":对应标签
{"text": "倪金德,1916年生,奉天省营口(今辽宁省营口市)人", "spo_list": [{"predicate": "出生日期", "subject": [0, 3], "object": [4, 9]}, {"predicate": "出生地", "subject": [0, 3], "object": [11, 16]}]}
{"text": "基本介绍克里斯蒂娜·塞寇丽(Christina Sicoli)身高163cm,在加拿大安大略出生和长大,毕业于伦道夫学院", "spo_list": [{"predicate": "毕业院校", "subject": [4, 13], "object": [55, 60]}]}

预测集

  • 预测集只有文本(predict_data文件夹下的数据):
{"text": "倪金德,1916年生,奉天省营口(今辽宁省营口市)人"}
{"text": "基本介绍克里斯蒂娜·塞寇丽(Christina Sicoli)身高163cm,在加拿大安大略出生和长大,毕业于伦道夫学院"}

标签词表

  • 标签列表是一个json字符串,key是标签值,value是标签对应id,示例词表采用BIO标注,B表示关系,分为主体(S)与客体(O),如下所示:
{
     "O": 0,
     "I": 1,
     "B-毕业院校@S": 2,
     "B-毕业院校@O": 3,
     "B-出生地@S": 4,
     "B-出生地@O": 5,
     "B-祖籍@S": 6,
     "B-祖籍@O": 7,
     "B-国籍@S": 8,
     "B-国籍@O": 9,
     "B-出生日期@S": 10,
     "B-出生日期@O": 11
}
  • 注意:O, I对应的ID必须是0, 1,B-XXX@O对应的id需要必须为B-XXX@S对应的id+1(B-XXX@s须为偶数,B-XXX@O须为奇数)

训练我的第一个模型

开始训练

  • 使用预置网络进行训练的方式为使用./run_trainer.py入口脚本,通过--param_path参数来传入./examples/目录下的json配置文件。
  • 训练分几个步骤
  1. 请使用以下命令在../../models_hub/中通过对应脚本download_ernie_3.0_base_ch.sh下载模型参数文件,以及其对应配置文件ernie_config.json和词表vocab.txt.
# download_ernie_3.0_base_ch.sh 模型下载
# 进入models_hub目录
cd ./wenxin_appzoo/models_hub/  
sh download_ernie_3.0_base_ch.sh
  1. 基于示例的数据集,可以运行以下命令在训练集(train.txt)上进行模型训练,并在测试集(test.txt)上进行验证;
# 训练属性抽取
python run_trainer.py --param_path ./examples/many_to_many_ie_attribute_ernie_fc_ch.json
# 训练关系抽取
python run_trainer.py --param_path ./examples/many_to_many_ie_relation_ernie_fc_ch.json
  1. 训练运行的日志会自动保存在./log/test.log文件中;
  2. 训练中以及结束后产生的模型文件会默认保存在./output/目录下,其中save_inference_model/文件夹会保存用于预测的模型文件,save_checkpoint/文件夹会保存用于热启动的模型文件

预测我的第一个模型

开始预测

  • 使用预置网络进行预测的方式为使用./run_infer.py入口脚本,通过--param_path参数来传入./examples/目录下的json配置文件。
  • 预测分为以下几个步骤:
  1. 基于示例的数据集,可以运行以下命令在预测集(predict.txt)上进行预测:
# 属性抽取预测     
python run_infer.py --param_path ./examples/many_to_many_ie_attribute_ernie_fc_ch_infer.json
# 关系抽取预测
python run_infer.py --param_path ./examples/many_to_many_ie_relation_ernie_fc_ch_infer.json
  1. 预测运行的日志会自动保存在./output/predict_result.txt文件中。
上一篇
信息抽取:利用ERNIE-Layout进行跨模态信息抽取
下一篇
开放域信息抽取(生成式)