news 2026/1/9 14:31:49

医学大模型微调前的数据处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
医学大模型微调前的数据处理

由于医学行业的特殊性,不同病的病理和发病情况的特殊性,大模型是无法替代医生进行就诊的,即使是不同的病对应不同的病理和发病情况相关药物治疗的量和疗程都是无法固定的,同时由于医学内容太多,太多的病同时都有不同的病理,同时医学领域中大模型的幻觉后果是非常严重的,这里需要严格处理同时需要数据量稍大一点,因此这里的微调主要是想做一个通用医学知识的医学大模型微调,更着重于为人们进行医学知识的科普和健康生活规划以及为用户"预诊"可能的疾病然后引导用户线下就医而非直接根据用户提供的信息告诉用户你得的什么病该怎么吃药,首先我们要用垂直领域的数据进行LORA微调1.需要对格式进行处理:将自由文本处理为ChatML文本,2:需要对文本的内容进行处理,需要保证我们训练数据的质量以及不能有一些垃圾甚至是恶意不好的内容。3.(由于医学领域数据的特殊性处理需要更加严谨和小心)得到处理后的数据我们还需要评估和人工复核(此文仅为个人的一些想法,更多的可以参考相关医学大模型论文中的内容和一些其他的方法进行优化和升级)(详细代码请见代码仓):

首先是我代码中的预处理代码的架构:

┌──────────────────────────┐
│ 原始医学文本 │
│ │
└───────────┬──────────────┘


┌──────────────────────────┐
│ Block 解析模块 │
│ parse_blocks() │
│ │
│ ┌─ Description │
│ └─ Dialogue │
└───────────┬──────────────┘


┌──────────────────────────┐
│ 结构化对话构建模块 │
│ convert_record() │
│ │
│ ├─ 系统提示 system │
│ ├─ 描述 → QA 转换 │
│ │ convert_description │
│ └─ 对话解析 parse_dialog │
└───────────┬──────────────┘


┌──────────────────────────┐
│ ChatML 数据 │
│ [{"role","content"}...] │
└───────────┬──────────────┘


┌──────────────────────────┐
│ 规则级去重 │
│ hash_dedup() │
│ (MD5 文本完全一致) │
└───────────┬──────────────┘


┌──────────────────────────┐
│ 语义级去重(核心难点) │
│ semantic_deduplicate() │
│ │
│ ├─ 向量编码 │
│ │ SentenceTransformer │
│ ├─ 分批处理 BATCH │
│ ├─ 滑窗 WINDOW │
│ ├─ FAISS 相似度搜索 │
│ └─ 阈值过滤 SIM ≥ 0.97 │
└───────────┬──────────────┘


┌──────────────────────────┐
│ 高质量医学对话数据集 │
│ medical_data.jsonl │
└──────────────────────────┘
这里我主要是用正则表达式去除了文本中杂糅的内容,同时把文本转化成chatml格式,然后对原始文件进行了预处理首先是MD5哈希对文本中完全重复的内容进行去除,然后用语义相似度去重(这里由于医学数据的特殊性我选择了比较高的阈值:由于病人的发病情况可能类似但是可能病理不同(比如病人发烧的温度可能一个38度一个39度),对这部分数据数据应该进行保留,这里需要去除的内容是语义上完全相同的陈述:比如病人说:我头有点晕和我感觉我有点头晕这类陈述)同时由于数据的庞大,我利用分批处理和每次选择该位置前2000作为滑动窗口防止漏掉重复的内容,并利用Faiss相似度搜索进行去重。

比较好的点:分批处理和滑动窗口去重,考虑阈值问题

接下来就是对生成的内容进行过滤和评估,并进行人工校验,这是我的架构。

┌─────────────────────────────────────┐
│ 数据输入层 │
│ ChatML / JSONL 对话数据 │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ Stage 1:规则过滤层 │
│ - 长度合法性 │
│ - 垃圾文本 / 隐私 / 链接 │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ Stage 2:医学风险识别层 │
│ - SAFE / CAUTION / RESTRICT / CRISIS │
│ - 基于规则的风险信号检测 │
└─────────────────────────────────────┘
│ │ │
│ │ └──▶ CRISIS → 人工兜底
│ │
│ └──▶ RESTRICT → 安全回复改写 → 不可训练集


┌─────────────────────────────────────┐
│ Stage 3:语言质量评估层 │
│ - 困惑度(PPL) │
│ - 低质量 / 噪声文本剔除 │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ Stage 4:数据分流层 │
│ - 可训练数据 │
│ - 不可训练但可留存 │
│ - 高危人工复查 │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ 统计 & 评估报告层 │
│ - 各阶段命中率 │
│ - PPL 分布 │
│ - 人工成本评估依据 │
└─────────────────────────────────────┘

一开始我的想法是常规做法:

1.规则过滤(对文本长度小于5和大于1000的去除,由于数据来源可能有网络爬虫和我们用大模型得到的数据:可能有垃圾信息比如邮箱,可能有密码和身份证信息,所以也用正则表达式进行去除)

2.有害内容检测

3.PPL困惑度检测

但是后面我思考了一下这样是单一且片面的,没有考虑到医学的特殊性,比如可能用户会有失血过多,文本中可能会有死亡这类词,这样很容易被识别为有害内容,所以这样做是不对的,这样生成的数据会让大模型觉得外面的世界是安全的,对于用户的回答可能无法很好地起到预诊和引导就医的作用。

所以这里的操作我加入了医学风险识别层,处理比较严格同时加入人工审核模块以及将标签中为CAUTION和RESTRICT的内容用日志保留以便人工复核,我们将CAUTION和RESTRICT的内容替换为引导就医内容(这部分内容可能涉及引导用户用药和自我救治,但是前面由于不同病不同病理是很繁杂的,大模型只能辅助就诊不能越俎代庖地为用户就诊)这样一方面可以防止疏漏另一方面还可以对我们便签中为CAUTION和RESTRICT的内容进行复核。以下为我的架构

┌─────────────────────────────────────┐
│ 数据输入层 │
│ ChatML / JSONL 对话数据 │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ Stage 1:规则过滤层 │
│ - 长度合法性 │
│ - 垃圾文本 / 隐私 / 链接 │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ Stage 2:医学风险识别层 │
│ - SAFE / CAUTION / RESTRICT / CRISIS │
│ - 基于规则的风险信号检测 │
└─────────────────────────────────────┘
│ │ │
│ │ └──▶ CRISIS → 人工兜底
│ │
│ └──▶ RESTRICT → 安全回复改写 → 不可训练集


┌─────────────────────────────────────┐
│ Stage 3:语言质量评估层 │
│ - 困惑度(PPL) │
│ - 低质量 / 噪声文本剔除 │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ Stage 4:数据分流层 │
│ - 可训练数据 │
│ - 不可训练但可留存 │
│ - 高危人工复查 │
└─────────────────────────────────────┘


┌─────────────────────────────────────┐
│ 统计 & 评估报告层 │
│ - 各阶段命中率 │
│ - PPL 分布 │
│ - 人工成本评估依据 │
└─────────────────────────────────────┘

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/3 14:21:58

世界人工智能大会亮相:站在全球舞台讲述中国故事

世界人工智能大会亮相:站在全球舞台讲述中国故事 在2024年世界人工智能大会的展厅里,一个不起眼的边缘计算盒子正实时处理着来自城市交通摄像头的视频流——每秒分析超过60帧画面,识别车辆、行人与异常行为,端到端延迟却不到8毫秒…

作者头像 李华
网站建设 2025/12/27 23:04:21

Java计算机毕设之基于springboot的社区诊所在线挂号与排队应用系统在线挂号 - 医生排班 - 智能排队 - 诊疗追溯(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2025/12/27 23:01:55

轻量级服务架构设计:TensorRT + REST API 实战

轻量级服务架构设计:TensorRT REST API 实战 在AI模型从实验室走向生产环境的过程中,一个常见的困境是:训练好的模型明明在测试集上表现优异,但一旦部署上线,就出现响应缓慢、资源占用高、并发能力差等问题。尤其是在…

作者头像 李华
网站建设 2025/12/27 23:00:09

黑名单动态更新:及时封禁违规IP和设备指纹

黑名单动态更新:及时封禁违规IP和设备指纹 在电商平台大促的前夜,系统突然遭遇一波异常登录洪流——成千上万的请求来自全球各地的代理IP,用户行为高度一致,显然是自动化脚本在进行撞库攻击。传统基于规则的防火墙只能识别已知模式…

作者头像 李华
网站建设 2026/1/5 5:46:14

Java毕设项目推荐-SpringBoot+Vue项目大学生网络教学平台的设计与实现基于SpringBoot+Vue 大学生在线教育平台设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2025/12/27 22:56:10

V2EX社区互动:在极客圈层传播TensorRT价值

V2EX社区互动:在极客圈层传播TensorRT价值 在V2EX的某个深夜技术帖里,一位开发者贴出一张性能对比图:同样的ResNet-50模型,在T4 GPU上用PyTorch推理每秒只能处理380张图像,而切换到TensorRT后飙升至接近1700张——吞吐…

作者头像 李华