Skip to content

Latest commit

 

History

History
400 lines (314 loc) · 21.1 KB

README_CNSCHEMA_CN.md

File metadata and controls

400 lines (314 loc) · 21.1 KB

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 实体抽取 PyTorch Pytorch(密码u022)
DeepKE(NER), BERT-wwm, Chinese 实体抽取 PyTorch Pytorch(密码1g0t)
DeepKE(NER), BiLSTM-CRF, Chinese 实体抽取 PyTorch Pytorch(密码my4x)
DeepKE(RE), RoBERTa-wwm-ext, Chinese 关系抽取 PyTorch Pytorch(密码78pq)
DeepKE(RE), BERT-wwm, Chinese 关系抽取 PyTorch Pytorch(密码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

序号 实体类型 序号 实体类型
1 cns:人物 YAS 2 cns:影视作品 TOJ
3 cns:目 NGS 4 cns:生物 QCV
5 cns:Number OKB 6 cns:Date BQF
7 cns:国家 CAR 8 cns:网站 ZFM
9 cns:网络小说 EMT 10 cns:图书作品 UER
11 cns:歌曲 QEE 12 cns:地点 UFT
13 cns:气候 GJS 14 cns:行政区 SVA
15 cns:TEXT ANO 16 cns:历史人物 KEJ
17 cns:学校 ZDI 18 cns:企业 CAT
19 cns:出版社 GCK 20 cns:书籍 FQK
21 cns:音乐专辑 BAK 22 cns:城市 RET
23 cns:景点 QZP 24 cns:电视综艺 QAQ
25 cns:机构 ZRE 26 cns:作品 TDZ
27 cns:语言 CVC 28 cns:学科专业 PMN

关系Schema

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

快速加载

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

  1. 将下载的模型文件夹命名为checkpoints

  2. 修改 predict.yaml中的参数text为需要预测的文本

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

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

    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')]

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

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

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

    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

用户可以先将上述模型下载至本地,然后使用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中提交。