写点什么

从零构建医疗领域知识图谱的 KBQA 问答系统

  • 2023-07-27
    浙江
  • 本文字数:1221 字

    阅读完需:约 4 分钟

从零构建医疗领域知识图谱的KBQA问答系统

从零构建医疗领域知识图谱的 KBQA 问答系统:其中 7 类实体,约 3.7 万实体,21 万实体关系。

  • 项目效果


以下两张图是系统实际运行效果:


1.项目运行方式

运行环境:Python3 数据库:neo4j 预训练词向量:https://github.com/Embedding/Chinese-Word-Vectorshttps://pan.baidu.com/s/14JP1gD7hcmsWdSpTvA3vKA


1、搭建知识图谱:python build_grapy.py。大概几个小时,耐心等待。2、启动问答测试:python kbqa_test.py


部分代码展示:


from entity_extractor import EntityExtractorfrom search_answer import AnswerSearching

class KBQA: def __init__(self): self.extractor = EntityExtractor() self.searcher = AnswerSearching()
def qa_main(self, input_str): answer = "对不起,您的问题我不知道,我今后会努力改进的。" entities = self.extractor.extractor(input_str) if not entities: return answer sqls = self.searcher.question_parser(entities) final_answer = self.searcher.searching(sqls) if not final_answer: return answer else: return '\n'.join(final_answer)

if __name__ == "__main__": handler = KBQA() while True: question = input("用户:") if not question: break answer = handler.qa_main(question) print("小豪:", answer) print("*"*50)
复制代码

2.医疗知识图谱

数据源:39 健康网。包括 15 项信息,其中 7 类实体,约 3.7 万实体,21 万实体关系。


本系统的知识图谱结构如下:



1.1 知识图谱实体类型



1.2 知识图谱实体关系类型



1.3 知识图谱疾病属性


3.问题意图识别

基于特征词分类的方法来识别用户查询意图


4.总结

1、本项目构建简单,通过本项目能了解 KBQA 的工作流程。


2、本次通过手工标记 210 条意图分类训练数据,并采用朴素贝叶斯算法训练得到意图分类模型。其最佳测试效果的 F1 值达到了 96.68%。选用 NB 的原因是通过与 SVM 训练效果比较后决定的。


3、优化点:


  • 训练数据还是太少,且对问题进行标注时易受主观意见影响。意图类别还是太少,本系统得到分类模型只能预测出上面设定的 7 类意图。

  • 对于问题句子中有多个意图的情况只能预测出一类,今后有时间再训练多标签模型吧。。

  • 知识图谱太小了,对于许多问题都检索不出答案。今后可以爬取其它的健康网站数据或者利用命名实体识别和关系抽取技术从医学文献中抽取出实体与关系,以此来扩充知识图谱。

  • 在本项目中采用了预训练的词向量来找近似词。由于该词向量特别大,加载非常耗时,因此影响了整个系统的效率。这个可能是因为电脑配置太低的原因吧。

  • 没有实现推理的功能,后续将采用多轮对话的方式来理解用户的查询意图。同时将对检索出的结果进行排序,可靠度高的排在前面。

项目链接跳转

文章码源链接


更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。




发布于: 刚刚阅读数: 6
用户头像

本博客将不定期更新关于NLP等领域相关知识 2022-01-06 加入

本博客将不定期更新关于机器学习、强化学习、数据挖掘以及NLP等领域相关知识,以及分享自己学习到的知识技能,感谢大家关注!

评论

发布
暂无评论
从零构建医疗领域知识图谱的KBQA问答系统_人工智能_汀丶人工智能_InfoQ写作社区