简而言之: AI 预处理是一系列可重复的步骤,它将原始的、高方差的数据转换为一致的模型输入,包括数据清洗、编码、缩放、分词和图像转换。预处理至关重要,因为如果训练输入和生产输入不一致,模型可能会悄无声息地失败。如果某个步骤“学习”了参数,则应仅使用训练数据进行拟合,以避免参数泄露。
AI 预处理是指在训练或推理之前(有时甚至在训练或推理过程中)对原始数据进行的所有操作,目的是让模型能够真正从中学习。这不仅仅是“清洗”。它包括清洗、塑形、缩放、编码、增强和打包数据,使其成为一致的表示形式,避免在后续训练中悄悄地干扰模型。[1]
要点总结:
定义:预处理将原始表格、文本、图像和日志转换为可用于模型的特征。
一致性:在训练和推理过程中应用相同的变换,以防止出现不匹配失败。
泄漏:仅在训练数据上拟合缩放器、编码器和分词器。
可复现性:构建具有可检查统计数据的流程,而不是临时的 notebook 单元格序列。
生产监控:跟踪偏差和漂移,以防止输入逐渐降低性能。
您可能还想阅读以下文章:
🔗 如何测试人工智能模型在实际应用中的性能
快速评估准确性、稳健性和偏差的实用方法。.
🔗 文本转语音是人工智能吗?它是如何工作的?
解释TTS的基本原理、主要用途和当今常见的局限性。.
🔗 人工智能现在能准确识别草书吗?
涵盖识别挑战、最佳工具和准确率提升技巧。.
🔗 人工智能在常见任务中的准确率如何
分析准确度因素、基准和实际可靠性。.
用通俗易懂的语言解释人工智能预处理(以及它不是什么)🤝
AI预处理是将原始输入(表格、文本、图像、日志)转换为可用于模型的特征。如果把原始数据比作杂乱的车库,那么预处理就是给箱子贴标签、扔掉破损的杂物、整理物品,以便你能安全地走动。
关键不在于模型本身,而在于使模型成为可能的要素:
-
将类别转换为数字(独热编码、序数编码等)[1]
-
将大的数值范围缩小到合理的范围(标准化、最小值-最大值等)[1]
-
将文本分词为输入 ID(通常还有一个注意力掩码)[3]
-
调整图像大小/裁剪图像,并适当应用确定性变换与随机变换[4]
-
构建可重复的管道,使训练和“现实生活”的输入不会以微妙的方式出现偏差[2]
一个小的实用提示:“预处理”包括模型接收到输入数据之前所有固定步骤的操作。有些团队将其分为“特征工程”和“数据清洗”,但实际上这两者之间的界限往往很模糊。

为什么人工智能预处理比人们承认的更重要😬
模型是模式匹配器,而不是读心术士。如果你的输入不一致,模型就会学习不一致的规则。这不是什么哲学理论,而是直白的现实。.
预处理可以帮助您:
-
通过将特征转化为估计器可以可靠使用的表示形式(尤其是在涉及缩放/编码时),提高学习稳定性
-
通过使混乱的现实看起来像模型可以从中概括的东西(而不是记忆奇怪的瑕疵)来减少噪声
-
防止出现诸如泄漏和训练/服务不匹配等隐性故障模式(这类故障在验证阶段看起来“完美”,但在生产环境中却会彻底失败)。[2]
-
加快迭代速度,因为可重复的转换每天都能战胜混乱的笔记本代码。
而且,很多“模型表现”实际上都来源于此。真的……多得令人惊讶。有时候感觉不太公平,但这就是现实🙃
优秀的AI预处理流程需要具备哪些要素?✅
好的预处理版本通常具备以下特点:
-
可复现:相同的输入→相同的输出(除非是故意增强,否则不会出现神秘的随机性)。
-
训练与推理的一致性:训练时所做的任何操作,在推理时都以相同的方式应用(相同的拟合参数、相同的类别映射、相同的分词器配置等)。[2]
-
泄漏安全:评估/测试中的任何步骤都不会影响任何
拟合步骤。(稍后会详细讨论这个陷阱。)[2] -
可观察:您可以检查发生了哪些变化(功能统计、缺失值、类别计数),因此调试不再是基于感觉的工程。
如果你的预处理程序是一堆名为final_v7_really_final_ok……你就知道是怎么回事了。它一开始能用,但过不了多久就出问题了😬
AI预处理的核心构建模块🧱
把预处理想象成一组构建模块,你可以把它们组合成一个流程。.
1)清洁和验证🧼
典型任务:
-
删除重复项
-
处理缺失值(删除、插补或显式表示缺失值)
-
强制执行类型、单位和范围
-
检测格式错误的输入
-
规范文本格式(空格、大小写规则、Unicode 特殊规则)
这部分工作虽然不光鲜亮丽,但却能避免一些极其愚蠢的错误。我这么说绝无恶意。.
2) 分类数据编码🔤
大多数模型不能直接使用像“red”或“premium_user”。
常用方法:
-
独热编码(类别 → 二进制列)[1]
-
序数编码(类别 → 整数 ID)[1]
关键不在于哪个编码器,而在于映射关系在训练和推理之间保持一致,不会“改变形状”。否则,你最终会得到一个离线表现良好,但在在线表现却异常的模型。[2]
3) 特征缩放和归一化📏
当功能点位于差异极大的范围内时,缩放就显得尤为重要。.
两部经典之作:
-
标准化:去除均值并缩放至单位方差[1]
-
最小-最大缩放:将每个特征缩放到指定的范围内[1]
即使你使用的是“基本能够应对”的模型,扩展通常也能使管道更容易理解,并且更难意外地破坏。.
4) 特征工程(又称作弊)🧪
在这里,你可以通过创建更好的信号来简化模型的工作:
-
比率(点击量/展示量)
-
滚动窗口(过去 N 天)
-
计数(每个用户的事件数)
-
重尾分布的对数变换
这里面蕴含着艺术。有时候你开发出一个功能,感觉很自豪……结果却毫无作用。更糟的是,它甚至会让你感到沮丧。这很正常。不要对功能投入太多感情——它们可不会回报你的感情😅
5) 正确拆分数据 ✂️
这听起来显而易见,但事实并非如此:
-
独立同分布数据的随机分割
-
时间序列的基于时间的分割
-
当实体重复出现时(用户、设备、患者),进行分组拆分。
至关重要的是:在进行预处理之前,必须先进行数据分割,因为预处理需要从数据中学习。如果你的预处理步骤“学习”参数(例如均值、词汇表、类别映射),那么它必须仅从训练数据中学习这些参数。[2]
AI预处理按数据类型分类:表格、文本、图像🎛️
预处理方式会根据输入模型的数据而变化。.
表格数据(电子表格、日志、数据库)📊
常见步骤:
-
缺失值策略
-
类别编码[1]
-
缩放数值列 [1]
-
异常值处理(大多数情况下,域规则优于“随机裁剪”)
-
衍生特征(聚合、滞后、滚动统计)
实用建议:明确定义列分组(数值型、类别型、标识符型)。未来的你会感谢自己的。.
文本数据(自然语言处理)📝
文本预处理通常包括:
-
分词成词元/子词
-
转换为输入 ID
-
填充/截断
-
构建注意力掩码[3]
一条能避免很多麻烦的小规则:对于基于Transformer的设置,请遵循模型预期的分词器设置,除非有特殊原因,否则不要随意设置。随意设置会导致“模型能训练,但结果很奇怪”。
图像(计算机视觉)🖼️
典型的预处理:
-
调整大小/裁剪成一致形状
-
用于评估的确定性变换
-
随机变换用于训练增强(例如,随机裁剪)[4]
人们常常忽略一个细节:“随机变换”并非只是一种感觉——它们每次调用时都会对参数进行实际采样。这对于训练多样性来说固然很好,但如果你忘记关闭随机性,就会对评估造成严重影响。[4]
人人都会掉入的陷阱:数据泄露🕳️🐍
泄漏是指评估数据中的信息通过预处理等方式渗入训练数据中。它会让你的模型在验证阶段看起来非常出色,但在实际应用中却令人失望。.
常见泄漏模式:
-
使用完整数据集统计信息(而不是仅使用训练数据)进行扩展[2]
-
使用训练集和测试集构建类别图[2]
-
任何能够“看到”测试集的
fit()或fit_transform()
经验法则(简单、残酷、有效):
-
任何带有合适步态的器械都应该只在训练中使用。
-
然后转换验证集/测试集。[2]
如果你想直观地感受一下“情况到底有多糟糕?”:scikit-learn 自身的文档就展示了一个泄漏示例,其中错误的预处理顺序导致随机目标上的准确率达到0.76,而一旦泄漏得到修复,准确率又会回落到0.5左右。这就是泄漏可能造成的错觉。[2]
顺利将预处理流程投入生产环境 🏗️
很多模型在生产环境中失败,并不是因为模型“不好”,而是因为输入的实际情况发生了变化,或者你的流程发生了变化。
面向生产环境的预处理通常包括:
-
保存工件(编码器映射、缩放器参数、分词器配置),以便推理使用完全相同的学习变换[2]
-
严格的输入合同(预期列/类型/范围)
-
监测偏差和漂移,因为生产数据会漂移[5]
如果您需要具体的定义:谷歌的 Vertex AI 模型监控区分了训练服务偏差(生产分布偏离训练分布)和推理漂移(生产分布随时间变化),并支持对分类特征和数值特征进行监控。[5]
因为惊喜很贵。而且不是那种让人开心的惊喜。.
对比表格:常用预处理和监控工具(以及适用人群)🧰
| 工具/库 | 最适合 | 价格 | 它为何有效(以及一点点实话) |
|---|---|---|---|
| scikit-learn 预处理 | 表格机器学习管道 | 自由的 | 可靠的编码器 + 缩放器(独热编码器、标准缩放器等)和可预测的行为[1] |
| 拥抱脸标记器 | NLP输入准备 | 自由的 | 在不同运行/模型中一致地生成输入 ID + 注意力掩码 [3] |
| 火炬视觉变换 | 视觉转换 + 增强 | 自由的 | 在一个管道中混合确定性变换和随机变换的干净方法[4] |
| Vertex AI 模型监控 | 生产环境中的漂移/偏差检测 | 付费(云端) | 监视器具有偏差/漂移功能,并在超过阈值时发出警报[5] |
(是的,这张表格里还是有一些意见的。但至少都是些诚实的意见😅)
一份实用的预处理清单,您可以真正使用📌
训练
-
定义输入模式(类型、单位、允许范围)
-
审核缺失值和重复值
-
以正确的方式拆分数据(随机/基于时间/分组)
-
仅对训练集进行拟合预处理(
fit/fit_transform保留在训练集上)[2] -
保存预处理产物,以便推理可以重用它们[2]
训练期间
-
仅在适当时应用随机增强(通常仅在训练集划分中应用)[4]
-
保持评估预处理确定性[4]
-
跟踪预处理更改,就像跟踪模型更改一样(因为它们确实是模型更改)。
部署前
-
确保推理使用相同的预处理路径和工件[2]
-
设置漂移/倾斜监控(即使是基本的特征分布检查也能起到很大的作用)[5]
深度解析:常见的预处理错误(以及如何避免它们)🧯
错误一:“我很快就能让一切恢复正常”😵
如果使用完整数据集计算缩放参数,则会泄露评估信息。应该使用训练集进行拟合,对其余数据集进行变换。[2]
错误二:分类混乱🧩
如果训练和推理过程中类别映射发生变化,模型可能会悄无声息地误判数据。请通过保存的工件来固定映射关系。[2]
错误 3:随机数据增强偷偷混入评估中 🎲
随机变换在训练中非常有效,但在衡量性能时不应该“偷偷开启”随机变换。(随机就是随机。)[4]
结语🧠✨
人工智能预处理是一门严谨的艺术,它将纷繁复杂的现实数据转化为一致的模型输入。它涵盖了数据清洗、编码、缩放、分词、图像转换,以及——最重要的是——可重复的流程和工件。
-
要有意识地进行预处理,而不是随意地进行预处理。[2]
-
先进行分割,仅在训练集上拟合变换,避免泄漏。[2]
-
使用适合模态的预处理方法(文本使用分词器,图像使用变换)。[3][4]
-
监控生产偏差/漂移,以免模型逐渐偏离正轨。[5]
如果你遇到难题,不妨问问自己:
“如果我明天用全新的数据运行这个预处理步骤,它还有意义吗?”
如果答案是“嗯……也许吧?”,那就是关键所在了😬
常问问题
简单来说,什么是人工智能预处理?
AI预处理是一系列可重复的步骤,它将噪声大、方差大的原始数据转换为模型可以学习的一致输入。预处理包括数据清洗、验证、类别编码、数值缩放、文本分词和图像变换等。其目标是确保训练和生产推理阶段看到的是“相同类型”的输入,从而避免模型在后续阶段出现不可预测的行为。.
为什么人工智能预处理在生产环境中如此重要?
预处理至关重要,因为模型对输入表示非常敏感。如果训练数据的缩放、编码、分词或转换方式与生产数据不同,就可能出现训练/服务不匹配的故障,这些故障在离线状态下看起来正常,但在在线状态下却会悄无声息地发生。强大的预处理流程还能减少噪声、提高学习稳定性并加快迭代速度,因为您无需处理繁杂的笔记本代码。.
预处理过程中如何避免数据泄露?
一条简单的规则就足够了:任何包含拟合步骤的模型都必须仅使用训练数据进行拟合。这包括缩放器、编码器和分词器,它们会学习诸如均值、类别映射或词汇表之类的参数。首先进行划分,在训练集上进行拟合,然后使用拟合好的转换器转换验证集/测试集。数据泄漏会导致验证集看起来“神奇地”很好,但在实际生产环境中却会崩溃。
表格数据最常见的预处理步骤有哪些?
对于表格数据,通常的处理流程包括数据清洗和验证(类型、范围、缺失值)、分类编码(独热编码或序数编码)以及数值缩放(标准化或最小-最大值变换)。许多处理流程还会添加基于领域特征的工程方法,例如比率、滚动窗口或计数。一个实用的习惯是明确定义列分组(数值型、分类型或标识符),以确保转换的一致性。.
文本模型的预处理是如何进行的?
文本预处理通常包括将文本分词成词元/子词,将其转换为输入 ID,并处理填充/截断以进行批处理。许多 Transformer 工作流程还会创建注意力掩码以及相应的 ID。一种常见的做法是使用模型预期的分词器配置,而不是随意更改,因为分词器设置的细微差别都可能导致“模型可以训练,但行为不可预测”的结果。.
机器学习的图像预处理有何不同之处?
图像预处理通常确保形状和像素处理的一致性:例如调整大小/裁剪、归一化,以及明确区分确定性变换和随机变换。在评估过程中,变换应为确定性变换,以便指标具有可比性。在训练过程中,随机增强(例如随机裁剪)可以提高鲁棒性,但必须有意地将随机性限制在训练集内,而不能在评估过程中意外地保留。.
是什么让预处理流程变得“好”而不是脆弱?
一个优秀的 AI 预处理流程应具备可复现性、防泄漏性和可观察性。可复现性意味着相同的输入会产生相同的输出,除非随机性是人为添加的增强数据。防泄漏性意味着拟合步骤不会触及验证集/测试集。可观察性意味着你可以检查缺失值、类别计数和特征分布等统计信息,从而使调试基于证据而非直觉。流程始终优于临时编写的 notebook 代码。.
如何保持训练和推理预处理的一致性?
关键在于推理时复用完全相同的学习成果:标量器参数、编码器映射和分词器配置。此外,还需要一个输入契约(预期列、类型和范围),以防止生产数据悄然演变成无效格式。一致性不仅仅是“执行相同的步骤”,而是“使用相同的拟合参数和映射执行相同的步骤”。
如何监控预处理过程中出现的漂移和偏差等问题?
即使拥有完善的流水线,生产数据也会发生变化。一种常见的做法是监控特征分布的变化,并在出现训练-服务偏差(生产数据与训练数据不符)和推理漂移(生产数据随时间变化)时发出警报。监控可以是轻量级的(例如基本的分布检查),也可以是管理式的(例如 Vertex AI 模型监控)。其目标是尽早发现输入变化,防止它们逐渐降低模型性能。.
参考
[1] scikit-learn API:
sklearn.preprocessing (编码器、缩放器、归一化) [2] scikit-learn:常见陷阱 - 数据泄露及其避免方法
[3] Hugging Face Transformers 文档:分词器(输入 ID、注意力掩码)
[4] PyTorch Torchvision 文档:变换(调整大小/归一化 + 随机变换)
[5] Google Cloud Vertex AI 文档:模型监控概述(特征倾斜和漂移)