基于DeepPavlov的中文知识问答系统
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://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://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://localhost:8855/kbqa",
data = {
"question": "洪都拉斯什么时候的失业率为4.0?"
}
)
json.loads(rep.content.decode())["output"][:3]
this will output
["['2014-01-01T00:00:00Z', 'http://www.wikidata.org/value/c91277cf69500270615dc91eeba92a40']"]
这个将会梳理你对于工程的整体脉络 这部分将会让你对于细节函数设计有了解
svjack - [email protected] - [email protected]
Project Link:https://github.com/svjack/DeepPavlov-Chinese-KBQA