Skip to content

A Chinese version Knowledge Base Question Answer System Based on DeepPavlov

Notifications You must be signed in to change notification settings

svjack/DeepPavlov-Chinese-KBQA

Repository files navigation


DeepPavlov-Chinese-KBQA

基于DeepPavlov的中文知识问答系统

In English

简要引述

DeepPavlov 是一个基于TensorFlow、Keras和PyTorch构建的开源对话AI库,它具有知识库问答模型,支持对英文和俄文进行知识库问答。

本项目旨在通过将相应的其它语言语义解析组件替换为中文版本,并在中文领域进行微调,重构一个基于中文的KBQA系统。

安装

请参考INSTALL.sh来安装环境,并确保您能够运行原始DeepPavlov项目的KBQA任务。

由于安装可能会比较困难,我已经建立了一个包含预训练模型的Docker镜像,这些模型位于model、sel_ner、tmp_cls和ranker_cls文件夹中。如果有需要,您可以发送邮件至[email protected]来获取它们。

Wikidata知识库的hdt文件可以从我这里获取,或者从rdfhdt下载,并确保您下载的版本包含中文部分(有些只有英文部分)。

预训练模型应放置在相应的位置。

您可以使用以下链接从百度云盘获取它们,并将它们放置在项目根路径中。
https://pan.baidu.com/s/1HLAzfBPasudGqtp9f0j5iA?pwd=p83h
请记得使用cat将wikidata.hdt.aa、wikidata.hdt.ab和wikidata.hdt.ac合并为wikidata.hdt后再使用它。

model: #### LaBSE embedding
- LaBSE_local  

sel_ner: #### Entity Extraction
- adapter_config.json
- ner_data_args.pkl
- pytorch_model_head.bin
- head_config.json
- pytorch_adapter.bin

tmp_cls: #### Template classifier
- tmp_bag_mlp.pkl

ranker_cls: #### Ranking model
- pid_zh_b_dict.json
- ranking_bag_mlp.pkl

kbqa-explore: #### Knowledge Base and translation dictionary
- multi_lang_kb_dict.db
- wikidata.hdt
- linker_entities.pkl

知识图谱问答使用方式

您可以直接运行kbqa_step.py(在main闭包中调用do_search),或者进入mysite并激活您安装KBQA的环境(在INSTALL.sh中)。

conda activate kbqa_env
bash run.sh

这将在8855端口运行一个服务,然后您可以使用它来检索类似于结论的内容。

Example 1:

import requests
import json
rep = requests.post(
    url = "http:https://localhost:8855/kbqa",
    data = {
        "question": "指环王的作者是谁?"
    }
)
json.loads(rep.content.decode())["output"][:3]

this will output

["[['J·R·R·托尔金', 'J·R·R·托爾金', 'J·R·R·託爾金', '托尔金', '托爾金', '約翰·羅納德·瑞爾·托爾金', '約翰·羅納德·瑞爾·託爾金', '约翰·罗纳德·瑞尔·托尔金']]",
 "[['溫紐特影片公司'], ['新線影業']]",
 "[['彼得·杰克逊', 'Peter Jackson', '彼得·傑克森', '彼得·積遜', '彼德·積遜'], ['法蘭·華許', '法蘭·沃許', '法蘭·華爾絲'], ['巴利·奧斯朋'], ['索尔·扎恩兹']]"]

Example 2:

rep = requests.post(
    url = "http:https://localhost:8855/kbqa",
    data = {
        "question": "海曙区在哪个城市?"
    }
)
json.loads(rep.content.decode())["output"][:3]

this will output

["[['宁波市', '宁波', '甬'], ['海曙区', '海曙']]",
 "['Point(121.39475 29.85648)', 'Point(121.41092 29.78336)', 'Point(121.53333333333 29.883333333333)']",
 "[['高桥镇'], ['鄞江镇'], ['章水镇'], ['古林镇', '古林'], ['横街镇'], ['江厦街道', '江厦街道办事处'], ['望春街道', '望春街道办事处'], ['段塘街道', '段塘街道办事处'], ['洞桥镇'], ['集士港镇'], ['月湖街道', '月湖街道 (宁波市)', '月湖街道办事处'], ['鼓楼街道 (宁波市)'], ['南门街道 (宁波市)'], ['西门街道'], ['白云街道'], ['石碶街道'], ['龙观乡']]"]

Example 3:

rep = requests.post(
    url = "http:https://localhost:8855/kbqa",
    data = {
        "question": "洪都拉斯什么时候的失业率为4.0?"
    }
)
json.loads(rep.content.decode())["output"][:3]

this will output

["['2014-01-01T00:00:00Z', 'http:https://www.wikidata.org/value/c91277cf69500270615dc91eeba92a40']"]

推荐你阅读下面的两部分:

这个将会梳理你对于工程的整体脉络 这部分将会让你对于细节函数设计有了解

Contact

svjack - [email protected] - [email protected]

Project Link:https://github.com/svjack/DeepPavlov-Chinese-KBQA

Acknowledgements