Skip to content
This repository was archived by the owner on Jul 12, 2026. It is now read-only.
 
 

Repository files navigation

Medical Consultation Adaptation of CRSLab

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。

Project overview

毕业论文题目为:

融合知识图谱与大语言模型的智能医疗问诊系统

项目围绕两个相互关联的任务展开:

  1. 诊疗推荐:根据多轮对话中出现的症状和医学实体,预测可能相关的疾病类别。
  2. 问诊对话生成:利用对话上下文和医学知识,引导语言模型生成进一步追问或诊疗相关回复。

整体思路如下:

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 集成和毕业论文实验。

What I worked on

1. Medical-domain data adaptation

  • 将 Huatuo26M-Lite 单轮医学问答数据适配到 CRSLab 使用的数据结构。
  • 探索使用基于提示的方法,将单轮 QA 组织为以症状为中心的多轮问诊对话。
  • 为多轮对话构造角色、轮次、医学实体和推荐目标等训练字段。
  • 为 Qwen 对话训练增加 ChatML 格式化,并对 assistant 回复位置构造训练标签。

公开仓库不包含完整训练数据。Huatuo26M-Lite 及相关医学知识数据的版权与使用条件归其原始 提供方所有。

2. RGSARec diagnosis recommendation experiments

在 CRSLab 推荐管线基础上实现并实验了一个诊疗推荐变体 RGSARec (Relational Graph Self-Attention Recommendation):

  • 使用 RGCN 编码医学知识图谱中的疾病、症状及其关系。
  • 从对话上下文中提取被提及的医学实体。
  • 使用 self-attention 聚合上下文实体,形成随对话变化的用户表示。
  • 通过用户表示与疾病实体表示之间的匹配完成疾病推荐。
  • 设计与基础模型以及移除 RGCN、自注意力组件的变体对比。

这里的贡献是面向毕业设计的模型适配、组合和实验实现,并不意味着 RGCN、Self-Attention 或 CRSLab 推荐框架本身由我提出。

3. KBRD-Qwen medical dialogue experiments

在 CRSLab 的 KBRD 思路上,将原有生成组件替换和扩展为基于 Qwen2.5 的医疗问诊对话实验:

  • 使用 Qwen2.5 作为对话生成主干模型。
  • 将训练数据格式化为 ChatML 多轮对话格式。
  • 使用医学知识图谱和对话实体计算用户知识表示。
  • 将用户知识表示映射为词汇偏置,引导生成内容关注相关医学实体。
  • 引入可学习权重,调节知识偏置与语言模型原始 logits 的融合强度。
  • 比较 KBRD baseline、完整模型及移除 ChatML/knowledge bias 的实验变体。

这些工作属于对已有 KBRD/CRSLab 代码路径的场景化修改和模型集成,而不是重新实现完整的 CRS 训练与评测框架。

4. Thesis-oriented evaluation

毕业论文中进行了两组探索性实验。医疗对话数据从 Huatuo26M-Lite 中采样和转换,共包含 2,000 条样本,按 1,600/300/100 划分为训练集、验证集和测试集;数据中包含 1,290 种与医学 知识图谱对齐的实体。实验使用的开源医学知识图谱原始规模为 62,196 个实体、12 类关系和 543,673 条边,模型实际聚焦于疾病、症状及相关子图。

Diagnosis recommendation snapshot

以下是论文测试集中的部分推荐指标:

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;这些结果用于检查知识图谱编码和上下文实体聚合在该实验 设置中的作用。

Medical dialogue generation snapshot

论文中的部分自动评测结果如下:

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 或当前 模型能力声明。

Relationship to upstream CRSLab

本仓库 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 时优先遵循上游项目的说明。

Repository map

本 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 提交历史,不应把整个目录视为我的原创实现。

Historical environment

该项目依赖较早版本的 Python、PyTorch、PyTorch Geometric 和 CRSLab 生态。当前仓库不再维护, 也没有在现代依赖环境中重新验证。

原 CRSLab 运行方式大致为:

python run_crslab.py --config <config-path>

不同论文实验使用的具体配置、数据路径、GPU 环境和 checkpoint 可能已经不可用。因此本节只保留 历史入口,不承诺 clone 后可以直接训练或重现论文结果。

如果希望学习或使用 CRSLab,请优先阅读并使用上游仓库,而不是这个归档 fork。

Limitations

  • 这是本科毕业设计原型,不是经过临床验证的医疗系统。
  • 自动指标不能证明模型具备安全、准确的真实医疗问诊能力。
  • 数据转换过程可能继承原始数据中的噪声和偏差。
  • LLM 生成仍可能产生幻觉、不准确内容或不恰当建议。
  • 实验规模、数据划分和超参数受当时的时间与计算资源限制。
  • 完整数据、模型 checkpoint 和原始运行环境没有作为稳定 artifact 发布。
  • 代码基于旧版本依赖,不再提供兼容性维护或技术支持。

Archive status

This repository is archived and no longer actively maintained.

它被保留用于:

  • 记录本科毕业论文的研究与工程实践;
  • 展示从通用 CRS 框架向医疗问诊场景进行适配的过程;
  • 保留当时的数据处理、模型集成和实验代码。

它不再用于:

  • 新的医疗模型开发;
  • 生产部署;
  • 医疗决策;
  • 当前研究项目的依赖;
  • 提供可复现 benchmark 或长期维护支持。

Citation and attribution

如果使用 CRSLab 框架,请引用上游项目及其论文。有关 CRSLab 的安装、数据、模型和引用方式, 请参考 RUCAIBox/CRSLab

本仓库保留上游 CRSLab 的 MIT License。新增和修改代码同样按照仓库中的 LICENSE 文件处理; 第三方模型、数据集和知识图谱仍受各自许可证与使用条款约束。

About

CRSLab is an open-source toolkit for building Conversational Recommender System (CRS).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages