- 人工智能
- NLP
- 知识图谱
- 深度学习
【免费下载链接】DeepKE
[EMNLP 2022] An Open Toolkit for Knowledge Graph Extraction and Construction
DeepKE-cnSchema 是开源知识抽取工具 DeepKE 面向中文知识图谱构建推出的"开箱即用"特别版,内置基于中文预训练模型训练好的命名实体识别(NER)与关系抽取(RE)模型,可抽取 28 种实体类型与 50 种关系类型。本文以 example/triple/cnschema 目录为对象,完整讲解模型下载、基线效果、Schema 支持范围、快速加载流程以及源码级实现原理,读完即可将任意中文文本端到端抽取为符合 cnSchema 语义的 JSON-LD 三元组。
1. 背景:什么是 DeepKE-cnSchema
DeepKE 是一个支持低资源、长篇章、多模态场景的开源知识抽取工具,可基于 PyTorch 实现命名实体识别、关系抽取和属性抽取。为了促进中文领域知识图谱构建、降低使用门槛,项目提供了预训练好、支持 cnSchema 的特别版DeepKE-cnSchema:
- 支持开箱即用的中文实体抽取与关系抽取,无需自行标注、训练;
- 可抽取50 种关系类型和28 种实体类型;
- 实体类型覆盖人物、地点、城市、机构等通用类别,关系类型覆盖祖籍、出生地、国籍、朝代等常见类别;
- 抽取结果直接映射到 cnSchema 语义体系,可输出 JSON-LD 格式,便于接入知识图谱构建流程。
cnSchema 是面向中文信息处理、利用知识图谱与 NLP 技术融合结构化与文本数据的开放 Schema 体系,支持跨数据源、跨领域、跨语言的开放数据自动化处理,为智能机器人、语义搜索、智能计算等场景提供 schema 层面的支持。DeepKE-cnSchema 通过内置的relation.csv(关系标签集)、type.txt(实体类型映射)、url.txt(关系到 cnSchema URI 的映射)三份数据文件,将模型输出与 cnSchema 语义体系衔接起来(见 data 目录)。
2. 下载预训练中文模型
DeepKE-cnSchema 为实体抽取与关系抽取分别提供了基于RoBERTa-wwm-ext, Chinese和BERT-wwm, Chinese训练的模型,共 5 个可选模型:
| 模型简称 | 功能 | 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) |
下载建议:中国大陆境内建议使用百度网盘下载点,境外用户建议使用 Google 下载点。
2.1 实体抽取(NER)模型的文件结构
以 Pytorch 版DeepKE(NER), 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.json和vocab.txt与 Google 原版RoBERTa-wwm-ext, Chinese完全一致,Pytorch 版本则额外包含pytorch_model.bin、config.json、vocab.txt三个关键文件。这一结构对应了 InferBert.py 中的InferNer.load_model:它会从模型目录读取model_config.json获取label_map、max_seq_length、do_lower等配置,再用BertForTokenClassification.from_pretrained(model_dir)与BertTokenizer.from_pretrained(model_dir, do_lower_case=...)直接加载模型与分词器。
2.2 关系抽取(RE)模型
以 Pytorch 版DeepKE(RE), RoBERTa-wwm-ext, Chinese为例,下载后为.pth 权重文件(如re_bert.pth)。该权重文件由 LMModel.py 中的LM.save生成,加载时通过torch.load(path, map_location=device)还原。
下载模型后,即可直接进入第 5 节的快速加载流程进行实体关系抽取。
3. 中文基线系统效果
DeepKE 使用chinese-bert-wwm与chinese-roberta-wwm-ext作为基础模型训练得到 DeepKE-cnSchema 模型,超参数均为预定义参数。以下为 README 公布的在中文实体识别与关系抽取数据集上的实验结果:
3.1 命名实体识别(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 |
3.2 关系抽取(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 |
可见RoBERTa-wwm-ext在 NER 任务上全面占优(F1 0.8310 vs 0.8197),而 RE 任务中BERT-wwm的 F1(0.7473)略高于RoBERTa-wwm-ext(0.7327),精度与召回各有取舍,用户可按任务侧重点选择模型。
4. 支持的 cnSchema 知识 Schema 类型
DeepKE-cnSchema 面向中文知识图谱构建,内置的 Schema 类型可以直接通过 data/type.txt 确认。该文件每行是"中文类型名 + 英文代码"的映射,共定义了 28 种实体类型,NER 模型输出的 BIO 标签(如B-YAS、I-QEE)即对应其中的英文代码:
| 代码 | 实体类型 | 代码 | 实体类型 |
|---|---|---|---|
| YAS | 人物 | KEJ | 历史人物 |
| TOJ | 影视作品 | ZDI | 学校 |
| NGS | 目(物种) | CAT | 企业 |
| QCV | 生物 | GCK | 出版社 |
| OKB | Number | FQK | 书籍 |
| BQF | Date | BAK | 音乐专辑 |
| CAR | 国家 | RET | 城市 |
| ZFM | 网站 | QZP | 景点 |
| EMT | 网络小说 | QAQ | 电视综艺 |
| UER | 图书作品 | ZRE | 机构 |
| QEE | 歌曲 | TDZ | 作品 |
| UFT | 地点 | CVC | 语言 |
| GJS | 气候 | PMN | 学科专业 |
| SVA | 行政区 | ANO | Text |
关系侧,data/relation.csv 定义了关系标签集(对应文档所述 50 种关系类型)。从 conf/embedding.yaml 中的num_relations: 51可以推断,关系分类层输出维度为 51,即 50 种关系类别外加 1 个额外类别(如"无关系"),LM.fc = nn.Linear(cfg.hidden_size, cfg.num_relations)与之对应。而 data/url.txt 则将每种关系映射到 cnSchema 的规范 URI(如歌手 →https://cnschema.openkg.cn/item/歌手/16693#viewPageContent),供 JSON-LD 输出使用。
5. 快速加载:从文本到三元组的完整流程
下载模型后,用户可以直接使用 example/triple/cnschema 中的代码进行端到端三元组抽取,只需两个步骤:
步骤 1:修改预测配置
编辑 conf/predict.yaml,设置三个关键字段:
# text: "此次合作达成后,上述艺人的歌曲已经可以在网易云音乐听到,其中包括新生代们听到旋律就可以唱出歌词的田馥甄的《小幸运》、《寂寞寂寞就好》" text: '此外网易云平台还上架了一系列歌曲,其中包括田馥甄的《小幸运》等' nerfp: 'xxx/checkpoints_bert' refp: 'xxx/re_bert.pth'text:待预测的中文句子;nerfp:已下载的 NER 模型文件夹地址;refp:已下载的 RE 模型 .pth 文件地址。
步骤 2:运行预测
python predict.py预测期间会依次输出各中间步骤结果。以输入文本此外网易云平台还上架了一系列歌曲,其中包括田馥甄的《小幸运》等为例,完整的四段输出如下:
(1)NER 模型输出(BIO 标签序列):
[('田', 'B-YAS'), ('馥', 'I-YAS'), ('甄', 'I-YAS'), ('小', 'B-QEE'), ('幸', 'I-QEE'), ('运', 'I-QEE')](2)实体合并与类型映射后的结果:
{'田馥甄': '人物', '小幸运': '歌曲'}(3)RE 模型对实体对的关系判定与置信度:
"田馥甄" 和 "小幸运" 在句中关系为:"歌手",置信度为0.92。(4)JSON-LD 格式化输出:
{ "@context": { "歌手": "https://cnschema.openkg.cn/item/%E6%AD%8C%E6%89%8B/16693#viewPageContent" }, "@id": "田馥甄", "歌手": { "@id": "小幸运" } }使用限制说明
如果单句中存在超过两个以上的实体,部分实体对可能预测不准,原因是这些实体对并未出现在训练集中,需要进一步人工判断。这是文档明确标注的使用边界,批量抽取时建议对置信度较低或实体对较新的结果进行复核。
6. 源码级拆解:predict.py 的完整调用链
快速加载的背后是 predict.py 中一条清晰的"NER → 实体配对 → RE → JSON-LD"流水线。逐段拆解如下:
6.1 类型与 URI 映射表的加载
入口main(cfg)首先读取两份映射文件:
- 从
type.txt构建label2word(标签代码 → 中文类型名),用于把 NER 的B-YAS标签翻译为"人物"; - 从
url.txt构建rel2url(关系名 → cnSchema URI),用于 JSON-LD 的@context构造。
6.2 NER 推理:InferNer
NER 模型由 InferBert.py 的InferNer类承载,核心要点包括:
- 模型结构:
BertNer(BertForTokenClassification)在forward中利用valid_ids屏蔽子词(token)对应的序列位置,仅保留真实词(word)位置的输出,再经 dropout 与classifier得到每个字的分类 logits; - 预处理:
tokenize将中文按字切分后交给BertTokenizer,同时记录valid_positions(每个原始字对应 token 序列中的首个 token 标 1),前后补[CLS]/[SEP],padding 到max_seq_length; - 预测:
predict中torch.argmax得到标签,softmax得到逐字置信度,再按valid_ids还原到原始字符序列,最后只保留非O标签的(字, 标签)对。
6.3 实体合并与两两配对
predict.py随后按 BIO 规则合并实体:遇到B-开头标签开启新实体,连续I-同类型标签则累加字符;合并完成后用label2word把标签代码映射为中文类型名,得到{'田馥甄': '人物', '小幸运': '歌曲'}这样的实体字典。接着对所有实体做两两配对(entity_len层嵌套循环),为每个实体对构造包含sentence、head、tail、head_type、tail_type的实例。
6.4 RE 推理:LM(BERT + BiLSTM + 分类层)
每个实体对都会调用_preprocess_data:通过utils.load_csv(见 utils.py)读取relation.csv,preprocess._handle_relation_data构造关系标签集,preprocess._lm_serialize完成 LM 侧的序列化(实体类型/位置标记替换等,对应replace_entity_with_type、replace_entity_with_scope配置)。随后由 LMModel.py 的LM模型完成分类:
BERT 编码 → BiLSTM(取最后一层隐状态)→ Dropout → Linear(51)- BERT 部分通过
BertModel.from_pretrained(cfg.lm_file, num_hidden_layers=cfg.num_hidden_layers)加载,lm_file默认指向hfl/chinese-bert-wwm; - BiLSTM 部分由
RNN类实现,支持LSTM/GRU/RNN三种单元、双向、pack_padded_sequence处理变长序列; - 最终
torch.softmax取最大概率即关系类别与置信度,输出"田馥甄" 和 "小幸运" 在句中关系为:"歌手",置信度为0.92。
6.5 JSON-LD 输出
get_jsonld(head, rel, tail, url)调用pyld.jsonld.compact,将{"@id": head, rel: {"@id": tail}}与{rel: url}上下文压缩为标准的 JSON-LD 文档,rel2url确保@context中的关系 URI 直接指向 cnSchema 词条,从而让抽取结果可以直接汇入知识图谱。
7. 配置文件全景与参数详解
该目录采用 Hydra 配置体系,conf/config.yaml 通过defaults聚合全部子配置:
cwd: ??? defaults: - hydra/output: custom - preprocess - train - embedding - predict - model: lm各子配置的职责与关键参数如下:
7.1 数据预处理 conf/preprocess.yaml
| 参数 | 默认值 | 说明 |
|---|---|---|
preprocess | True | 是否需要预处理数据;参数未变化时可关闭以节省时间 |
data_path | data | 原始数据存放位置 |
out_path | data/out | 预处理后文件存放位置 |
chinese_split | True | 是否需要中文分词 |
replace_entity_with_type | True | 是否用实体类型替换实体词 |
replace_entity_with_scope | True | 是否用三元组头尾标记替换实体词 |
min_freq | 3 | 构建 vocab 时的最低词频 |
pos_limit | 30 | 句长限制,指句子中词语相对 entity 的位置限制,如[-30, 30],embed 时整体 +31 变为[1, 61],共 62 个 position token,0 留给 pad |
7.2 训练超参数 conf/train.yaml
| 参数 | 默认值 | 说明 |
|---|---|---|
seed | 1 | 随机种子 |
use_gpu/gpu_id | True / 0 | GPU 使用开关与设备号 |
epoch | 50 | 训练轮数 |
batch_size | 32 | 批大小 |
learning_rate | 3e-4 | 学习率 |
lr_factor | 0.7 | 学习率衰减率 |
lr_patience | 3 | 学习率衰减的等待 epoch 数 |
weight_decay | 1e-3 | L2 正则 |
early_stopping_patience | 6 | 早停等待轮数 |
log_interval | 10 | 日志打印间隔 |
plot_utils | matplot | 绘图工具,可选 matplot / tensorboard |
7.3 词嵌入 conf/embedding.yaml
word_dim: 60、pos_dim: 10、dim_strategy: sum(可选cat/sum)控制词向量与位置向量的融合方式;num_relations: 51定义了关系分类层输出维度(50 种关系 + 1 个额外类别)。
7.4 LM 模型参数 conf/model/lm.yaml
lm_file: 'hfl/chinese-bert-wwm':预训练语言模型来源,注释中亦给出'bert-base-chinese'下载用法与'pretrained'本地加载两种方式;num_hidden_layers: 1:Transformer 层数(base BERT 为 12 层),数据量较小时调低收敛更快、效果更好;type_rnn: 'LSTM':RNN 单元类型,可选RNN/GRU/LSTM;input_size: 768:BERT 输出维度;hidden_size: 100(必须为偶数);num_layers: 1;dropout: 0.3;bidirectional: True;last_layer_hn: True。
7.5 预测配置 conf/predict.yaml
即第 5 节所述text、nerfp、refp三个字段。config.yaml中cwd: ???为运行时由hydra.utils.get_original_cwd()填充。
8. 二次开发与运行环境
- 依赖:目录下 requirements.txt 声明了运行所需依赖,NER 侧依赖
pytorch_transformers,RE 侧依赖transformers、torch,JSON-LD 输出依赖pyld; - 预处理:
predict.py引用的_handle_relation_data、_lm_serialize位于 preprocess.py,如需调整实体标记策略(如关闭replace_entity_with_type),可配合preprocess.yaml修改后重新生成数据; - 自行训练:若需在自有数据上训练,
conf下已提供完整的train.yaml、embedding.yaml、model/lm.yaml训练配置,LMModel.py中的LM.save定义了权重保存逻辑(输出checkpoints/<时间戳>/lm_epoch{N}.pth),可参考标准任务的训练入口构建训练脚本; - 运行前提:预训练模型需按第 2 节下载并解压到本地,NER 模型路径指向文件夹(含
model_config.json),RE 模型路径指向.pth 文件。
9. 注意事项
- 多实体句子的局限:单句中实体超过两个时,未在训练集中出现过的实体对可能预测不准,建议进一步人工复核;
- 免责声明:该项目内容仅供技术研究参考,不作为任何结论性依据;用户可在许可证范围内自由使用模型,但项目不对因使用造成的直接或间接损失负责;
- 引用:如果本项目资源或技术对研究有帮助,欢迎在论文中引用 DeepKE 论文(Ningyu Zhang 等,EMNLP 2022 System Demonstrations,DeepKE: A Deep Learning Based Knowledge Extraction Toolkit for Knowledge Base Population)。
综上,DeepKE-cnSchema 以"下载即用"的方式把中文 NER 与 RE 的工程门槛降到了最低,同时通过 cnSchema 类型体系与 JSON-LD 输出无缝衔接知识图谱构建链路,是中文知识抽取场景下值得直接落地的开箱即用方案。
- 人工智能
- NLP
- 知识图谱
- 深度学习
【免费下载链接】DeepKE
[EMNLP 2022] An Open Toolkit for Knowledge Graph Extraction and Construction
相关推荐
DeepKE-cnSchema 开箱即用指南:基于 cnSchema 的中文实体与关系知识抽取实战
DeepKE cnSchema 开箱即用指南:基于 cnSchema 的中文实体与关系知识抽取实战 DeepKE cnSchema 是开源知识抽取工具包 Dee
人工智能NLP知识图谱深度学习DeepKE-cnSchema 开箱即用实战:基于 cnSchema 的中文实体识别、关系抽取与三元组联合抽取指南
DeepKE cnSchema 开箱即用实战:基于 cnSchema 的中文实体识别、关系抽取与三元组联合抽取指南 DeepKE 是开源的 知识图谱抽取与构建工
人工智能NLP知识图谱深度学习DeepKE-cnSchema 实践指南:中文知识图谱开箱即用的实体抽取与关系抽取
DeepKE cnSchema 实践指南:中文知识图谱开箱即用的实体抽取与关系抽取 DeepKE 是一个基于 PyTorch 的开源知识图谱抽取与构建工具,而
人工智能NLP知识图谱深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考