news 2026/6/24 4:20:11

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

作者头像

张小明

前端开发工程师

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/6/13 13:13:13

2025最新!9个AI论文工具测评:本科生写论文痛点全解析

2025最新!9个AI论文工具测评:本科生写论文痛点全解析 2025年AI论文工具测评:精准匹配本科生写作需求 随着人工智能技术的快速发展,越来越多的本科生开始借助AI工具提升论文写作效率。然而,面对市场上五花八门的AI论文工…

作者头像 李华
网站建设 2026/6/20 18:06:48

【课程设计/毕业设计】基于springboot的小区停车场车辆信息管理系统的设计与实现更新车位状态,展示车位分布与占用情况【附源码、数据库、万字文档】

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

作者头像 李华
网站建设 2026/6/13 0:45:24

LeetCode周赛AI专场:TensorFlow题目解析

LeetCode周赛AI专场:TensorFlow题目解析 在当前的算法竞赛中,尤其是像 LeetCode 周赛 AI 专场这类融合了机器学习背景的挑战题,仅仅掌握传统数据结构与算法已不再足够。越来越多的题目开始引入模型推理、特征处理甚至轻量级训练逻辑——而这些…

作者头像 李华
网站建设 2026/6/19 22:17:07

视频教程系列策划:降低TensorRT学习门槛

视频教程系列策划:降低TensorRT学习门槛 在当今AI模型越来越“大”的背景下,推理效率却不能跟着膨胀。我们见过太多团队训练出精度惊人的模型,结果部署时卡在延迟过高、吞吐不足的瓶颈上——GPU明明就在那儿,性能却像被封印了一样…

作者头像 李华