前面介绍完 CasRel模型结构,接下来我们看一下数据集,然后做一个简单的预处理。因为是用 Bert 做分词,就省去了自己建词表的过程,只需要把关系解析出来,供后续流程使用,就可以了。

数据集分析

下载链接:https://www.luge.ai/#/luge/dataDetail?id=5

DuIE2.0是业界规模最大的中文关系抽取数据集,其schema在传统简单关系类型基础上添加了多元复杂关系类型,此外其构建语料来自百度百科、百度信息流及百度贴吧文本,全面覆盖书面化表达及口语化表达语料,能充分考察真实业务场景下的关系抽取能力。

duie_schema.json

{"object_type": {"@value": "人物"}, "predicate": "作者", "subject_type": "图书作品"}

duie_train.json

{"text": "《邪少兵王》是冰火未央写的网络小说连载于旗峰天下", "spo_list": [{"predicate": "作者", "object_type": {"@value": "人物"}, "subject_type": "图书作品", "object": {"@value": "冰火未央"}, "subject": "邪少兵王"}]}

代码示例

1、添加配置项

# config.py
REL_PATH = './data/output/rel.csv'
REL_SIZE = 48
SCHEMA_PATH = './data/input/duie/duie_schema.json'
2、缓存关系表
# process.py
import json
import pandas as pd
from config import *

def generate_rel():
    with open(SCHEMA_PATH) as f:
        rel_list = []
        for line in f.readlines():
            info = json.loads(line)
            rel_list.append(info['predicate'])
        rel_dict = {v: k for k, v in enumerate(rel_list)}
        df = pd.DataFrame(rel_dict.items())
        df.to_csv(REL_PATH, header=None, index=None)

if __name__ == '__main__':
    generate_rel()

本文链接:http://edu.ichenhua.cn/edu/note/479

版权声明:本文为「陈华编程」原创课程讲义,请给与知识创作者起码的尊重,未经许可不得传播或转售!