005、数据预处理实战:清洗、格式化与增强技巧

张开发
2026/4/13 16:21:25 15 分钟阅读

分享文章

005、数据预处理实战:清洗、格式化与增强技巧
数据预处理实战:清洗、格式化与增强技巧上周在部署一个行业大模型时,遇到了个典型问题:模型在测试集上表现不错,一到真实业务场景就频繁输出乱码和无关内容。排查了三天,最终定位到问题根源——训练数据里混入了大量网页爬虫残留的JS代码和转义字符。今天我们就来聊聊数据预处理这个看似简单却至关重要的环节。从真实问题出发当时那个项目的数据源很杂:有PDF转的文本、有爬虫抓的网页、还有历史数据库导出的CSV。表面上看数据量足够大(200万条),训练时loss下降也很漂亮,但实际效果就是不对劲。后来我们写了个简单的统计脚本,发现大约15%的样本包含HTML标签,7%的样本有UTF-8编码错误,还有大量重复的客服话术模板。最致命的是,有些JSON字段里嵌着未转义的特殊字符,导致解析时整条数据被截断。模型在训练时“看到”的都是残缺的句子,自然学不会完整的语言逻辑。清洗:不只是删掉标点符号数据清洗的第一原则是:保留语义,去除噪声。很多人直接上正则表达式把非中英文字符全删了,这种做法在通用语料上或许可行,但在专业领域会丢失关键信息。# 反面教材:粗暴清洗defbad_clean(text):returnre.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9]','',text)# 别这样写!会丢掉化学式H2O、数学公式、专业符号# 建议做法:分层处理defclean_text(text):# 第一层:处理编码问题(这里踩过坑)text=text.encode('utf-8','ignore').decode('utf-8')# 第二层:移除不可见字符但保留换行符text=''.join(charforcharintextifchar=='\n'orchar=='\t'ornotunicodedata.category(char).startswith('C'))# 第三层:针对数据源的特殊处理if'script'intext.lower():text=remove_html_js(text)# 自定义函数处理网页残留

更多文章