Archived undergraduate thesis project built on top of RUCAIBox/CRSLab.
本仓库是我的本科毕业论文实验代码,基于开源对话式推荐框架 CRSLab,将原有的 Conversational Recommender System 实验管线适配到智能医疗问诊场景,并探索医学知识图谱、 诊疗推荐模型和大语言模型对话生成的组合方式。
项目在当时完成了一个包含 2,000 条多轮问诊样本、1,290 种对齐医学实体的实验数据集,
接入包含 62,196 个实体、12 类关系、543,673 条边的开源医学知识图谱,并实现了两个主要
实验模型:用于疾病推荐的 RGSARec,以及融合 Qwen2.5、ChatML 与知识图谱词汇偏置的
KBRD-Qwen。在论文使用的测试划分中,RGSARec 的 Hit@50 从 baseline 的 0.4479 提升到
0.6250,NDCG@50 从 0.3721 提升到 0.4525;KBRD-Qwen 的 BLEU-4 从 0.0355
提升到 0.6408,F1 从 0.4520 提升到 0.8379。
这是一个 2025 年完成的学生研究原型,目前已经停止维护。仓库保留用于记录本科阶段的研究与 工程实践,不代表当前推荐的医疗系统实现,也不提供任何形式的医学诊断或医疗建议。
Historical result notice: 上述数字来自 2025 年毕业论文中的特定数据划分、实现版本和 训练环境,用于说明当时完成的工作规模,不代表临床有效性,也不作为当前可复现 benchmark。
毕业论文题目为:
融合知识图谱与大语言模型的智能医疗问诊系统
项目围绕两个相互关联的任务展开:
- 诊疗推荐:根据多轮对话中出现的症状和医学实体,预测可能相关的疾病类别。
- 问诊对话生成:利用对话上下文和医学知识,引导语言模型生成进一步追问或诊疗相关回复。
整体思路如下:
single-turn medical QA data
-> symptom-centered multi-turn dialogue conversion
-> medical entity and relation representation
-> dialogue-aware user representation
-> disease recommendation
-> knowledge-guided medical dialogue generation
该项目不是从零实现一个新的对话推荐框架。训练、配置、评测和部分模型基础设施来自 CRSLab;我的工作主要集中在医疗场景适配、数据处理、模型组件修改、Qwen 集成和毕业论文实验。
- 将 Huatuo26M-Lite 单轮医学问答数据适配到 CRSLab 使用的数据结构。
- 探索使用基于提示的方法,将单轮 QA 组织为以症状为中心的多轮问诊对话。
- 为多轮对话构造角色、轮次、医学实体和推荐目标等训练字段。
- 为 Qwen 对话训练增加 ChatML 格式化,并对 assistant 回复位置构造训练标签。
公开仓库不包含完整训练数据。Huatuo26M-Lite 及相关医学知识数据的版权与使用条件归其原始 提供方所有。
在 CRSLab 推荐管线基础上实现并实验了一个诊疗推荐变体 RGSARec
(Relational Graph Self-Attention Recommendation):
- 使用 RGCN 编码医学知识图谱中的疾病、症状及其关系。
- 从对话上下文中提取被提及的医学实体。
- 使用 self-attention 聚合上下文实体,形成随对话变化的用户表示。
- 通过用户表示与疾病实体表示之间的匹配完成疾病推荐。
- 设计与基础模型以及移除 RGCN、自注意力组件的变体对比。
这里的贡献是面向毕业设计的模型适配、组合和实验实现,并不意味着 RGCN、Self-Attention 或 CRSLab 推荐框架本身由我提出。
在 CRSLab 的 KBRD 思路上,将原有生成组件替换和扩展为基于 Qwen2.5 的医疗问诊对话实验:
- 使用 Qwen2.5 作为对话生成主干模型。
- 将训练数据格式化为 ChatML 多轮对话格式。
- 使用医学知识图谱和对话实体计算用户知识表示。
- 将用户知识表示映射为词汇偏置,引导生成内容关注相关医学实体。
- 引入可学习权重,调节知识偏置与语言模型原始 logits 的融合强度。
- 比较 KBRD baseline、完整模型及移除 ChatML/knowledge bias 的实验变体。
这些工作属于对已有 KBRD/CRSLab 代码路径的场景化修改和模型集成,而不是重新实现完整的 CRS 训练与评测框架。
毕业论文中进行了两组探索性实验。医疗对话数据从 Huatuo26M-Lite 中采样和转换,共包含 2,000 条样本,按 1,600/300/100 划分为训练集、验证集和测试集;数据中包含 1,290 种与医学 知识图谱对齐的实体。实验使用的开源医学知识图谱原始规模为 62,196 个实体、12 类关系和 543,673 条边,模型实际聚焦于疾病、症状及相关子图。
以下是论文测试集中的部分推荐指标:
| Model | Hit@1 | Hit@10 | Hit@50 | MRR@10 | NDCG@10 | NDCG@50 |
|---|---|---|---|---|---|---|
| Baseline | 0.3125 | 0.4167 | 0.4479 | 0.3479 | 0.3649 | 0.3721 |
| RGSARec | 0.3646 | 0.4896 | 0.6250 | 0.4009 | 0.4217 | 0.4525 |
相对 baseline,论文记录的 Hit@1、Hit@10、Hit@50 分别提高约 16.7%、17.5% 和 39.5%, NDCG@50 提高约 21.6%。消融实验中,移除 RGCN 后 Hit@1 降至 0.2708,移除 Self-Attention 后 Hit@1 降至 0.3125;这些结果用于检查知识图谱编码和上下文实体聚合在该实验 设置中的作用。
论文中的部分自动评测结果如下:
| Model | BLEU-1 | BLEU-2 | BLEU-4 | F1 | Embedding Average | Embedding Greedy |
|---|---|---|---|---|---|---|
| KBRD baseline | 0.3780 | 0.1394 | 0.0355 | 0.4520 | 0.8138 | 0.7760 |
| KBRD-Qwen | 0.7710 | 0.7208 | 0.6408 | 0.8379 | 0.9413 | 0.8692 |
| KBRD-Qwen without ChatML | 0.2762 | 0.2589 | 0.2497 | 0.4168 | 0.9723 | 0.9123 |
| KBRD-Qwen without knowledge bias | 0.7240 | 0.6772 | 0.6020 | 0.8021 | 0.9391 | 0.8620 |
在该测试划分中,完整模型的 F1 从 KBRD baseline 的 0.4520 提升到 0.8379。移除 ChatML 后 F1 降至 0.4168,移除知识图谱 bias 后降至 0.8021,构成了论文中对数据格式化与知识引导 组件的消融检查。
具体评估范围包括:
- 诊疗推荐任务使用 Hit@K、MRR@K 和 NDCG@K 等指标。
- 对话生成任务使用 BLEU、Distinct、F1 和语义相似度等自动指标。
- 对 RGCN、Self-Attention、ChatML 和 knowledge bias 等组件进行了对比或消融。
RGSARec 实验使用 Python 3.8、PyTorch 1.10 和单卡 4060 Ti 16GB;KBRD-Qwen 使用 Qwen2.5-1.5B-Instruct、PyTorch 2.4、最大序列长度 1024,并在单卡 RTX 3090 24GB 上训练。 这些结果反映当时的数据划分、实现版本、模型配置和计算环境。由于仓库已经归档,且没有发布 完整训练数据、checkpoint 和原始运行环境,README 不将这些数字作为可复现 benchmark 或当前 模型能力声明。
本仓库 fork 自:
- Upstream repository: RUCAIBox/CRSLab
- Upstream project: CRSLab: An Open-Source Toolkit for Building Conversational Recommender System
CRSLab 原作者提供的主要能力包括:
- 对话式推荐系统的统一训练和运行框架;
- 数据加载与预处理基础设施;
- recommendation、conversation 和 policy 等任务抽象;
- 多种 baseline 模型;
- 通用评测指标和实验配置机制。
本 fork 中绝大部分框架代码和 Git 历史来自上游项目。我的修改主要是本科论文所需的医疗领域 适配、模型变体、数据处理和实验配置。请引用和使用 CRSLab 时优先遵循上游项目的说明。
本 fork 延续了当时实验版本的目录布局:
config/ experiment and model configurations
config_file/ additional thesis experiment configurations
data_file/ dataset-side processing and schema adaptations
evaluator/ evaluation-related adaptations
model/ recommendation and dialogue model variants
system/ training and interaction system integrations
demo.py legacy demonstration entry
quick_start.py legacy experiment entry
run_crslab.py CRSLab command-line entry
目录中既包含上游 CRSLab 文件,也包含本科论文实验修改。判断代码归属时,应结合 fork diff 和 Git 提交历史,不应把整个目录视为我的原创实现。
该项目依赖较早版本的 Python、PyTorch、PyTorch Geometric 和 CRSLab 生态。当前仓库不再维护, 也没有在现代依赖环境中重新验证。
原 CRSLab 运行方式大致为:
python run_crslab.py --config <config-path>不同论文实验使用的具体配置、数据路径、GPU 环境和 checkpoint 可能已经不可用。因此本节只保留 历史入口,不承诺 clone 后可以直接训练或重现论文结果。
如果希望学习或使用 CRSLab,请优先阅读并使用上游仓库,而不是这个归档 fork。
- 这是本科毕业设计原型,不是经过临床验证的医疗系统。
- 自动指标不能证明模型具备安全、准确的真实医疗问诊能力。
- 数据转换过程可能继承原始数据中的噪声和偏差。
- LLM 生成仍可能产生幻觉、不准确内容或不恰当建议。
- 实验规模、数据划分和超参数受当时的时间与计算资源限制。
- 完整数据、模型 checkpoint 和原始运行环境没有作为稳定 artifact 发布。
- 代码基于旧版本依赖,不再提供兼容性维护或技术支持。
This repository is archived and no longer actively maintained.
它被保留用于:
- 记录本科毕业论文的研究与工程实践;
- 展示从通用 CRS 框架向医疗问诊场景进行适配的过程;
- 保留当时的数据处理、模型集成和实验代码。
它不再用于:
- 新的医疗模型开发;
- 生产部署;
- 医疗决策;
- 当前研究项目的依赖;
- 提供可复现 benchmark 或长期维护支持。
如果使用 CRSLab 框架,请引用上游项目及其论文。有关 CRSLab 的安装、数据、模型和引用方式, 请参考 RUCAIBox/CRSLab。
本仓库保留上游 CRSLab 的 MIT License。新增和修改代码同样按照仓库中的 LICENSE 文件处理;
第三方模型、数据集和知识图谱仍受各自许可证与使用条款约束。