文章目录
- 基于BERT+LSTM+CRF与知识图谱的医疗智能问答系统实战:Neo4j图数据库+实体识别+意图分析完整项目
-
- 一、项目名称
- 二、项目定位
- 三、项目亮点
-
- [1. 融合深度学习实体识别](#1. 融合深度学习实体识别)
- [2. 构建医疗知识图谱](#2. 构建医疗知识图谱)
- [3. 支持医疗问句意图识别](#3. 支持医疗问句意图识别)
- [4. Web 系统完整可运行](#4. Web 系统完整可运行)
- [5. 适合毕业设计和项目展示](#5. 适合毕业设计和项目展示)
- 四、项目背景
- 五、系统总体目标
- 六、系统技术架构
- 七、系统整体流程
- 八、核心功能模块
-
- [1. 用户登录与系统访问模块](#1. 用户登录与系统访问模块)
- [2. 医疗实体识别模块](#2. 医疗实体识别模块)
- [3. 问句意图识别模块](#3. 问句意图识别模块)
- [4. 知识图谱构建模块](#4. 知识图谱构建模块)
- [5. Neo4j 图数据库查询模块](#5. Neo4j 图数据库查询模块)
- [6. 答案生成模块](#6. 答案生成模块)
- [九、BERT+LSTM+CRF 模型说明](#九、BERT+LSTM+CRF 模型说明)
-
- [1. 模型结构](#1. 模型结构)
- [2. 为什么使用 BERT+LSTM+CRF](#2. 为什么使用 BERT+LSTM+CRF)
- [3. 实体识别标签设计](#3. 实体识别标签设计)
- [4. 识别结果示例](#4. 识别结果示例)
- 十、知识图谱数据设计
-
- [1. 实体节点设计](#1. 实体节点设计)
- [2. 关系设计](#2. 关系设计)
- [3. 图谱查询优势](#3. 图谱查询优势)
- 十一、系统部分页面展示
- 十二、测试账号
- 十三、项目可扩展方向
-
- [1. 医疗问答准确率优化](#1. 医疗问答准确率优化)
- [2. 知识图谱可视化](#2. 知识图谱可视化)
- [3. 增加医疗文本情感分析](#3. 增加医疗文本情感分析)
- [4. 接入大模型增强问答](#4. 接入大模型增强问答)
- [5. 增加后台知识库维护](#5. 增加后台知识库维护)
- 十四、项目总结
- 十六、结语
基于BERT+LSTM+CRF与知识图谱的医疗智能问答系统实战:Neo4j图数据库+实体识别+意图分析完整项目
文章更新时间:2026-06-08
项目类型:深度学习 / 知识图谱 / 医疗问答系统 / Python Web 项目
技术方向:BERT、LSTM、CRF、Neo4j、Django、MySQL、jieba、pyahocorasick
适用场景:课程设计、毕业设计、医疗知识图谱项目、智能问答系统、自然语言处理项目、AI 全栈项目实战
一、项目名称
基于 BERT+LSTM+CRF 深度学习与知识图谱的医疗领域智能问答系统
二、项目定位
本项目是一套面向医疗健康知识问答场景的综合型 AI 系统,融合了自然语言处理、深度学习序列标注、知识图谱、图数据库查询和 Web 系统开发等多个技术方向。系统以医疗领域知识数据为基础,通过 BERT+LSTM+CRF 模型完成医学实体识别,结合问句意图分析模块判断用户查询目标,再通过 Neo4j 知识图谱进行关系检索,最终返回结构化、可解释的问答结果。
相比普通的关键词匹配问答系统,本项目更强调"语义理解 + 医学实体识别 + 知识图谱推理查询"的完整链路。项目不仅适合作为自然语言处理方向的课程设计和毕业设计,也适合扩展为医疗知识库问答、健康咨询辅助系统、智能客服原型、医学知识图谱可视化平台等应用。
需要说明的是,本项目主要用于技术学习、项目实战和系统设计展示,回答结果来自构建的医疗知识库,不替代专业医生诊断和医疗建议。
三、项目亮点
1. 融合深度学习实体识别
系统采用 BERT+LSTM+CRF 结构进行医学命名实体识别,可识别疾病、症状、药品、检查项目、科室等医学实体。相比单纯词典匹配,深度学习模型对上下文语义具备更好的理解能力。
2. 构建医疗知识图谱
系统基于 Neo4j 图数据库存储医疗实体和关系,例如疾病与症状、疾病与药物、疾病与检查、疾病与科室之间的关联。图数据库非常适合表达医学知识之间复杂的关系结构。
3. 支持医疗问句意图识别
系统不仅识别用户问句中的实体,还会判断用户想问什么,例如:
- 某个疾病有什么症状?
- 某个疾病应该吃什么药?
- 某个症状可能是什么病?
- 某个疾病需要做哪些检查?
- 某个疾病属于哪个科室?
这使得系统不只是"查词",而是能够按照用户意图组织答案。
4. Web 系统完整可运行
项目基于 Django 搭建 Web 服务,结合 MySQL 和 Neo4j 完成数据管理与知识查询,具备登录、问答、后台数据管理、知识库查询等系统功能,项目完整度较高。
5. 适合毕业设计和项目展示
本项目覆盖 NLP + 深度学习 + 知识图谱 + 图数据库 + Web 系统 多个热门方向,技术栈丰富,展示效果直观,非常适合计算机专业毕业设计、人工智能课程项目和自然语言处理项目实战。
四、项目背景
随着人工智能、大数据和自然语言处理技术的发展,医疗问答系统逐渐成为智能健康服务中的重要应用方向。传统医疗信息检索方式通常依赖用户手动搜索关键词,结果分散、准确性不稳定,也缺少结构化知识支撑。
医疗知识图谱能够将疾病、症状、药物、检查、科室、治疗方式等医学知识抽象为实体与关系,并通过图结构表达知识之间的联系。结合深度学习实体识别模型后,系统可以从自然语言问句中抽取核心医学实体,再根据意图分类结果转化为图数据库查询语句,最终实现可解释的智能问答。
本项目正是围绕这一思路设计:使用深度学习模型理解用户问题,使用知识图谱组织医疗知识,使用 Django 构建可交互的问答系统,从而形成一个完整的医疗领域智能问答平台。
五、系统总体目标
本系统的建设目标包括:
- 构建医疗领域知识库,整理疾病、症状、药品、检查、科室等实体数据。
- 基于 Neo4j 构建医疗知识图谱,存储实体及关系。
- 使用
BERT+LSTM+CRF实现医学实体识别。 - 使用意图分析模块识别用户问句类型。
- 根据实体和意图生成图数据库查询逻辑。
- 基于 Django 构建医疗问答 Web 系统。
- 提供可运行、可展示、可扩展的完整项目案例。
六、系统技术架构
| 技术层级 | 核心技术 | 主要作用 |
|---|---|---|
| 前端展示层 | HTML、CSS、JavaScript、Django Template | 问答页面、登录页面、结果展示 |
| 后端服务层 | Python、Django 3.2.8 | Web 服务、路由控制、业务逻辑 |
| 数据存储层 | MySQL | 用户信息、系统配置、业务数据存储 |
| 图数据库层 | Neo4j | 医疗实体和实体关系存储 |
| NLP 处理层 | BERT、LSTM、CRF、jieba | 实体识别、分词处理、语义理解 |
| 关键词匹配层 | pyahocorasick | 医学词典快速匹配 |
| 数据解析层 | requests、BeautifulSoup | 数据采集、页面解析、知识抽取扩展 |
| 图谱访问层 | py2neo | Python 操作 Neo4j 图数据库 |
七、系统整体流程
系统完整问答流程如下:
- 用户在 Web 页面输入医疗健康相关问题。
- 系统对问句进行文本预处理。
- 实体识别模块抽取疾病、症状、药品、检查等医学实体。
- 意图识别模块判断用户查询目标。
- 查询转换模块将实体和意图转化为 Neo4j 图查询逻辑。
- Neo4j 返回对应实体关系数据。
- 答案生成模块将结构化结果整理为自然语言回答。
- 前端页面展示问答结果。
问答链路示意
| 阶段 | 输入 | 处理方法 | 输出 |
|---|---|---|---|
| 用户提问 | 自然语言问句 | 文本预处理 | 标准化问句 |
| 实体识别 | 标准化问句 | BERT+LSTM+CRF / 词典匹配 | 医学实体 |
| 意图判断 | 问句和实体 | 规则分类 / 语义分类 | 查询意图 |
| 图谱查询 | 实体和意图 | Neo4j Cypher 查询 | 关系数据 |
| 答案生成 | 图谱结果 | 模板生成 / 规则组织 | 最终回答 |
八、核心功能模块
1. 用户登录与系统访问模块
系统提供基础用户登录功能,用户进入系统后可以进行医疗问答查询、查看结果和使用相关功能。后台可扩展用户管理、问答记录管理和知识库维护功能。
2. 医疗实体识别模块
实体识别是整个问答系统的核心。用户输入的问题通常是自然语言,例如:
- "糖尿病有哪些症状?"
- "头痛可能是什么疾病?"
- "高血压应该吃什么药?"
- "感冒需要做什么检查?"
系统需要从问句中识别出"糖尿病""头痛""高血压""感冒"等实体,并判断其所属类别。
3. 问句意图识别模块
在识别实体后,系统需要进一步判断用户想问的问题类型。例如:
| 问句示例 | 实体 | 意图 |
|---|---|---|
| 糖尿病有什么症状? | 糖尿病 | 查询疾病症状 |
| 头痛可能是什么病? | 头痛 | 根据症状查疾病 |
| 高血压吃什么药? | 高血压 | 查询推荐药物 |
| 肺炎需要做哪些检查? | 肺炎 | 查询检查项目 |
| 胃炎挂什么科? | 胃炎 | 查询所属科室 |
意图识别决定了后续 Neo4j 查询的方向,因此它直接影响答案准确性。
4. 知识图谱构建模块
知识图谱模块负责将医疗知识组织为实体和关系。
常见实体包括:
- 疾病
- 症状
- 药品
- 检查项目
- 科室
- 食物
- 治疗方式
常见关系包括:
- 疾病 - 具有症状 - 症状
- 疾病 - 推荐药物 - 药品
- 疾病 - 需要检查 - 检查项目
- 疾病 - 所属科室 - 科室
- 疾病 - 宜吃食物 - 食物
- 疾病 - 忌吃食物 - 食物
5. Neo4j 图数据库查询模块
Neo4j 用于存储医疗实体及关系,系统通过 py2neo 连接图数据库,并根据用户问题动态查询对应实体关系。
示例查询逻辑:
cypher
MATCH (d:Disease)-[:HAS_SYMPTOM]->(s:Symptom)
WHERE d.name = "糖尿病"
RETURN s.name
该查询表示:查询"糖尿病"对应的症状实体。
6. 答案生成模块
Neo4j 返回的是结构化数据,不能直接作为自然语言答案展示,因此系统需要进行答案整理。
例如查询结果为:
text
多饮、多尿、体重下降、乏力
系统可生成:
text
糖尿病常见症状包括:多饮、多尿、体重下降、乏力等。具体情况建议结合专业医生诊断。
这样既保证答案可读性,也提高了系统的交互体验。
九、BERT+LSTM+CRF 模型说明
1. 模型结构
BERT+LSTM+CRF 是命名实体识别任务中常见的深度学习结构:
- BERT:负责获取上下文语义表示。
- LSTM:进一步建模序列上下文依赖。
- CRF:对标签序列进行全局约束,提升实体边界识别效果。
2. 为什么使用 BERT+LSTM+CRF
医疗问句中存在大量专业术语,实体边界和上下文语义都比较重要。例如"慢性咽炎""病毒性感冒""高血压并发症"等词语,如果只靠普通分词或关键词匹配,很容易出现识别不完整的问题。
使用 BERT 可以获得更好的上下文语义表示,LSTM 能进一步捕捉序列特征,CRF 可以约束标签输出,使实体识别结果更稳定。
3. 实体识别标签设计
常见标签可采用 BIO 标注体系:
| 标签 | 含义 |
|---|---|
| B-DISEASE | 疾病实体开始 |
| I-DISEASE | 疾病实体内部 |
| B-SYMPTOM | 症状实体开始 |
| I-SYMPTOM | 症状实体内部 |
| B-DRUG | 药品实体开始 |
| I-DRUG | 药品实体内部 |
| B-CHECK | 检查项目实体开始 |
| I-CHECK | 检查项目实体内部 |
| O | 非实体字符 |
4. 识别结果示例
输入问句:
text
高血压患者应该吃什么药?
实体识别结果:
| 片段 | 实体类型 |
|---|---|
| 高血压 | 疾病 |
意图识别结果:
text
查询疾病推荐药物
最终查询方向:
text
疾病 -> 推荐药物 -> 药品
十、知识图谱数据设计
1. 实体节点设计
| 节点类型 | 示例 | 说明 |
|---|---|---|
| Disease | 高血压、糖尿病、感冒 | 疾病节点 |
| Symptom | 头痛、发热、咳嗽 | 症状节点 |
| Drug | 阿司匹林、布洛芬 | 药品节点 |
| Check | 血常规、CT 检查 | 检查项目节点 |
| Department | 内科、呼吸科 | 科室节点 |
| Food | 苹果、牛奶、辛辣食物 | 饮食相关节点 |
2. 关系设计
| 关系类型 | 含义 | 示例 |
|---|---|---|
| HAS_SYMPTOM | 疾病具有症状 | 感冒 -> 发热 |
| RECOMMEND_DRUG | 疾病推荐药品 | 高血压 -> 降压药 |
| NEED_CHECK | 疾病需要检查 | 肺炎 -> 胸部 CT |
| BELONGS_TO | 疾病所属科室 | 胃炎 -> 消化内科 |
| DO_EAT | 疾病宜吃食物 | 贫血 -> 红枣 |
| NOT_EAT | 疾病忌吃食物 | 胃炎 -> 辛辣食物 |
3. 图谱查询优势
相比传统关系型数据库,Neo4j 更适合表达医疗知识之间的复杂关联。通过图查询,可以方便地实现:
- 疾病到症状的查询
- 症状到疾病的反向查询
- 疾病到药物的推荐查询
- 疾病到检查项目的查询
- 多跳关系扩展查询
十一、系统部分页面展示
具体界面呈现内容如下:

系统首页
进入到识别系统后台,系统首页界面主要介绍了知识图谱的概述,同时通过首页导航意图识别、问句管理以及问句分析功能模块的内容实现在线问答,结合医疗领域的问句管理及问句分析可以对系统端的问句内容进行整理和数据统计,系统用户可以通过修改密码以及用户管理实现识别系统登录及个人信息的维护,具体系统首页内容呈现如下图所示:

深度学习问答界面
基于BERT+LSTM+CRF深度学习识别模型医疗知识图谱问答可视化系统的主要功能模块为深度学习问答模块,用户可以通过该功能模块实现在线问答,通过界面下方的输入栏实现医疗领域相关问题的录入,通过点击发送实现在线提问,系统会结合用户端的问题进行意图分析并反馈问题答复内容,具体意图识别界面的主要功能栏内容呈现如下:


知识问句管理
知识问句管理是对系统用户提出的问题信息进行统一的管理和查询,主要呈现了系统用户提出的问题信息、答案信息以及提出问题用户的个人信息及提问时间等内容,可以对于重复的问题内容进行在线的删除操作,同时也可以结合问题内容进行搜索和查找,具体知识问句管理界面内容呈现如下图所示:

问句分析可视化界面
问句分析可视化主要是对于系统平台的问题内容进行关键字及查询次数内容的统计,通过该界面进行可视化呈现了医疗领域问题的内容以及提出问题的次数,结合问句分析对高频词的问题内容进行分析和统计,具体问句分析界面呈现如下:

用户修改密码界面
用户可以通过修改密码模块实现登录密码的修改,通过录入新密码和复核录入来实现密码的修改,具体密码修改页面内容如下:

系统用户管理界面
通过系统用户管理界面可以实现用户的新增以及用户基本信息的修改,只需要录入用户姓名、密码以及手机号就可以实现在线用户新增,这里手机号必须为11位数字,具体用户新增界面信息内容录入如下图所示:

知识图谱可视化界面
通过系统知识图谱可视化界面通常一种图形化的表示方式,用于展示知识图谱中的实体(节点)以及它们之间的关系(边)。这样的界面有助于用户更直观地理解和探索复杂的知识结构。具体知识图谱可视化界面界面信息如下图所示:

十二、测试账号
系统内置测试账号如下:
| 角色 | 账号 | 密码 |
|---|---|---|
| 管理员 | admin | 123456 |
| 普通用户 | user1 | 123456 |
建议正式部署时修改默认密码,并增加密码加密、验证码、权限控制和日志审计等安全机制。
十三、项目可扩展方向
1. 医疗问答准确率优化
可以从以下方向提升问答效果:
- 增加医学实体词典
- 扩充训练语料
- 优化 BERT 模型
- 增加多意图识别
- 增加答案置信度排序
2. 知识图谱可视化
可将 Neo4j 图谱结果可视化展示到前端页面中,让用户能够直观看到疾病、症状、药物和科室之间的关系。
可用技术:
- ECharts 关系图
- D3.js
- Neo4j Browser
- pyvis
3. 增加医疗文本情感分析
如果系统包含用户评论或咨询记录,可以扩展情感分析模块,识别用户焦虑程度、情绪倾向和咨询重点。
4. 接入大模型增强问答
可将知识图谱结果作为检索增强内容,再结合大模型进行自然语言答案生成,形成更智能的 RAG 医疗问答系统。
扩展架构可以是:
text
用户问题 -> 实体识别 -> 知识图谱检索 -> 大模型生成 -> 答案返回
5. 增加后台知识库维护
可增加管理员后台功能:
- 疾病信息管理
- 症状信息管理
- 药品信息管理
- 科室信息管理
- 图谱关系维护
- 问答记录统计
这样系统会更接近真实业务应用。
十四、项目总结
本项目围绕医疗领域智能问答场景,综合使用了 BERT+LSTM+CRF、知识图谱、Neo4j、Django、MySQL、jieba 和 pyahocorasick 等技术,实现了一套完整的医疗领域问答系统。
从技术角度看,项目涵盖了自然语言处理、医学实体识别、问句意图分析、图数据库查询、Web 系统开发和数据管理等多个模块;从项目展示角度看,它具备清晰的业务场景、较完整的系统流程和较强的扩展空间。
这类项目适合作为:
- 人工智能毕业设计
- 自然语言处理课程设计
- 医疗知识图谱项目
- 智能问答系统项目
- Python Web 全栈项目
- 大模型 RAG 系统扩展基础
十六、结语
医疗领域问答系统的核心不只是"能回答问题",更重要的是能够准确识别用户问题中的医学实体,理解用户意图,并基于结构化知识给出可解释的答案。本项目通过深度学习实体识别和 Neo4j 知识图谱结合,实现了一条较完整的智能问答技术链路。
对于计算机项目实战而言,这类系统技术点丰富、展示效果清晰、扩展方向多,非常适合用于毕业设计、课程设计、技术博客输出和项目案例展示。

如需项目源码、部署文档、功能解析、二次开发、界面优化、项目定制、课程设计或毕业设计辅导,可通过评论区、私信或个人主页方式交流。支持全栈系统开发与技术咨询。