DeepKE 标准关系抽取数据准备指南:json / xlsx / csv 三种数据格式与格式转换
发布时间:2026/10/6 12:25:39 锦皓数字建站

人工智能NLP知识图谱深度学习【免费下载链接】DeepKE[EMNLP 2022] An Open Toolkit for Knowledge Graph Extraction and Construction项目地址https://gitcode.com/gh_mirrors/de/DeepKE点击查看免费下载本文面向使用 DeepKE 标准关系抽取Standard RE模块的开发者围绕 example/re/standard/data/README_CN.md 展开系统讲解训练数据支持的三种文件格式json、xlsx、csv、字段规范、格式转换工具以及数据目录组织方式。读完本文你将能够按照官方示例格式构造自己的关系抽取数据集并使用 transform_data.py 将 json / xlsx 数据一键转换为 csv直接接入 example/re/standard 的训练与预测流程。一、数据格式总览DeepKE 标准关系抽取的训练与预测数据支持三种文件类型json 格式、xlsx 格式、csv 格式。其中csv 是训练流程直接读取的格式。从 preprocess.py 可以看出预处理阶段会依次加载data/origin目录下的train.csv、valid.csv、test.csv和relation.csv因此 csv 之外的格式在进入训练前必须完成转换json / xlsx 是方便标注与编辑的中间格式。如果你手头的数据是 json 或 xlsx需要调用transform_data.py中的json2csv与xlsx2csv函数转换为 csv每种格式的字段规范均以data目录下给出的example.*文件为准即 example.json、example.xlsx、example.csv。二、三种数据格式详解无论哪种格式一条关系抽取样本都包含以下 6 个字段字段含义说明sentence原句子待抽取关系的文本中英文均可relation关系类型该样本标注的关系如导演head头实体关系三元组中的头实体文本head_offset头实体在句中的起始位置以字符为单位从 0 开始计数tail尾实体关系三元组中的尾实体文本tail_offset尾实体在句中的起始位置以字符为单位从 0 开始计数以官方示例 example.json 中的第一条样本为例{ sentence: 孔正锡导演2005年以一部温馨的爱情电影《长腿叔叔》敲开电影界大门, relation: 导演, head: 长腿叔叔, head_offset: 23, tail: 孔正锡, tail_offset: 0 }对该句子逐字符计数孔0, 正1, 锡2, 3, 导4, 演5, 6, 27, 08, 09, 510, 年11, 以12, 一13, 部14, 温15, 馨16, 的17, 爱18, 情19, 电20, 影21, 《22, 长23可以验证head_offset23正是头实体“长腿叔叔”中“长”字的起始位置tail_offset0是尾实体“孔正锡”的起始位置。2.1 CSV 格式example.csv 的第一行是表头后续每行是一条样本各字段顺序与表头一致sentence,relation,head,head_offset,tail,tail_offset 孔正锡导演2005年以一部温馨的爱情电影《长腿叔叔》敲开电影界大门,导演,长腿叔叔,23,孔正锡,0 《我家有喜2》又名《开门见喜》是由丁仰国导演执导张佳编剧海陆、高梓淇、万茜、李佳航、关雪盈、陈晓联袂主演的都市轻喜剧,导演,我家有喜,1,丁仰国,19csv 是标准关系抽取数据管线的最终格式。从 preprocess.py 可见preprocess(cfg)会通过load_csv依次加载data/origin下的四个 csv 文件train.csv训练集valid.csv验证集test.csv测试集relation.csv关系种类定义其中relation.csv的结构比较特殊从 preprocess.py 中的_handle_relation_data可以看到每行包含四个字段index关系编号、relation关系名、head_type头实体类型、tail_type尾实体类型。预处理时会按index升序排序并构建relation - {index, head_type, tail_type}的映射供后续_add_relation_data为每个样本注入rel2idx、head_type、tail_type。2.2 JSON 格式example.json 是一个 JSON 数组数组的每个元素是一条样本对象见上文示例。JSON 格式适合人工标注工具导出也是不少开源关系抽取数据集如 TacRED、NYT的常见格式。2.3 XLSX 格式仓库提供了 example.xlsx 作为 Excel 格式的参考。从 transform_data.py 中xlsx2csv的实现可以确认其结构第一行为表头sentence, relation, head, head_offset, tail, tail_offset从第二行起每行是一条样本与 csv 表头完全对应。Excel 格式适合标注人员在不熟悉编程的情况下使用表格工具维护数据。三、格式转换工具transform_data.py 深度解析对于非 csv 格式的数据需要借助 transform_data.py 完成转换。该文件位于src/deepke/根目录下同时服务于标准属性抽取Standard AE和标准关系抽取Standard RE两条管线提供四个函数函数用途适用任务json2csv(fp_json, fp_csv)json → csv标准 AE / RExlsx2csv(fp_xlsx, fp_csv)xlsx → csv标准 AE / REjson2txt(fp_json, fp_txt)json → txtBIO 标注标准 NERdoc2txt(fp_doc, fp_txt)docx → txtBIO 标注标准 NER3.1 json2csvJSON 数组转 CSVdef json2csv(fp_json, fp_csv): Standard AE RE. .json - .csv with open(fp_json, encodingutf-8) as f1: lines json.load(f1) fieldnames lines[0].keys() with open(fp_csv, w, encodingutf-8) as f2: writer csv.DictWriter(f2, fieldnamesfieldnames) writer.writeheader() writer.writerows(lines)实现逻辑非常简洁使用json.load读入整个 JSON 数组取第一个元素的所有键作为表头fieldnames然后通过csv.DictWriter依次写入表头和数据行。使用前提是输入必须是 JSON数组每个元素是一条约定的键值对象数组非空因为表头取自lines[0]各元素的键保持一致否则缺失字段会以空值写入。3.2 xlsx2csvExcel 转 CSVdef xlsx2csv(fp_xlsx, fp_csv): book xlrd2.open_workbook(fp_xlsx) sheet book.sheet_by_index(0) row sheet.row(0) row [str(r).split(:)[1][1:-1] for r in row] fieldnames dict(zip(row, [1] * len(row))).keys() ...该函数基于xlrd2读取第一个工作表sheet_by_index(0)将第一行转换为表头读取单元格原始字符串并解析出实际文本从第二行开始逐行读取数据对每个单元格按其类型分派处理number类型去掉浮点后缀temp_r[1][:-2]text类型去掉引号包裹temp_r[1][1:-1]最后以与 json 版本相同的方式写入 csv。注意该函数依赖xlrd2库且仅支持.xlsx后缀的现代 Excel 文件。转换时请确保 Excel 第一行就是表头并且不包含多余的标题行或合并单元格。3.3 使用方式由于 transform_data.py 是可直接运行的 Python 模块转换示例命令如下# 进入仓库根目录后在 Python 中调用 python -c from deepke.transform_data import json2csv; json2csv(example/re/standard/data/example.json, my_data/train.csv)四、数据目录组织与预处理配置4.1 data/origin 目录结构按照 example/re/standard/README_CN.md 的说明完成格式转换后需要将数据按如下方式放入data/origin目录该路径可在 preprocess.yaml 中调整data/origin/ ├── train.csv # 训练数据集 ├── valid.csv # 验证数据集 ├── test.csv # 测试数据集 └── relation.csv # 关系种类定义4.2 预处理参数说明preprocess.yaml 控制着数据进入模型前的全部处理行为关键参数如下参数默认值作用preprocessTrue是否执行预处理。当数据处理参数未变化时可设为False跳过重复预处理直接复用data/out下的缓存结果data_pathdata/origin原始 csv 数据存放位置out_pathdata/out预处理产物train.pkl/valid.pkl/test.pkl/vocab.pkl/vocab.txt输出位置chinese_splitTrue是否对中文进行分词replace_entity_with_typeTrue是否用实体类型替换实体词replace_entity_with_scopeTrue是否用三元组头尾标记HEAD_xx/TAIL_xx替换实体词min_freq3构建 vocab 时的最低词频阈值低于该频次的词会被过滤pos_limit30位置编码的最大距离限制见下文说明replace_entity_with_type与replace_entity_with_scope的组合逻辑在 preprocess.py 的_serialize_sentence中有完整实现两者都为True头尾实体替换为HEAD_head_type、TAIL_tail_type使用关系表中的实体类型仅replace_entity_with_type为True替换为实体类型本身仅replace_entity_with_scope为True替换为通用标记HEAD、TAIL两者都为False保留原始实体词。pos_limit用于生成相对位置序列。从 preprocess.py 的_handle_pos_limit可见句子中每个 token 相对头实体 / 尾实体的距离若超出±pos_limit会被截断随后统一加pos_limit 1得到非负位置编码run.py 中还会据此计算cfg.pos_size 2 * cfg.pos_limit 2与 embedding.yaml 中pos_size的注释2 * pos_limit 2一致0 留给 pad token。4.3 预处理流程的源码视角完整的预处理链路定义在 preprocess.py 的preprocess(cfg)中加载train.csv/valid.csv/test.csv/relation.csv调用_clean_data清洗数据剔除句子中不包含头实体或尾实体的样本调用_handle_relation_data将关系数据转为index/head_type/tail_type映射若model_name lm走 BERT 分词路径_lm_serialize句子末尾拼接[SEP] 头实体 [SEP] 尾实体否则走常规路径Serializer分词 →_serialize_sentence替换实体 → 构建并裁剪 vocab → token 转索引 → 生成头尾相对位置序列将处理结果以pkl形式保存到out_path同时输出人类可读的vocab.txt。在 run.py 中训练启动时会根据cfg.preprocess决定是否调用preprocess(cfg)随后从data/out加载 pkl 文件并构造CustomDataset见 dataset.py。这意味着只要原始数据字段格式正确从 csv 到可训练样本的整条链路都是自动完成的。五、完整的数据准备与训练流程5.1 环境与安装官方要求 Python 3.8 环境核心依赖包括torch 1.5、hydra-core 1.0.6、transformers 3.4.0、jieba 0.42.1以及deepke本体详见 example/re/standard/README_CN.md 的环境依赖清单。克隆并安装git clone https://github.com/zjunlp/DeepKE.git cd DeepKE/example/re/standard pip install -r requirements.txt # 需先创建并激活 python 虚拟环境5.2 准备数据 → 训练 → 预测构造或转换数据参考 example.json 等示例组织数据非 csv 格式通过 transform_data.py 转换放置数据将train.csv、valid.csv、test.csv、relation.csv放入data/origin训练python run.py。训练参数集中在 conf 目录可在 train.yaml 中修改use_multi_gpu置True开启多卡、gpu_ids逗号分隔第一张为计算主卡需略多内存、show_plot置True可视化当前 epoch 的 loss默认False。若使用 lm 模型可在配置中指定本地预训练模型路径lm_file查看产物训练日志保存在logs文件夹模型检查点保存在checkpoints文件夹预测在 predict.yaml 中修改fp为模型或 checkpoint 的绝对路径如xxx/checkpoints/2019-12-03_17-35-30/cnn_epoch21.pth然后执行python predict.py。支持的模型在 run.py 中注册为六种cnnPCNN、rnnBiLSTM、transformer、gcn、capsule、lm预训练模型模型实现位于 src/deepke/relation_extraction/standard/models。5.3 没有关系标签怎么办如果你只有句子和实体对、没有可用的关系标签DeepKE 提供了基于远程监督的关系标注工具 example/re/prepare-data。使用前请确认使用官方提供的三元组文件或保证自定义三元组文件质量较高拥有足够的源数据量。六、注意事项与常见问题offset 是字符偏移而非 token 偏移head_offset/tail_offset按原始句子的字符位置从 0 计数含标点符号如示例中“《”占一个字符位22。标注时建议通过程序自动计算而非手工数位避免中文标点与全半角差异造成错位。csv 句子内含逗号的风险从 example.csv 可见示例数据中的句子本身含中文逗号但未加引号包裹。按照 CSV 规范含逗号的字段应使用引号括起否则按标准csv.DictReader读取时可能造成字段错位。构造数据时建议对sentence等含逗号字段加引号处理。json 数组不能为空json2csv的表头取自第一个元素空数组会导致转换失败。预处理缓存只要数据与处理参数不变可以将 preprocess.yaml 中的preprocess设为False跳过重复预处理直接复用data/out下的 pkl 产物加速二次训练。实体必须出现在句子中预处理阶段的_clean_data会直接丢弃句子中找不到头实体或尾实体的样本标注脏数据过多时会导致有效样本量显著下降建议标注后自检。关系种类文件需要实体类型relation.csv除关系名与编号外还须提供head_type与tail_type它们会在replace_entity_with_type开启时替换实体词也是num_relations见 embedding.yaml等模型超参数的来源。七、小结标准关系抽取的数据准备可概括为一条清晰的链路按照example.*的 6 字段规范组织 json / xlsx 数据 → 用transform_data.py的json2csv/xlsx2csv转换为 csv → 按train.csv / valid.csv / test.csv / relation.csv布局放入data/origin→ 由preprocess自动完成清洗、分词、实体替换与位置编码 → 进入训练与预测。理解了每个字段的含义、relation.csv的结构以及预处理参数的作用你就能将自己的业务数据无缝接入 DeepKE 标准关系抽取管线。赞分享人工智能NLP知识图谱深度学习【免费下载链接】DeepKE[EMNLP 2022] An Open Toolkit for Knowledge Graph Extraction and Construction项目地址https://gitcode.com/gh_mirrors/de/DeepKE点击查看免费下载相关推荐DeepKE 标准关系抽取数据准备全指南JSON、XLSX、CSV 三种数据格式与格式转换工具实战DeepKE 标准关系抽取数据准备全指南JSON、XLSX、CSV 三种数据格式与格式转换工具实战 本文围绕 DeepKE 标准关系抽取Standard R人工智能NLP知识图谱深度学习DeepKE 标准 NER 数据准备指南JSON / DOCX / TXT 三种格式详解与转换实战DeepKE 标准 NER 数据准备指南JSON / DOCX / TXT 三种格式详解与转换实战 导读 本文围绕 example/ner/standard/人工智能NLP知识图谱深度学习DeepKE项目关系抽取数据准备指南DeepKE项目关系抽取数据准备指南 前言 在自然语言处理领域关系抽取 Relation Extraction, RE 是一项重要的信息抽取任务旨在识别文本人工智能NLP知识图谱深度学习上一篇超星网课助手终极指南如何5分钟完成课程任务提升学习效率300%下一篇实战配置指南轻松恢复洛雪音乐播放功能的高效方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。