{"id":13754287,"url":"https://github.com/CLUEbenchmark/KgCLUE","last_synced_at":"2025-05-09T22:31:45.702Z","repository":{"id":63452167,"uuid":"416559888","full_name":"CLUEbenchmark/KgCLUE","owner":"CLUEbenchmark","description":"KgCLUE: 大规模中文开源知识图谱问答","archived":false,"fork":false,"pushed_at":"2022-07-05T05:20:36.000Z","size":36511,"stargazers_count":445,"open_issues_count":10,"forks_count":60,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-05T16:06:11.814Z","etag":null,"topics":["kbqa","knowledge-graph","ner","qa","similarity-search"],"latest_commit_sha":null,"homepage":"https://www.CLUEbenchmarks.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CLUEbenchmark.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-10-13T02:14:03.000Z","updated_at":"2025-04-01T03:36:30.000Z","dependencies_parsed_at":"2022-11-19T06:46:34.199Z","dependency_job_id":null,"html_url":"https://github.com/CLUEbenchmark/KgCLUE","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CLUEbenchmark%2FKgCLUE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CLUEbenchmark%2FKgCLUE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CLUEbenchmark%2FKgCLUE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CLUEbenchmark%2FKgCLUE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CLUEbenchmark","download_url":"https://codeload.github.com/CLUEbenchmark/KgCLUE/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253335741,"owners_count":21892725,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kbqa","knowledge-graph","ner","qa","similarity-search"],"created_at":"2024-08-03T09:01:53.245Z","updated_at":"2025-05-09T22:31:40.688Z","avatar_url":"https://github.com/CLUEbenchmark.png","language":"Python","funding_links":[],"categories":["知识图谱"],"sub_categories":["其他_文本生成、文本对话"],"readme":"# KgCLUE\n\nKgCLUE: 大规模中文开源知识图谱问答\n\n在线DEMO\u003ca href=\"https://www.cluebenchmarks.com/KgCLUEdemo\"\u003e点击此处\u003c/a\u003e体验\n\n预约演示：\u003ca href=\"https://www.modelfun.cn\" target=\"_\" style=\"color:red\"\u003e数据集自动标注工具--释放AI潜力！\u003c/a\u003e\n\n## 内容导引\n| 章节 | 描述 |\n|-|-|\n| [简介](#简介) | 介绍背景 |\n| [任务描述](#任务描述) | 介绍任务的基本信息 |\n| [数据集介绍](#数据集介绍) | 介绍数据集及示例 |\n| [实现思路](#实现思路) | 介绍实现的具体思路 |\n| [实验结果](#实验结果) | 针对各种不同方法，在KgCLUE上的实验对比 |\n| [实验分析](#实验分析) | 对模型能力进行分析 |\n| [KgCLUE有什么特点](#KgCLUE有什么特点) | 特点介绍 |\n| [基线模型及运行](#基线模型及运行) | 支持多种基线模型 |\n| [相关阅读](#相关阅读) | 新方案及其解读 |\n| [排行榜及提交](#排行榜及提交) | 排行榜及提交样例 |\n| [贡献与参与](#贡献与参与) | 如何参与项目或反馈问题|\n\n  \u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/kgclue1.0.gif\"  width=\"75%\" height=\"75%\" /\u003e   \n\n\n## 简介\n KBQA（Knowledge Base Question Answering），即给定自然语言问题，通过对问题进行语义理解和解析，进而利用知识库进行查询、推理得出答案。\n \n KBQA利可以用图谱丰富的语义关联信息，能够深入理解用户问题并给出答案，近年来吸引了学术界和工业界的广泛关注。KBQA主要任务是将自然语言问题（NLQ）通过不同方法映射到结构化的查询，并在知识图谱中获取答案。\n \n KgCLUE：中文KBQA测评基准，基于CLUE的积累和经验，并结合KBQA的特点和近期的发展趋势，精心设计了该测评，希望可以促进中文领域上KBQA领域更多的研究、应用和发展。\n\n\n### UPDATE:\n  ******* 2021-12-18：添加完整基线模型(baselines/ner_sim)，包括预训练脚本及训练好的模型的下载地址\n   \n  ******* 2021-11-27：添加支持KgCLUE的Roberta-wwm-ext的baseline\n\n  ******* 2021-11-15：添加支持KgCLUE的Roberta-wwm-large的baseline\n\n  ******* 2021-11-03: 添加支持KgCLUE的Bert的baseline\n\n  ******* 2021-11-02: 添加了知识库和问答数据集。\n  \n\n## 任务描述\n\nKBQA任务即为给定一份知识库和一份问答数据集，从问答数据集中学习问题语义然后从知识库中查询答案。本测评提供了一份中文百科知识库和一份问答数据集。\n\n\n## 数据集介绍\n\n### 知识库介绍\n\n知识库可通过\u003ca href=\"https://pan.baidu.com/s/1bJgDGz0NjU1EtMjBWjQayw\"\u003e百度云\u003c/a\u003e，提取码:nhsb，或着\u003ca href='https://drive.google.com/file/d/1tOSwVzr71uJjHbMZJd67yT8kEAc5ThqL/view?usp=sharing'\u003eGoogle云\u003c/a\u003e下载。\n\n下载后，请将其放入knowledge文件夹中。\n\n### 知识库（三元组）统计信息\n| 实体数量   | 关系数量     | 高频关系(\u003e100)  |三元组数量| \n| :----:| :----:  |:----:  |:----:  | \n|   3121457    |    245838     |   3833     |   20559652    |\n\n  知识库来源于百科类数据，由百科类搜索页面的事实性三元组构成。\n\n\n### 知识库描述\n\n  \u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/knowledge_info.png\"  width=\"85%\" height=\"85%\" /\u003e   \n  \u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/kg_example2.jpeg\"  width=\"95%\" height=\"95%\" /\u003e   \n\n\n    知识库中数据存储格式如上，每一行是一个三元组，格式为\u003c头实体，关系，尾实体\u003e，每列之间以'\\t'分隔，\n    其中头实体后的括号项为该实体的消歧项。\n\n\n### 问答数据集统计信息\n\n| Corpus   | Train     | Dev  |Test Public| Test Private |\n| :----:| :----:  |:----:  |:----:  |:----:  |\n| Num Samples |  18k      |   2k   |      2k     |       3k       |\n| Num Relations |  2164      |  1258    |     1260      |     423         |\n\n    问答数据集为one-hop数据，总共包含25000条问答对。\n    数据集分为4份：1份训练集(Train)；1份验证集(Dev)；1份公开测试集(Test Public)，用于测试；1份私有测试集(Test Private)，用于提交，不公开。\n\n### 问答数据集描述\n\n   \u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/qa.png\"  width=\"100%\" height=\"100%\" /\u003e  \n\n问答数据集为json格式，每行为一条问答对。问题是one-hop问题，即答案为知识库中的一条三元组。数据格式如下，其中id为问答对索引，quetion为问题，answer为答案，来自知识库，以' ||| '分割。\n\n\n## 实验结果\n实验设置：训练集和验证集使用训练集与验证集，测试集使用公开测试集。\n\n   \u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/ner_re_performance.jpeg\"  width=\"70%\" height=\"70%\" /\u003e \n\n\n## 实现思路\n下面简单介绍该任务的baseline的构建思路，但并不对任务数据进行详细介绍，如对任务数据不明白，请返回[数据集介绍](#数据集介绍)部分\n\n以下图片仅为思路参考，总体思路：\n\n    1.利用NER模型进行实体识别(S)；\n    2.根据识别到的实体，通过es接口找到可能的候选关系的列表；\n    3.训练相似度模型进行关系预测：输入为问句和候选关系，找到最可能的关系（P）；\n    4.最后根据实体（S）、关系(P)定位到答案（O,即尾实体）\n\n#### NER阶段\n 做NER任务，如图所示用于识别出问题中的实体。\n \n\u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/BertForTokenClassification+crf.png\"  width=\"100%\" height=\"100%\" /\u003e \n\n\u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/Bert-Bilstm-CRF.png\"  width=\"100%\" height=\"100%\" /\u003e \n\n#### SIM阶段 \n我们使用句子分类任务（二分类），把问题和关系(属性）拼接到一起，用于判断问题要问的是不是这个属性。\n\n\u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/BertForSequenceClassification.png\"  width=\"85%\" height=\"85%\" /\u003e \n\n## 基线模型及运行 \n### 环境依赖\n1）NER模型：   \n     python3.6+\n     1.1.0 =\u003c pytorch \u003c 1.5.0, or 1.7.1\n2）SIM模型\n    python3.6+\n    tensorflow 1.14+\n    bert4keras, 0.10.8 \n### 如何运行\n    进入到ner_re的目录(cd baselines/ner_re)；\n    然后顺序执行以下命令：1）训练NER模型；2）训练相似度模型；3）生成预测文件并提交。\n#### 1.NER模型(pytorch)\n##### 1.0 下载预训练模型\n 下载并将预训练模型(\u003ca href='https://github.com/ymcui/Chinese-BERT-wwm#%E4%B8%AD%E6%96%87%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD'\u003echinese_rbt3_pytorch\u003c/a\u003e）放入到prev_trained_model目录。\n pytorch版用于NER,tensorflow版用于相似度模型。\n\n##### 1.1 训练NER模型\n    bash scripts/run_ner_softmax.sh \n    \n    其中，处理成NER训练数据的主要代码：processors/utils_ner.py的DataProcessor(65-96行)\n   \n   已经训练好的NER模型\u003ca href='https://storage.googleapis.com/cluebenchmark/kgclue_models/RBT3_ner.zip'\u003e下载\u003c/a\u003e\n    \n##### 1.2 对测试集(test.json)进行预测，生成NER结果\n\n    bash scripts/run_ner_softmax.sh predict\n    \n    预测结果在这里：./outputs/kg_output/bert/test_prediction.json\n    生成的示例如:\n    {\"id\": 0, \"tag_seq\": \"O O O O B-NER I-NER I-NER O O O O O O\", \"entities\": [[\"NER\", 4, 6]]}\n    {\"id\": 1, \"tag_seq\": \"O O B-NER I-NER I-NER O O O O O O O O\", \"entities\": [[\"NER\", 2, 4]]}\n    {\"id\": 2, \"tag_seq\": \"O O B-NER I-NER I-NER I-NER I-NER I-NER I-NER O O O O O O O O\", \"entities\": [[\"NER\", 2, 8]]}\n#### 2.SIM（相似度）模型\n#####  2.1 生成相似度训练数据\n\n    python3 -u  sim/process_sim_data.py\n    \n    其中，生成的相似度训练数据所在的目录为：./processed_data\n   \n   已经训练好的相似度(SIM)模型\u003ca href='https://storage.googleapis.com/cluebenchmark/kgclue_models/RBT3_ner.zip'\u003e下载\u003c/a\u003e\n\n##### 2.2 训练SIM模型\n\n    python3 -u sim/train.py\n    \n    其中，相似度模型所在的位置：./outputs/kg_sim_output\n    \n##### 测试单个输入的相似度（可选）\n\n    python3 -u sim/predict.py\n#### 3. 生成预测文件并提交\n\n    python3 -u submit/generate_submit_file.py\n    \n    生成的文件为：./kgclue_predict_rbt3.json\n\n    使用如下命令压缩文件：zip -r kgclue_predict_rbt3.zip kgclue_predict_rbt3.json\n    \n   提交预测文件到\u003ca href='www.CLUEbenchmarks.com'\u003e测评系统\u003c/a\u003e，并查看：\u003ca href='https://www.cluebenchmarks.com/kgclue.html'\u003e榜单效果\u003c/a\u003e\n\n基线模型详细介绍见：\u003ca href='./baselines/ner_re/README.md'\u003e./baselines/ner_re/README.md\u003c/a\u003e\n\n\n### 相关阅读\n   \u003ca href='https://kexue.fm/archives/8802'\u003e《Seq2Seq+前缀树：检索任务新范式（以KgCLUE为例）》，苏剑林\u003c/a\u003e\n    \n    本文介绍了检索模型的一种新方案——“Seq2Seq+前缀树”，并以KgCLUE为例给出了一个具体的baseline。\n    “Seq2Seq+前缀树”的方案有着训练简单、空间占用少等优点，也有一些不足之处，总的来说算得上是一种简明的有竞争力的方案。\n    \n\u003e我们还提供了另一个代码库可以更简单方便的复现我们的效果https://github.com/CLUEbenchmark/KgCLUEbench\n\n## 效果评估脚本\n     Score=EM_O * 0.50 + F1_O * 0.50\n\n\u003ca href='./baselines/evaluate_f1_em.py'\u003eevaluate_f1_em.py\u003c/a\u003e\n\n## 实验分析\n\n\n### 1.测评结果  Benchmark Results\n\n#### 1.1 模型评测指标\n\n我们采用业界常用的F1-score 以及完全匹配（Exact Match下简称EM）来作为模型的评测指标\n\nF1-score：F1-score是分类问题的常用指标，广泛用于 QA。 当我们同样关心精度和召回率时用F1就十分合适。 在这种情况下，它是针对预测中的单个单词与真实答案中的单词进行计算的。 预测和真值之间的共享词数是F1分数的基础：精度是预测中共享词的数量与总词数的比值，召回率是共享词数的比值 到基本事实中的单词总数。\n\u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/f1score.png\"  width=\"85%\" height=\"85%\" /\u003e \n\n完全匹配(Exact Match)：对于每个问题+答案对，如果模型预测的答案的字符与正确答案（之一）的字符完全匹配，则 EM = 1，否则 EM = 0。这是一个严格的有或无的指标； 如有单字错误仍然得分为 0。在针对负面示例进行评估时，如果模型预测了任何文本，它会自动为该示例得分为 0。\n\n#### 1.2 模型表现分析  Analysis of Model Performance\n\nbaseline都使用预训练模型直接做下游任务微调 bert-base-chinese，chinese-roberta-wwm-ext-large以及chinese-roberta-wwm-ext\n\n我们发现：\n\n1）参照过往工作，三个个模型的F1和EM分数都属于中等水平 说明对于中文KBQA领域，模型还有很大的发展空间\n\n2）模型的效果会对下游任务分数有所提升\n\n3）在NER和similarity的阶段的效果影响结果较大，参考过往工作，我们的baseline模型两阶段分数处于中下等水平，还是有很大的发展空间 \n\n4）我们曾使用过不同难度的数据训练以及测试模型，发现数据处理对分数的影响较大，或许可以设法通过难样本挖掘构建难样本进行更有效训练\n\n\n## KgCLUE有什么特点\n1、KBQA利用的是结构化的知识，其数据来源决定了适合回答what，when 等事实性问题。\n\n2、KBQA的研究，根据目标问题的性质，可以分为几个方向。第一个是单跳问题 (one hop) ，第二个是多跳问题 (multi hop)。单跳问题是指可以通过知识库中某一条事实三元组来回答，而多跳问题是指需要知识库中的多条事实三元组来回答。KgCLUE第一版（即KgCLUE1.0）针对的是单跳问题构建的数据集。\n\n3、测评的主要目标是KBQA，根据KBQA任务的特点，可以考察近年来的实体识别、关系分类以及实体链接等子任务的发展。\n\n此外，我们提供KBQA测评完善的基础设施。\n从任务设定，广泛的数据集，多个有代表性的基线模型及效果对比，一键运行脚本，到测评系统等完整的基础设施。\n\n## 排行榜及提交\n\n#### 提交说明\n训练端到端或非端到端模型，在非公开测试集上\u003ca href=\"./qa_data/test.json\"\u003etest.json\u003c/a\u003e进行预测，\n生成kgclue_predict.json并压缩，得到kgclue_predict.zip；然后提交到\u003ca href=\"https://www.cluebenchmarks.com\" target=\"_blank\"\u003eCLUE测评系统\u003c/a\u003e\n\n\u003ca href=\"./resources/kgclue_submit_examples/kgclue_predict.json\"\u003e提交样例\u003c/a\u003e\n\n\u003ca href=\"https://www.cluebenchmarks.com/kgclue.html\" target=\"_blank\"\u003e排行榜\u003c/a\u003e\n\n\n## 问题 Question\n    1. 问：测试系统，什么时候开发？\n       答：测评系统在2021年12月1日后开放。\n    2. 问：SIM训练的数据集标注怎么搞？\n       答：问题原样本属性为正，再随机从样本中其他属性抽5个设为负（你也可以设法通过难样本挖掘构建难样本进行更有效训练）。\n    3. 问：什么是属性？\n       答：三元组中间那列数据，如图所示\n  \u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/attribute.png\"  width=\"85%\" height=\"85%\" /\u003e \n\n\n## 贡献与参与\n    1.问：我有符合代码规范的模型代码，并经过测试，可以贡献到这个项目吗？\n     答：可以的。你可以提交一个pull request，并写上说明。我们会设法在24小时内反馈。\n    \n    2.问：我正在研究KBQA学习，具有较强的模型研究能力，怎么参与到此项目？\n      答：发送邮件到 CLUEbenchmark@163.com，标题为：参与KgCLUE课题，并介绍一下你的研究。\n    \n    3.如何交流？\n     提交你的issue；加QQ群（群号:836811304）；或加入微信群\n   \u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/kgcluegroup.jpeg\"  width=\"35%\" height=\"35%\" /\u003e \n   \u003cimg src=\"https://github.com/CLUEbenchmark/KgCLUE/blob/main/resources/img/brightmart.jpeg\"  width=\"35%\" height=\"35%\" /\u003e \n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCLUEbenchmark%2FKgCLUE","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCLUEbenchmark%2FKgCLUE","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCLUEbenchmark%2FKgCLUE/lists"}