需先清洗ShareGPT原始数据:①正则清除HTML标签并保留换行;②json.loads校验,失败样本入error_log.jsonl人工复核;③校验conversations字段存在且为list。再分层过滤敏感信息(PII、地址+姓名弱模式、系统提示泄漏)、低质量对话(熵值<2.1、编辑距离>0.85、模板句占比>60%)。最终统一转为标准Schema写入cleaned_sharegpt_zh.jsonl。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要从ShareGPT原始数据中剔除含敏感信息、格式错乱、语义空洞或隐私泄露的对话样本,避免微调时污染模型行为或触发安全机制。原始JSONL文件中约37%的样本存在系统提示泄漏、用户手机号硬编码、连续URL堆叠或未闭合HTML标签等问题,直接加载将导致训练崩溃或生成违规内容。
剥离HTML噪声与非法JSON结构
原始ShareGPT数据常混杂
第一步:用正则表达式全局替换移除所有HTML标签,命令为re.sub(r']+>', '', line);注意保留换行符,否则多轮对话会坍缩成单行。
第二步:对清洗后的字符串执行json.loads(),捕获JSONDecodeError异常——【失败样本必须写入error_log.jsonl并人工复核,不可直接丢弃】;部分样本仅因末尾多逗号或引号不匹配而报错,修复后仍具训练价值。
第三步:校验conversations字段是否存在且为list类型,若缺失该键或类型不符,整条记录标记为“schema_invalid”并跳过后续处理。
过滤含敏感信息与隐私数据的对话
敏感内容清洗不是简单关键词屏蔽,而是分层拦截:先阻断明确PII(如身份证、手机号),再识别隐式泄露(如“我家住在朝阳区XX路123号”),最后过滤强化型组合(如“张三+138****1234+北京朝阳区”)。
方法一:正则硬匹配基础PII
匹配11位手机号(含常见脱敏格式如138****1234)、18位身份证号(含X)、邮箱(@符号前后均有字符)、银行卡号(连续16–19位数字,非纯0)。命中任一即整条对话剔除。
方法二:地址与姓名弱模式回溯
当对话中同时出现中文姓氏(王、李、张等前20大姓)+ 行政区划词(省/市/区/县/路/街道)+ 数字门牌号(如“XX号”“第X栋”),且三者距离≤50字符,则触发人工抽检队列——【此规则不可关闭,否则大量家庭住址会漏过】。
方法三:系统提示泄漏检测
检查conversations首条消息是否含“system”角色或包含“你是一个AI助手”“请遵守法律”等模板化声明;若存在,且后续human消息中出现“刚才你说…”“按你之前设定的…”等指代句,则判定为系统指令泄露,整条对话废弃。
剔除低质量与无意义对话
低质量不等于短,而在于无信息增量、无意图推进、无语义锚点。例如“你好啊”→“你好”→“吃饭了吗”→“吃了”,四轮对话零实体、零动词变化、零上下文依赖,模型学不到任何交互逻辑。
① 计算每轮value字段的字符熵值:使用Python的textblob或jieba计算中文词频分布,熵值<2.1的轮次视为低信息量;单条对话中≥3轮低于该阈值即整体剔除。
② 检测连续重复模式:对相邻human→assistant轮次做编辑距离比对,若similarity_score > 0.85且长度均>8字符,判定为机械复述,整对轮次标记discard并统计频次;单条对话累计discard ≥ 2对则废弃。
③ 过滤空洞回复:assistant回复中若含“我理解了”“好的呢”“感谢您的提问”等无实质内容模板句,且该句占整轮value长度>60%,则该轮无效;整条对话中无效轮次占比>40%即剔除。
执行完以上三步后,将剩余样本统一重写为标准ShareGPT Schema格式:{"conversations": [{"from": "human", "value": "..." }, {"from": "gpt", "value": "..." }]},并写入cleaned_sharegpt_zh.jsonl。











