当前位置: 首页 > news >正文

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

由于医学行业的特殊性,不同病的病理和发病情况的特殊性,大模型是无法替代医生进行就诊的,即使是不同的病对应不同的病理和发病情况相关药物治疗的量和疗程都是无法固定的,同时由于医学内容太多,太多的病同时都有不同的病理,同时医学领域中大模型的幻觉后果是非常严重的,这里需要严格处理同时需要数据量稍大一点,因此这里的微调主要是想做一个通用医学知识的医学大模型微调,更着重于为人们进行医学知识的科普和健康生活规划以及为用户"预诊"可能的疾病然后引导用户线下就医而非直接根据用户提供的信息告诉用户你得的什么病该怎么吃药,首先我们要用垂直领域的数据进行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 分布 │
│ - 人工成本评估依据 │
└─────────────────────────────────────┘

http://www.jsqmd.com/news/150374/

相关文章:

  • 《人--件》读书笔记2
  • 团购拼单活动:降低中小企业采购门槛
  • 近视,阻断了多少人的梦想?影响了多少人的生活?
  • 公益项目资助:免费提供TensorRT资源给NGO组织
  • 基于TensorRT的高性能AI服务搭建全攻略
  • LeetCode周赛AI专场:TensorFlow题目解析
  • 机器人质量与成本十年演进(2015–2025)
  • 2025最新!9个AI论文工具测评:本科生写论文痛点全解析
  • 【课程设计/毕业设计】基于springboot社区医院挂号就诊管理系统基于springboot的社区诊所在线挂号与排队应用系统【附源码、数据库、万字文档】
  • Java 大视界 -- 基于 Java 的大数据实时流处理在能源行业设备状态监测与故障预测中的应用
  • 【课程设计/毕业设计】基于Springboot+Vue的在线教育系统设计与实现基于SpringBoot+Vue 大学生在线教育平台设计与实现【附源码、数据库、万字文档】
  • 世界人工智能大会亮相:站在全球舞台讲述中国故事
  • 轻量级服务架构设计:TensorRT + REST API 实战
  • 【计算机毕业设计案例】基于 SpringBoot 的电竞比赛管理系统的设计与实现基于SpringBoot的热门游戏赛事平台设计与实现(程序+文档+讲解+定制)
  • 动态解码加速:TensorRT-LLM实现流式输出优化
  • V2EX社区互动:在极客圈层传播TensorRT价值
  • 【课程设计/毕业设计】基于springboot的小区停车场车辆信息管理系统的设计与实现更新车位状态,展示车位分布与占用情况【附源码、数据库、万字文档】
  • 媒体公关稿撰写:扩大TensorRT品牌影响力
  • CSDN博客迁移:继承原有开发者社区资源
  • 测试《A Simple Algorithm for Fitting a Gaussian Function》拟合
  • 【计算机毕业设计案例】Java毕设项目推荐-基于Java的医院在线挂号系统设计与实现-基于JAVA的医院预约挂号管理系统的设计与基于JAVA的医院预约挂号管理系统的设计与实现(程序+文档+讲解+定制)
  • 告别关萌萌!原艺展凭热搜级“野心王妃“在《曼波奇缘》圆满出圈
  • SegmentFault问答:参与技术讨论植入产品信息
  • 开源中国报道申请:获得官方渠道背书
  • 数字人情感表达:基于TensorRT的情绪识别优化
  • 性能回归测试:持续验证TensorRT优化稳定性
  • 智能制造质检系统:计算机视觉+TensorRT双重加速
  • 敏感层保护策略:部分网络保持FP32精度的方法
  • 国企数字化转型案例:某银行采用TensorRT改造风控系统
  • 按Token计费系统搭建:精准计量用户调用成本