1. 医疗问句实体识别系统概述
医疗领域的自然语言处理一直是个极具挑战性的方向。记得去年我在参与一个智能问诊项目时,最头疼的就是如何准确识别患者描述中的关键医疗实体。普通的分词工具会把"Ⅱ型糖尿病"拆分成"Ⅱ型"和"糖尿病",而临床医生一眼就能看出这是一个完整的疾病名称。这正是医疗实体识别(MNER)的特殊之处——它不仅需要理解通用语言,还要掌握专业的医学知识体系。
这个毕业设计项目构建了一个完整的医疗问句实体识别系统,采用BERT-BiLSTM-CRF混合模型作为核心算法,配合知识图谱进行实体消歧和关系补全。系统基于Python技术栈开发,使用Django框架提供Web服务,MySQL存储结构化数据,最终实现了对非规范医疗问句中疾病、症状、药品等实体的准确识别。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 整体技术栈选型
选择B/S架构而非C/S架构主要基于三点考虑:
- 无需客户端安装,通过浏览器即可访问,特别适合医院内网环境部署
- 前后端分离便于团队协作开发,前端可使用Vue.js等现代框架
- 更利于后续扩展为微服务架构
后端选择Python而非Java主要因为:
- Python在NLP领域生态完善(TensorFlow/PyTorch等框架成熟)
- 开发效率高,适合快速迭代的科研项目
- 医疗领域的许多开源工具(如BioBERT)都提供Python接口
数据库选用MySQL而非MongoDB的原因是:
- 医疗数据高度结构化,关系型数据库更合适
- 需要频繁的关联查询(如用户-问句-识别结果)
- ACID事务特性对医疗数据管理至关重要
2.2 核心模块分解
系统主要分为四个层次:
- 表现层:基于Django模板引擎+Vue.js构建响应式前端
- 业务逻辑层:包含用户管理、问句处理等核心业务
- 算法服务层:BERT-BiLSTM-CRF模型及其封装
- 数据持久层:MySQL+Neo4j双数据库存储
特别值得注意的是知识图谱模块的设计。我们采用混合存储方案:
- 结构化数据(用户信息等)存MySQL
- 实体关系数据存Neo4j图数据库
这种设计既保证了事务性操作的可靠性,又满足了关系查询的高效性。
3. 关键算法实现
3.1 数据准备与标注
医疗
