README_CNSCHEMA_CN.md

June 3, 2024 · View on GitHub

Documentation PyPI GitHub Documentation Open In Colab

English | 简体中文

开源中文知识图谱抽取框架开箱即用特别版DeepKE-cnSchema

DeepKE 是一个开源的知识图谱抽取与构建工具,支持低资源、长篇章、多模态的知识抽取工具,可以基于PyTorch实现命名实体识别关系抽取属性抽取功能。此版本DeepKE-cnSchema为开箱即用版本,用户下载模型即可实现支持cnSchema的实体和关系知识抽取。


内容导引

章节描述
简介介绍DeepKE-cnSchema基本原理
中文模型下载提供了DeepKE-cnSchema的下载地址
数据集及中文模型效果提供了中文数据集以及中文模型效果
快速加载介绍了如何使用DeepKE-cnSchema进行实体识别、关系抽取
自定义模型提供了使用自定义数据训练模型的说明
FAQ常见问题答疑
引用本目录的技术报告

简介

DeepKE 是一个开源的知识图谱抽取与构建工具,支持低资源、长篇章、多模态的知识抽取工具,可以基于PyTorch实现命名实体识别、关系抽取和属性抽取功能。同时为初学者提供了详尽的文档Google Colab教程在线演示幻灯片

为促进中文领域的知识图谱构建和方便用户使用,DeepKE提供了预训练好的支持cnSchema的特别版DeepKE-cnSchema,支持开箱即用的中文实体抽取和关系抽取等任务,可抽取50种关系类型和28种实体类型,其中实体类型包含了通用的人物、地点、城市、机构等类型,关系类型包括了常见的祖籍、出生地、国籍、朝代等类型。

中文模型下载

对于实体抽取和关系抽取任务分别提供了基于RoBERTa-wwm-ext, ChineseBERT-wwm, Chinese训练的模型。

模型简称功能Google下载百度网盘下载
DeepKE(NER), RoBERTa-wwm-ext, Chinese实体抽取PyTorchPytorch(密码u022)
DeepKE(NER), BERT-wwm, Chinese实体抽取PyTorchPytorch(密码1g0t)
DeepKE(NER), BiLSTM-CRF, Chinese实体抽取PyTorchPytorch(密码my4x)
DeepKE(RE), RoBERTa-wwm-ext, Chinese关系抽取PyTorchPytorch(密码78pq)
DeepKE(RE), BERT-wwm, Chinese关系抽取PyTorchPytorch(密码6psm)

使用说明

中国大陆境内建议使用百度网盘下载点,境外用户建议使用谷歌下载点。 实体抽取模型中,以Pytorch版DeepKE(RE), RoBERTa-wwm-ext, Chinese为例,下载完毕后得到模型文件:

checkpoints_robert
    |- added_tokens.json          # 额外增加词表
    |- config.json                # 整体参数
    |- eval_results.txt           # 验证结果
    |- model_config.json          # 模型参数
    |- pytorch_model.bin          # 模型
    |- special_tokens_map.json    # 特殊词表映射
    |- tokenizer_config.bin       # 分词器参数
    |- vocab.txt                  # 词表

其中config.jsonvocab.txt与谷歌原版RoBERTa-wwm-ext, Chinese完全一致。 PyTorch版本则包含pytorch_model.bin, config.json, vocab.txt文件。

关系抽取模型中,以Pytorch版DeepKE(RE), RoBERTa-wwm-ext, Chinese为例,下载后为pth文件。

下载模型后,用户即可直接快速加载模型进行实体关系抽取。

数据集及中文基线系统效果

数据集

我们在中文实体识别和关系抽取数据集上进行了实验,实验结果如下

实体识别(NER)

DeepKE使用chinese-bert-wwmchinese-roberta-wwm-ext为基础训练得到了DeepKE-cnSchema(NER)模型。模型所使用的超参数均为预定义的参数。最终经过训练后可以得到如下表的效果

模型 P R F1
DeepKE(NER), RoBERTa-wwm-ext, Chinese 0.8028 0.8612 0.8310
DeepKE(NER), BERT-wwm, Chinese 0.7841 0.8587 0.8197

关系抽取(RE)

DeepKE使用chinese-bert-wwmchinese-roberta-wwm-ext为基础得到了DeepKE-cnschema(RE)模型。模型所使用的超参数均为预定义的参数。最终经过训练后可以得到如下表的效果

模型 P R F1
DeepKE(RE), RoBERTa-wwm-ext, Chinese 0.7890 0.7370 0.7327
DeepKE(RE), BERT-wwm, Chinese 0.7861 0.7506 0.7473

支持知识Schema类型

DeepKE-cnSchema特别版为支持中文领域知识图谱构建推出的开箱即用版本。 CnSchema是面向中文信息处理,利用先进的知识图谱、自然语言处理和机器学习技术,融合结构化与文本数据,支持快速领域知识建模,支持跨数据源、跨领域、跨语言的开放数据自动化处理,为智能机器人、语义搜索、智能计算等新兴应用市场提供schema层面的支持与服务。目前,DeepKE-cnSchema支持的Schema类型如下表所示:

实体Schema

序号实体类型序号实体类型
1cns:人物 YAS2cns:影视作品 TOJ
3cns:目 NGS4cns:生物 QCV
5cns:Number OKB6cns:Date BQF
7cns:国家 CAR8cns:网站 ZFM
9cns:网络小说 EMT10cns:图书作品 UER
11cns:歌曲 QEE12cns:地点 UFT
13cns:气候 GJS14cns:行政区 SVA
15cns:TEXT ANO16cns:历史人物 KEJ
17cns:学校 ZDI18cns:企业 CAT
19cns:出版社 GCK20cns:书籍 FQK
21cns:音乐专辑 BAK22cns:城市 RET
23cns:景点 QZP24cns:电视综艺 QAQ
25cns:机构 ZRE26cns:作品 TDZ
27cns:语言 CVC28cns:学科专业 PMN

关系Schema

序号头实体类型尾实体类型关系序号头实体类型尾实体类型关系
1cns:地点cns:人物cns:祖籍2cns:人物cns:人物cns:父亲
3cns:地点cns:企业cns:总部地点4cns:地点cns:人物cns:出生地
5cns:目cns:生物cns:目6cns:Numbercns:行政区cns:面积
7cns:Textcns:机构cns:简称8cns:Datecns:影视作品cns:上映时间
9cns:人物cns:人物cns:妻子10cns:音乐专辑cns:歌曲cns:所属专辑
11cns:Numbercns:企业cns:注册资本12cns:城市cns:国家cns:首都
13cns:人物cns:影视作品cns:导演14cns:Textcns:历史人物cns:字
15cns:Numbercns:人物cns:身高16cns:企业cns:影视作品cns:出品公司
17cns:Numbercns:学科专业cns:修业年限18cns:Datecns:人物cns:出生日期
19cns:人物cns:影视作品cns:制片人20cns:人物cns:人物cns:母亲
21cns:人物cns:影视作品cns:编辑22cns:国家cns:人物cns:国籍
23cns:人物cns:影视作品cns:编剧24cns:网站cns:网站小说cns:连载网络
25cns:人物cns:人物cns:丈夫26cns:Textcns:历史人物cns:朝代
27cns:Textcns:人物cns:民族28cns:Textcns:历史人物cns:号
29cns:出版社cns:书籍cns:出版社30cns:人物cns:电视综艺cns:主持人
31cns:Textcns:学科专业cns:专业代码32cns:人物cns:歌曲cns:歌手
33cns:人物cns:歌曲cns:作曲34cns:人物cns:网络小说cns:主角
35cns:人物cns:企业cns:董事长36cns:Datecns:企业cns:成立时间
37cns:学校cns:人物cns:毕业院校38cns:Numbercns:机构cns:占地面积
39cns:语言cns:国家cns:官方语言40cns:Textcns:行政区cns:人口数量
41cns:Numbercns:行政区cns:人口数量42cns:城市cns:景点cns:所在城市
43cns:人物cns:图书作品cns:作者44NoneNone其他
45cns:人物cns:歌曲cns:作曲46cns:人物cns:行政区cns:气候
47cns:人物cns:电视综艺cns:嘉宾48cns:人物cns:影视作品cns:主演
49cns:作品cns:影视作品cns:改编自50cns:人物cns:企业cns:创始人

快速加载

实体识别(NER)

用户可以直接下载模型进行使用,具体流程如下:

  1. 进入目录DeepKE/example/ner/standard

  2. 将下载的模型文件夹命名为checkpoints,存放于目录DeepKE/example/ner/standard

  3. 修改 conf/predict.yaml中的参数text为需要预测的文本,并按照下载模型的类别修改conf/config.yaml中的模型名称hydra/modelbert或者lstmcrf(上述链接下载的模型为bert模型)

    使用训练好的模型,只需输入句子“《星空黑夜传奇》是连载于起点中文网的网络小说,作者是啤酒的罪孽”,运行python predict.py后可得到结果,结果显示“星空黑夜传奇”实体类型为经过cnschema对齐后的“网络小说”,“起点中文网”为“网站”,“啤酒的罪孽”为“人物。

    text=“《星空黑夜传奇》是连载于起点中文网的网络小说,作者是啤酒的罪孽”
    
  4. 预测

    python predict.py
    

    最终输出结果

    NER句子:
    《星空黑夜传奇》是连载于起点中文网的网络小说,作者是啤酒的罪孽
    NER结果:
    [('星','B-UER'),('空','I-UER'),('黑','I-UER'),('夜','I-UER'),('传','I-UER'),('奇','I-UER'),('起','B-ZFM'),('点','I-ZFM'),('中','I-ZFM'),('文','I-ZFM'),('网','I-ZFM'),('啤','B-YAS'),('酒','I-YAS'),('的','I-YAS'),('罪','I-YAS'),('孽','I-YAS')]
    

关系抽取(RE)

使用者可以直接下载模型使用,步骤如下:

  1. 进入目录example/re/standard

  2. 修改 conf/predict.yaml中的参数fp为下载文件的路径,conf/embedding.yamlnum_relations为51(关系个数),conf/config.yaml中的参数model为lm

  3. 下载数据集,放入目录example/re/standard/data/origin

  4. 进行预测,需要预测的文本及实体对通过终端输入给程序

    python predict.py
    

    使用训练好的模型,运行python predict.py后,只需输入的句子为“歌曲《人生长路》出自刘德华国语专辑《男人的爱》,由李泉作词作曲,2001年出行发版”,给定的实体对为“男人的爱”和“人生长路”,可得到结果,最终抽取出的关系为经过cnschema对齐后的“所属专辑”。

    将predict.py的_get_predict_instance函数修改成如下范例,即可修改文本进行预测

    def _get_predict_instance(cfg):
        flag = input('是否使用范例[y/n],退出请输入: exit .... ')
        flag = flag.strip().lower()
        if flag == 'y' or flag == 'yes':
            sentence = '歌曲《人生长路》出自刘德华国语专辑《男人的爱》,由李泉作词作曲,2001年出行发版'
            head = '男人的爱'
            tail = '人生长路'
            head_type = '所属专辑'
            tail_type = '歌曲'
        elif flag == 'n' or flag == 'no':
            sentence = input('请输入句子:')
            head = input('请输入句中需要预测关系的头实体:')
            head_type = input('请输入头实体类型:')
            tail = input('请输入句中需要预测关系的尾实体:')
            tail_type = input('请输入尾实体类型:')
        elif flag == 'exit':
            sys.exit(0)
        else:
            print('please input yes or no, or exit!')
            _get_predict_instance()
    
        instance = dict()
        instance['sentence'] = sentence.strip()
        instance['head'] = head.strip()
        instance['tail'] = tail.strip()
        if head_type.strip() == '' or tail_type.strip() == '':
            cfg.replace_entity_with_type = False
            instance['head_type'] = 'None'
            instance['tail_type'] = 'None'
        else:
            instance['head_type'] = head_type.strip()
            instance['tail_type'] = tail_type.strip()
    
        return instance
    

    最终输出结果

    “男人的爱”和“人生长路”在句中关系为“所属专辑”,置信度为0.99
    

    注:运行过程中会自动从huggingface网站中下载example/re/standard/conf/model/lm.yaml文件中指定的模型,如下载失败可以寻找对应镜像网站或者手动下载

联合三元组抽取

用户可以先将上述模型下载至本地,然后使用example/triple中的代码进行三元组抽取。如果单句中存在超过两个以上的实体数,可能在一些实体对中会存在预测不准确的问题,那是因为这些实体对并没有被加入训练集中进行训练,所以需要进一步判断,具体使用步骤如下:

  1. conf文件夹中的predict.yaml中的text修改为预测文本,nerfp修改为ner模型文件夹地址,refp为re模型地址

  2. 进行预测。

    python predict.py
    

    期间将输出各个中间步骤结果,以输入文本此外网易云平台还上架了一系列歌曲,其中包括田馥甄的《小幸运》等为例。

    2.1 输出经过ner模型后得到结果[('田', 'B-YAS'), ('馥', 'I-YAS'), ('甄', 'I-YAS'), ('小', 'B-QEE'), ('幸', 'I-QEE'), ('运', 'I-QEE')]

    2.2 输出进行处理后结果{'田馥甄': '人物', '小幸运': '歌曲'}

    2.3 输出经过re模型后得到结果 "田馥甄" 和 "小幸运" 在句中关系为:"歌手",置信度为0.92。

    2.4 输出jsonld格式化后结果

    {
      "@context": {
        "歌手": "https://cnschema.openkg.cn/item/%E6%AD%8C%E6%89%8B/16693#viewPageContent"
      },
      "@id": "田馥甄",
      "歌手": {
        "@id": "小幸运"
      }
    }
    

自定义模型

实体识别任务(NER)

如果需要使用自定义的数据进行训练,步骤如下:

  1. 下载自定义的数据集,将其放入命名为data的文件夹中

  2. conf文件夹中的train.yaml中的bert_model修改为指定模型,用户可以通过修改yaml文件选择不同的模型进行训练(推荐直接下载模型,设置bert_model为模型路径)

  3. 修改train.yaml中的labelsdata/type.txt中所用到的标签

  4. 进行训练

    python run.py
    

关系抽取任务(RE)

如果需要使用其他模型进行训练,步骤如下:

  1. 下载自定义的数据集,将其重命名为data

  2. conf文件夹中的train.yamllm,lm.yaml中的lm_file修改为指定预训练模型,embedding.yamlnum_relations为关系的个数如51,用户可以通过修改yaml文件选择不同的模型进行训练

  3. 进行训练。

    python run.py
    

FAQ

Q: 这个模型怎么用? A: 开箱即用,下载好模型按照使用说明就能够抽取预定义cnSchema包含的知识。 如果想抽取cnSchema之外的知识,可以使用高级版本自定义数据进行训练哦

Q: 请问有其他cnSchema抽取模型提供吗? A: 很遗憾,我们暂时只能支持部分cnSchema的知识抽取,未来会发布更多的知识抽取模型。

Q: 我训出来比你更好的结果! A: 恭喜你。

Q: 自己数据输入进去编码报错 A: 可能中文输入数据包含了不可见的特殊字符,这些字符无法被某些编码因而报错,您可以通过编辑器或其他工具预处理中文数据解决这一问题。

引用

如果本项目中的资源或技术对你的研究工作有所帮助,欢迎在论文中引用下述论文。

@inproceedings{DBLP:conf/emnlp/ZhangXTYYQXCLL22,
  author    = {Ningyu Zhang and
               Xin Xu and
               Liankuan Tao and
               Haiyang Yu and
               Hongbin Ye and
               Shuofei Qiao and
               Xin Xie and
               Xiang Chen and
               Zhoubo Li and
               Lei Li},
  editor    = {Wanxiang Che and
               Ekaterina Shutova},
  title     = {DeepKE: {A} Deep Learning Based Knowledge Extraction Toolkit for Knowledge
               Base Population},
  booktitle = {Proceedings of the The 2022 Conference on Empirical Methods in Natural
               Language Processing, {EMNLP} 2022 - System Demonstrations, Abu Dhabi,
               UAE, December 7-11, 2022},
  pages     = {98--108},
  publisher = {Association for Computational Linguistics},
  year      = {2022},
  url       = {https://aclanthology.org/2022.emnlp-demos.10},
  timestamp = {Thu, 23 Mar 2023 16:56:00 +0100},
  biburl    = {https://dblp.org/rec/conf/emnlp/ZhangXTYYQXCLL22.bib},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}

免责声明

该项目中的内容仅供技术研究参考,不作为任何结论性依据。使用者可以在许可证范围内任意使用该模型,但我们不对因使用该项目内容造成的直接或间接损失负责。

问题反馈

如有问题,请在GitHub Issue中提交。