MCPcopy Index your code
hub / github.com/zjunlp/DeepKE

github.com/zjunlp/DeepKE @2.2.7

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.2.7 ↗ · + Follow
2,518 symbols 7,744 edges 340 files 556 documented · 22% 19 cross-repo links updated 11mo ago2.2.7 · 2023-09-21★ 4,438
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
<a href="https://github.com/zjunlp/deepke"> <img src="https://github.com/zjunlp/DeepKE/raw/2.2.7/pics/logo.png" width="400"/></a>






<a href="http://deepke.zjukg.cn">
    <img alt="Documentation" src="https://img.shields.io/badge/demo-website-blue">
</a>
<a href="https://pypi.org/project/deepke/#files">
    <img alt="PyPI" src="https://img.shields.io/pypi/v/deepke">
</a>
<a href="https://github.com/zjunlp/DeepKE/blob/master/LICENSE">
    <img alt="GitHub" src="https://img.shields.io/github/license/zjunlp/deepke">
</a>
<a href="http://zjunlp.github.io/DeepKE">
    <img alt="Documentation" src="https://img.shields.io/badge/doc-website-red">
</a>
<a href="https://colab.research.google.com/drive/1vS8YJhJltzw3hpJczPt24O0Azcs3ZpRi?usp=sharing">
    <img alt="Open In Colab" src="https://colab.research.google.com/assets/colab-badge.svg">
</a>







<b> <a href="https://github.com/zjunlp/DeepKE/blob/main/README_CNSCHEMA.md">English</a> | 简体中文 </b>

数据标注说明

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


内容导引

章节 描述
简介 介绍DeepKE基本原理和支持的数据类型
人工数据标注 介绍如何人工标注数据
自动数据标注 介绍如何基于DeepKE自动标注数据
FAQ 常见问题答疑
引用 本目录的技术报告

简介

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

众所周知,数据对模型训练非常重要。为方便用户使用本工具,DeepKE提供了详细的实体识别、关系抽取数据标注说明,以方便用户通过人工或自动方式得到训练数据,标注好的数据可以直接供DeepKE进行模型训练。

人工数据标注

doccano是一个开源的人工数据标注工具。它为文本分类序列标记序列到序列提供标注功能。因此您可以为情感分析、命名实体识别、文本摘要等任务创建标记数据。只需创建一个项目并上传数据并开始标记,您可以在数小时内构建可供DeepKE训练的数据集。下面会介绍使用doccano为实体识别和关系抽取标注数据。

doccano的安装与配置可参考 Github(doccano)

安装并启动server后,在浏览器中访问http://0.0.0.0:8000,并点击登陆

实体识别

创建项目

  • 创建项目。点击左上角的创建,跳转至以下界面。

    • 选择序列标注(Sequence Labeling)任务。
    • 填写项目名称(Project name)、描述(Description)等必要信息。
    • 按需勾选允许实体重叠(Allow overlapping entity)、使用关系标注(Use relation labeling)等可配置属性。

  • 在创建完成后,会自动跳转到项目的主页。

添加语料库

  • doccano支持多种格式的文本,它们的区别如下:
    • Textfile:上传的文件为txt格式,打标时一整个txt文件显示为一页内容;
    • Textline:上传的文件为txt格式,打标时txt文件的一行文字显示为一页内容;
    • JSONLJSON Lines的简写,每行是一个有效的JSON值;
    • CoNLLCoNLL格式的文件,每行均带有一系列制表符分隔的单词;

  • 再点击数据集的标签,就可以看到一条一条的文本已经被添加到项目中了,之后我们将对这些文本进行打标。

数据标注

  • 添加任务标签

    • 抽取式任务包含SpanRelation两种标签类型,此处采用Span类型,Span指原文本中的目标信息片段,即实体识别中某个类型的实体。
    • 填入标签的名字。在实体识别中,可以写PERLOCORG等。
    • 添加该标签对应的快捷键(例如给PER标签设置为快捷键p),并定义标签颜色。

    • 之后以同样的方法添加其他所需要的标签即可。
  • 任务标注

    • 标注数据,点击每条数据最右边的Annotate按钮开始标注。
    • 示例中定义了人物、地点两种Span类型标签。

导出训练数据

  • 在数据集一栏点击操作导出数据集导出已标注的数据。
  • 标注数据保存在同一个文本文件中,每条样例占一行且存储为jsonl格式,其包含以下字段

    • id: 样本在数据集中的唯一标识ID
    • text: 原始文本数据。
    • entities: 数据中包含的Span标签,每个Span标签包含四个字段:
      • id: Span在数据集中的唯一标识ID。
      • start_offset: Span的起始位置。
      • end_offset: Span结束位置的下一个位置。
      • label: Span的类型。
  • 导出数据示例

{
    "id":8,
    "text":"曾经去过深圳、珠海的俭汤青年农民回乡后意味深长地说,从南往北走,越走越保守。",
    "entities":[
        {
            "id":9,
            "label":"LOC",
            "start_offset":4,
            "end_offset":6
        },
        {
            "id":10,
            "label":"LOC",
            "start_offset":7,
            "end_offset":9
        },
        {
            "id":11,
            "label":"PER",
            "start_offset":12,
            "end_offset":16
        }
    ],
    "relations":[

    ]
}
  • DeepKE中实体识别任务输入数据格式为txt文件,每行包括单词、分隔符、标签(可参考CoNLL数据格式)。将导出后的数据预处理成DeepKE可输入的格式即可进行训练,具体流程请进入详细的README中。

关系抽取

  • 创建项目
    • 与实体识别操作一致,参考以上即可。
  • 添加语料库
    • 与实体识别操作一致,参考以上即可。
    • 输入文本中,文本格式{文本}*{头实体}*{尾实体}*{头实体类型}*{尾实体类型},其中头和尾实体类型可为空。

数据标注

  • 添加任务标签

    • 抽取式任务包含SpanRelation两种标签类型,此处采用Relation类型,Relation指原文本中Span之间的关系,即关系抽取中两个实体间的关系。
    • 填入关系类型的名字。在关系抽取中,可以写毕业因果等。
    • 添加该关系类型对应的快捷键(例如给毕业标签设置为快捷键b),并定义标签颜色。

    • 之后以同样的方法添加其他所需要的标签即可。
  • 任务标注

    • 标注数据,点击每条数据最右边的Annotate按钮开始标注。
    • 首先点击待标注的关系标签,接着依次点击相应的头尾实体可完成关系标注。
    • 示例中定义了PERLOC两种Span类型标签,之后标注实体间的关系标签毕业Relation标签由Subject对应实体指向Object对应实体。

导出训练数据

  • 在数据集一栏点击操作导出数据集导出已标注的数据。
  • 标注数据保存在同一个文本文件中,每条样例占一行且存储为jsonl格式,其包含以下字段

    • id: 样本在数据集中的唯一标识ID
    • text: 原始文本数据。
    • entities: 数据中包含的Span标签,每个Span标签包含四个字段:
      • id: Span在数据集中的唯一标识ID。
      • start_offset: Span的起始位置。
      • end_offset: Span结束位置的下一个位置。
      • label: Span的类型。
    • relations: 数据中包含的Relation标签,每个Relation标签包含四个字段:
      • id: (Span1, Relation, Span2)三元组在数据集中的唯一标识ID,不同样本中的相同三元组对应同一个ID
      • from_id: Span1对应的标识ID
      • to_id: Span2对应的标识ID
      • type: Relation类型。
  • 导出数据示例

{
    "id":12,
    "text":"张廷智, 毕业于大连军医学院,从事中医治疗中晚期肿瘤临床工作30余年*张延智*大连军医学院*人物*学校",
    "entities":[
        {
            "id":18,
            "label":"PER",
            "start_offset":0,
            "end_offset":3
        },
        {
            "id":19,
            "label":"ORG",
            "start_offset":8,
            "end_offset":14
        }
    ],
    "relations":[
        {
            "id":1,
            "from_id":18,
            "to_id":19,
            "type":"毕业"
        }
    ]
}

自动数据标注

实体识别

为了用户更好的使用DeepKE完成实体识别任务,我们提供一个简单易用的基于词典匹配的实体识别自动标注工具

词典

  • 词典格式如下所示:

  • 预提供了两个实体词典(中英文各一个),使用实体词典+jieba词性标注对样本进行自动标注。

    • 中文示例词典中, 我们采用(人民日报)数据集. 它是NER相关的数据集,包含人员 (PER)、位置 (LOC) 和组织 (ORG) 相关的命名实体识别。

    • 英文示例词典中,我们采用Conll数据集。它包含人员 (PER)、位置 (LOC) 和其他 (MISC) 相关的命名实体识别。你可通过如下命令获得Conll数据集

    shell wget 120.27.214.45/Data/ner/few_shot/data.tar.gz

  • 若需要构建领域自建词典,请参照预提供词典格式(csv)

    实体 词性
    杭州 LOC
    ... ...

源文件

  • 输入的词典格式为csv(包含两列,分别是实体以及对应的标签)。

  • 待自动打标的数据(txt格式按行分隔,如下图所示)应放在source_data路径下,脚本会遍历此文件夹下的所有txt格式的文件,逐行进行自动打标。具体示例如下:

输出文件

  • 输出文件包含三个:example_train_cn.txt, example_dev_cn.txt, example_test_cn.txt,分别对应训练集、验证集和测试集。我们自动将源文件数据划分为三份,比例为0.8:0.1:0.1。输出文件的格式如下:

环境

运行环境:
- jieba = 0.42.1

参数解释

  • language: 可选cn(中文)或en(英文)
  • source_dir: 语料库路径(遍历此文件夹下的所有txt格式的文件,逐行进行自动打标,默认为source_data
  • dict_dir: 实体词典路径(默认为vocab_dict.csv
  • test_rate, dev_rate, test_rate: 训练集、验证集、测试集占比(请确保总和为1,默认0.8:0.1:0.1

运行

  • 中文
python prepare_weaksupervised_data.py --language cn --dict_dir vocab_dict_cn.csv
  • 英文
python prepare_weaksupervised_data.py --language en --dict_dir vocab_dict_en.csv

关系抽取

为了用户更好的使用DeepKE完成关系抽取任务,我们提供一个简单易用的基于远程监督的关系标注工具。

源文件

用户提供的源文件需要为.json形式,并且每条数据只包含一个实体对,分别为头实体和尾实体。数据中必须至少包含以下四个字段:sentence(句子), head(头实体), tail(尾实体), head_offset(头实体在句子中的偏移位置), tail_offset(尾实体在句子中的偏移位置)。具体的json字典形式如下:

[
  {
    "sentence": "如何演好自己的角色,请读《演员自我修养》《喜剧之王》周星驰崛起于穷困潦倒之中的独门秘笈",
    "head": "周星驰",
    "tail": "喜剧之王",
    "head_offset": "26",
    "tail_offset": "21",
    //...
    },
  //...
]

三元组文件

源文件中的实体对将会与三元组文件中的三元组进行字符串全匹配。如果匹配成功实体对将会被标记为三元组的关系标签,如果没有匹配项则被标记为None

我们分解提供了一个英文和一个中文三元组文件。英文三元组来自NYT数据集,包含如下关系类型:

"/business/company/place_founded",
"/people/person/place_lived",
"/location/country/administrative_divisions",
"/business/company/major_shareholders",
"/sports/sports_team_location/teams",
"/people/person/religion",
"/people/person/place_of_birth",
"/people/person/nationality",
"/location/country/capital",
"/business/company/advisors",
"/people/deceased_person/place_of_death",
"/business/company/founders",
"/location/location/contains",
"/people/person/ethnicity",
"/business/company_shareholder/major_shareholder_of",
"/people/ethnicity/geographic_distribution",
"/people/person/profession",
"/business/person/company",
"/people/person/children",
"/location/administrative_division/country",
"/people/ethnicity/people",
"/sports/sports_team/location",
"/location/neighborhood/neighborhood_of",
"/business/company/industry"

中文三元组来自GitHub链接,包含如下关系类型:

{"object_type": "地点", "predicate": "祖籍", "subject_type": "人物"}
{"object_type": "人物", "predicate": "父亲", "subject_type": "人物"}
{"object_type": "地点", "predicate": "总部地点", "subject_type": "企业"}
{"object_type": "地点", "predicate": "出生地", "subject_type": "人物"}
{"object_type": "目", "predicate": "目", "subject_type": "生物"}
{"object_type": "Number", "predicate": "面积", "subject_type": "行政区"}
{"object_type": "Text", "predicate": "简称", "subject_type": "机构"}
{"object_type": "Date", "predicate": "上映时间", "subject_type": "影视作品"}
{"object_type": "人物", "predicate": "妻子", "subject_type": "人物"}
{"object_type": "音乐专辑", "predicate": "所属专辑", "subject_type": "歌曲"}
{"object_type": "Number", "predicate": "注册资本", "subject_type": "企业"}
{"object_type": "城市", "predicate": "首都", "subject_type": "国家"}
{"object_type": "人物", "predicate": "导演", "subject_type": "影视作品"}
{"object_type": "Text", "predicate": "字", "subject_type": "历史人物"}
{"object_type": "Number", "predicate": "身高", "subject_type": "人物"}
{"object_type": "企业", "predicate": "出品公司", "subject_type": "影视作品"}
{"object_type": "Number", "predicate": "修业年限", "subject_type": "学科专业"}
{"object_type": "Date", "predicate": "出生日期", "subject_type": "人物"}
{"object_type": "人物", "predicate": "制片人", "subject_type": "影视作品"}
{"object_type": "人物", "predicate": "母亲", "subject_type": "人物"}
{"object_type": "人物", "predicate": "编剧", "subject_type": "影视作品"}
{"object_type": "国家", "predicate": "国籍", "subject_type": "人物"}
{"object_type": "Number", "predicate": "海拔", "subject_type": "地点"}
{"object_type": "网站", "predicate": "连载网站", "subject_type": "网络小说"}
{"object_type": "人物", "predicate": "丈夫", "subject_type": "人物"}
{"object_type": "Text", "predicate": "朝代", "subject_type": "历史人物"}
{"object_type": "Text", "predicate": "民族", "subject_type": "人物"}
{"object_type": "Text", "predicate": "号", "subject_type": "历史人物"}
{"object_type": "出版社", "predicate": "出版社", "subject_type": "书籍"}
{"object_type": "人物", "predicate": "主持人", "subject_type": "电视综艺"}
{"object_type": "Text", "predicate": "专业代码", "subject_type": "学科专业"}
{"object_type": "人物", "predicate": "歌手", "subject_type": "歌曲"}
{"object_type": "人物", "predicate": "作词", "subject_type": "歌曲"}
{"object_type": "人物", "predicate": "主角", "subject_type": "网络小说"}
{"object_type": "人物", "predicate": "董事长", "subject_type": "企业"}
{"object_type": "Date", "predicate": "成立日期", "subject_type": "机构"}
{"object_type": "学校", "predicate": "毕业院校", "subject_type": "人物"}
{"object_type": "Number", "predicate": "占地面积", "subject_type": "机构"}
{"object_type": "语言", "predicate": "官方语言", "subject_type": "国家"}
{"object_type": "Text", "predicate": "邮政编码", "subject_type": "行政区"}
{"object_type": "Number", "predicate": "人口数量", "subject_type": "行政区"}
{"object_type": "城市", "predicate": "所在城市", "subject_type": "景点"}
{"object_type": "人物", "predicate": "作者", "subject_type": "图书作品"}
{"object_type": "Date", "predicate": "成立日期", "subject_type": "企业"}
{"object_type": "人物", "predicate": "作曲", "subject_type": "歌曲"}
{"object_type": "气候", "predicate": "气候", "subject_type": "行政区"}
{"object_type": "人物", "predicate": "嘉宾", "subject_type": "电视综艺"}
{"object_type": "人物", "predicate": "主演", "subject_type": "影视作品"}
{"object_type": "作品", "predicate": "改编自", "subject_type": "影视作品"}
{"object_type": "人物", "predicate": "创始人", "subject_type": "企业"}

用户可以自定义三元组文件,但是需要设定文件形式为.csv并具有如下格式:

头实体 尾实体 关系
周星驰 喜剧之王

Core symbols most depended-on inside this repo

size
called by 400
src/deepke/attribution_extraction/standard/module/GCN.py
get
called by 81
example/llm/CPM-Bee/src/cpm_live/training_tasks/bee/pretrain.py
write
called by 70
example/llm/CPM-Bee/src/cpm_live/utils/log.py
convert_tokens_to_ids
called by 53
example/llm/CPM-Bee/src/cpm_live/tokenizers/ant.py
dump
called by 48
example/llm/CPM-Bee/src/cpm_live/dataset/distributed_dataset.py
loads
called by 46
example/llm/CPM-Bee/src/cpm_live/dataset/distributed_dataset.py
update
called by 43
src/deepke/triple_extraction/PRGC/util.py
eval
called by 40
example/ner/standard/w2ner/run.py

Shape

Method 1,525
Function 555
Class 432
Route 6

Languages

Python100%

Modules by API surface

src/deepke/event_extraction/standard/degree/template_generate_ace.py245 symbols
src/deepke/name_entity_re/cross/seq2seq/modeling_t5.py78 symbols
example/triple/PURE/models/data_structures.py74 symbols
src/deepke/relation_extraction/few_shot/dataset/processor.py66 symbols
tutorial-notebooks/ner/few-shot/modeling_bart.py65 symbols
src/deepke/name_entity_re/few_shot/models/modeling_bart.py60 symbols
src/deepke/relation_extraction/multimodal/models/modeling_IFA.py57 symbols
src/deepke/name_entity_re/multimodal/models/modeling_IFA.py57 symbols
example/llm/CPM-Bee/src/cpm_live/dataset/distributed_dataset.py49 symbols
src/deepke/triple_extraction/ASP/metrics/metrics.py47 symbols
example/llm/CPM-Bee/src/cpm_live/training_tasks/bee/pretrain.py40 symbols
src/deepke/name_entity_re/cross/extraction/scorer.py30 symbols

Dependencies from manifests, versioned

Jinja23.1.2 · 1×
accelerate0.20.3 · 1×
allennlp2.10.1 · 1×
bitsandbytes0.39.1 · 1×
bmtrain0.2.1 · 1×
datasets2.13.2 · 1×
deepspeed0.8.3 · 1×
huggingface_hub0.11.0 · 1×
hydra-core1.0.6 · 1×
ipdb0.13.11 · 1×
jieba0.42.1 · 1×
matplotlib3.4.1 · 1×

For agents

$ claude mcp add DeepKE \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact