1. 项目概述:为什么我们需要一本批判性的机器学习数据集使用指南?
如果你正在构建一个图像分类模型来识别鸟类,或者利用社交媒体数据研究哥斯达黎加的家庭生活,又或者你是一位艺术家,正在用DALL-E 2探索视觉风格的组合,那么你正在与机器学习数据集打交道。数据集是这一切的起点,是模型的“食粮”。但你是否曾停下来思考过,你手中的数据集从何而来?它代表了谁,又遗漏了谁?那些标注“猫”或“狗”的标签背后,是谁做出的判断,依据又是什么?
在过去的十多年里,我见证了机器学习从实验室走向千家万户的爆炸式增长。伴随而来的,是无数令人兴奋的成果,以及一系列令人不安的失败:从面部识别系统对不同肤色人群的识别率差异,到用于预测累犯风险的算法被证明对特定族裔存在系统性偏见。这些问题的根源,往往不在于算法本身有多么“邪恶”,而在于喂养它们的“食粮”——数据集——本身就携带着历史的、社会的、技术的“基因缺陷”。数据集从来都不是中立的。它是一面镜子,映照出构建者的意图、工具的限制、时代的偏见,以及收集过程中不可避免的权力关系。将数据集简单地视为“原始材料”或“客观事实”,是我们在技术实践中可能犯下的最危险的错误之一。
这本指南的核心,就是希望将一种批判性的关怀(critical care)带入到数据集的使用中。这不仅仅是技术上的审慎,更是一种伦理和实践上的责任感。它要求我们像环境管理者对待生态系统一样,去管理和理解数据集——意识到其复杂性、关联性和潜在的深远影响。这意味着,我们不仅要问“这个数据集能让我的模型准确率提高多少?”,更要追问:“这个数据集是如何构建的?谁被包含在内,谁被排除在外?它的使用可能会对哪些人造成何种影响?”
2. 数据集的本质:从“数据”到“数据情境”
在深入技术细节之前,我们必须先厘清一些基本概念。这些概念构成了我们批判性思考的基石。
2.1 数据与信息:被构建的“事实”
我们常说的“数据”(Data),本质上是一种关系性范畴。科学哲学家萨宾娜·莱奥内利指出,某物能否成为“数据”,取决于谁在使用它、如何使用以及为何目的。数据是研究活动的产物,被收集、存储和传播,旨在作为知识主张的证据。换句话说,数据并非天然存在,而是被制造出来的。
这个过程充满了选择。例如,用红外摄像头收集人脸图像,得到的是热信号数据,而非人眼的颜色。研究的设计、设备的选用,已经为数据能代表什么、不能代表什么划定了界限。当我们把一段访谈记录、一张卫星图像或一串传感器读数称为“数据”时,我们已经在施加一种秩序:我们暂时地将信息固定、分离、组织成适合机器学习任务的形式。这种“数据化”的过程,本身就是一种强有力的解释行为。
2.2 数据集:动态的、情境化的集合
一个数据集(Dataset)是任何被收集和策展的、相互关联的数据集合。在机器学习领域,它通常指用于计算的大规模数据集合。数据集的生命周期——从收集/选择、清洗/分析到共享/废弃——深刻地塑造了我们对其中信息的理解。
媒体学者扬尼·亚历山大·卢基萨斯提出了一个至关重要的概念:“数据都是本地的”。他认为数据集应被视为“数据情境”(Data Settings)。数据集始终与创造它们的社区、个体、生物和环境紧密相连。它们不是独立的权威,而是指向本地知识的索引。因此,理解一个数据集,必须追问:“这些数据将我们引向何方?谁能帮助我们理解它们的起源以及它们可能产生影响的场所?”
> 注意:一个常见的误区是认为“更多数据”或“更干净的数据”就能自动解决问题。然而,如果数据收集的框架本身就有问题(例如,只收集城市地区的交通数据来规划全国交通),那么再多的清洗也无法弥补根本性的代表缺失。批判性使用的第一步,就是放弃数据集是“普适工具”的幻想,正视其固有的局限性和地方性。
2.3 核心术语辨析:算法、模型与机器学习
为了避免混淆,我们快速厘清几个关键术语:
- 算法:一套程序指令集。在机器学习中,它指的是让机器从数据中寻找模式的方法(如梯度下降算法)。
- 模型:机器学习算法在特定数据集上训练后得到的结果。你可以把它想象成一个极其复杂的数学公式,其中包含了通过训练调整好的数百万甚至数十亿个参数(变量)。模型是训练过程的保存输出,用于对新数据进行预测。
- 机器学习:程序员使用的一套工具,用于寻找能最佳描述(或建模)数据集的公式。与传统编程不同,机器学习中,程序员指示软件根据其处理的数据调整自身代码,从而从新信息中“学习”。
- 神经网络/深度学习:这是构建机器学习模型的一种特定结构(架构),受到大脑神经元网络的启发。深度学习特指使用具有许多层的复杂神经网络。
关键洞察:模型并非数据集的一部分,但它深深地被其所基于的数据集所塑造。数据集的“痕迹”无论模型后续如何被使用,都内嵌于模型之中。因此,对数据集的批判性审视,是对模型行为进行问责的前提。
3. 批判性使用数据集的益处:超越技术指标
采用批判性的视角来处理数据集,并非只是增加伦理负担,它能为你的项目和实践带来切实的、多方面的益处。
3.1 构建更稳健、更可靠的结果
通过考虑多元视角并努力减少偏见,你可以构建出更稳健的数据集。这意味着你的模型在面对现实世界的复杂性和多样性时,表现会更加稳定。例如,在开发一个医疗诊断辅助系统时,如果训练数据涵盖了不同年龄、性别、种族和地域的病例,那么模型对新患者群体的泛化能力就会更强,避免出现对某些群体诊断准确率显著下降的情况。
同时,通过在项目的每个阶段设置检查点,对数据来源进行批判性质询,并反思自身的方法论,你可以预见并应对诸如数据集过时、知情同意不充分等意外情况,从而得到更可靠的结果。这就像在建造大楼时不仅检查砖块质量,还勘察地质条件和评估环境影响,最终的建筑必然更经得起考验。
3.2 规避风险与引领行业标准
主动识别和解决数据集中潜在的法律或伦理问题,可以为你和你的团队提供更强的责任保护。例如,未经妥善处理就使用包含个人可识别信息(PII)的数据集,可能违反如欧盟GDPR或中国《个人信息保护法》等法规,带来法律风险。事先的尽职调查是必要的防护网。
更重要的是,批判性实践正在成为顶尖学术会议和期刊的准入要求或强烈鼓励的方向。例如,NeurIPS、ICML等会议近年来不断加强伦理审查,要求作者提交更详细的数据集使用声明。通过采纳和倡导最佳实践,你不仅在保护自己,也在帮助塑造领域的未来,推动建立更负责任的研究文化。
3.3 产生更审慎、更具关怀的成果
最终,所有技术工作的落脚点都是人。通过让受数据集和你的工作影响的人群参与进来,了解对他们而言何为“审慎”和“关怀”的实践,你的项目成果将能更好地服务于人,而非伤害人。这可能是最重要的益处——它确保技术进步与社会价值对齐。
> 实操心得:在我的项目中,我们曾计划使用一个公开的街景图像数据集来训练自动驾驶感知模型。通过批判性审查其数据表,我们发现该数据集主要采集自北美和欧洲的少数几个城市,且拍摄时间多在夏季晴天。如果我们直接使用,模型很可能无法很好处理亚洲城市复杂的交通环境、雨雪天气或夜间场景。我们最终决定补充采集针对性数据,并与本地研究团队合作进行标注。虽然项目周期延长了,但模型的鲁棒性和商业落地潜力得到了极大提升。这个经历让我深刻体会到,前期在数据集伦理和代表性上的投入,长远看是最高效的“技术优化”。
4. 数据集的解剖:理解其组成部分
要批判性地使用一个数据集,你必须像医生熟悉解剖学一样,熟悉它的各个组成部分。
4.1 核心构成要素
- 实例:被处理或分类的单个数据点,通常可视作表格中的一行。例如,在一个猫狗图像分类数据集中,一个实例就是一张图片及其对应的“猫”或“狗”的标签。
- 特征:在整个数据集中被分析、考虑或探索的一个属性,通常可视作表格中的一列。特征可以是任何机器可读(即数值化)的实例形式,例如将图像转换为像素序列。关键点:特征并非天生存在,而是数据集创建者和使用者决策的结果。
- 标签:在监督学习中,标签是训练数据中提供给模型的“答案”,或者是模型生成的输出结果。标签的创建过程是偏见渗入的主要环节之一。
- 元数据:关于数据的数据。它描述了文件的属性,如创建时间、地点、设备参数、创建者等。元数据对于理解数据的情境至关重要。
- 数据表:由Timnit Gebru等人倡导的实践,指描述数据集特征、组成、动机、收集过程、推荐用法和伦理考量的文档。它是你评估数据集适用性的第一份,也是最重要的参考资料。
- 训练/验证/测试数据:为了评估模型性能,数据集通常被划分为三部分:
- 训练数据:用于训练模型,相当于学生的“学习资料”。
- 验证数据:用于在训练过程中调整模型超参数、监控性能,相当于“模拟考试”。
- 测试数据:在模型训练完成后,用于最终评估其泛化能力,相当于“期末考试”。必须确保测试数据在训练过程中完全未被使用或见过。
4.2 数据主体与数据客体
这是两个需要特别区分的概念:
- 数据主体:其数据被收集到数据集中的个人或其他实体。
- 数据客体:这个术语用来描述直接或间接受数据集影响的人,区别于数据主体。例如,一个被迫使用面部检测系统才能登机的乘客,即使他/她的数据不在训练集中,也成为了该数据集和模型的“客体”。
这个区分至关重要,因为它将我们的责任范围从数据提供者扩展到了所有可能被算法系统影响的人。一个用于招聘筛选的AI模型,其训练数据集中的主体是历史上的求职者,而客体则是所有未来可能被该模型评估的求职者。我们的伦理考量必须涵盖这两者。
5. 数据集的类型与转化:从形态到操作
数据集有多种分类方式,了解它们有助于你选择合适的工具和方法。
5.1 数据集的主要类型
- 按内容:图像/视频数据集、文本数据集(用于NLP)、音频数据集、时间序列数据、图网络数据等。还有结合多种模态的多模态数据。
- 按结构:
- 结构化数据:如具有标记行列的表格数据。
- 非结构化数据:如纯文本文件、未标注的图像。
- 按学习范式:
- 监督学习数据集:包含标签(即“答案”)的数据集,用于训练模型学习从输入到输出的映射。
- 无监督学习数据集:没有标签,用于让模型自行发现数据中的模式(如聚类)。
> 注意:不要错误地认为无监督学习的结果更“纯粹”或更“客观”。从选择特征、调整参数到评估模型性能,大量的人类判断贯穿始终。所有机器学习都是人机协作的产物。
5.2 数据预处理:关键的“清洗”与转化
没有哪个数据集是开箱即用的。预处理(常被不太准确地称为“清洗”)是将原始数据转化为适合机器学习算法形式的必要步骤。这个过程充满了价值判断。
| 预处理步骤 | 技术目的 | 批判性思考点 |
|---|---|---|
| 处理缺失值 | 处理NaN、NULL或空白条目,防止计算错误。 | 缺失本身是信息。“未收集”与“不可用”语义不同。随意删除或填充(如用均值)可能扭曲子群体的表现,或抹除系统性数据收集失败的模式。艺术家Mimi Ọnụọha的《缺失数据集图书馆》项目正是对“未被收集之物”的反思。 |
| 处理异常值与重复值 | 移除可能干扰模型训练的极端值或重复条目。 | 谁定义了“异常”?“正常”的范围由谁设定?某些“异常值”可能代表了重要的少数群体或罕见但关键的情况。清洗行为本身就在定义何为“信号”,何为“噪声”。 |
| 离散化(分箱) | 将连续数据(如年龄)分组到区间中(如0-18,19-35)。 | 简化了数据,但可能掩盖重要细节。将年龄分为“青年”“中年”“老年”的边界设定,本身就承载了社会文化观念,并可能强化年龄歧视。 |
| 分词/分块 | 将文本拆分为词元(单词/子词),或将音频/视频切分为片段。 | 分词策略需考虑语言差异。以空格分词对英文有效,但对中文无效。这可能导致某些语言在NLP任务中处于劣势。 |
| 归一化/标准化 | 将数值特征缩放到统一范围(如0-1),或将文本统一为小写。 | 归一化可能去除重要上下文。将图像裁剪为统一尺寸会丢失框外信息;将文本转为小写可能使某些缩写与其同形词混淆。 |
工程化特征是另一个关键步骤,即创建新的特征(如从日期中提取“星期几”)。这需要创造力,但也极具影响力。例如,“降维”技术旨在找出数据集中最相关的特征,但这可能与金伯利·克伦肖提出的交叉性分析直接冲突——后者强调关注那些在分类交叉处、受压迫最深的群体的独特经历,而不是将他们笼统地归入某个大类并忽略其内部差异。
6. 数据集的生命周期:从起源到归档的全程拷问
批判性地使用数据集,意味着在生命周期的每个阶段都提出关键问题。这里提供一个可操作的问题清单。
6.1 起源阶段:你的数据集从何而来?
在选择和使用一个数据集前,必须像侦探一样调查它的身世。数据表和相关论文是首要信息来源。
- 创作者与动机:谁创建并资助了这个数据集?他们的初衷是什么?与你的项目目标是否一致?如果不一致,使用它会对数据主体、客体及你的项目结果产生什么影响?
- 收集与标注:数据是如何收集和标注的?原始标注说明是否可用?数据主体是否参与了数据集的设计与创建?标注者是谁?其劳动条件和文化背景如何?众包标注可能缺乏来自多元视角的个体标注者所能提供的细微差别。
- 预处理历史:数据集是否已被处理过?它是更大数据集的样本吗?或是其他数据集的汇编?如果已被转化,文档是否包含原始版本或方法描述?
- 内容与审计:数据集包含什么?缺少什么?哪些视角被包含,哪些被遗漏?哪些异常值被忽略?你能或已经对数据集进行过审计吗?审计结果揭示了什么?
- 时效性与废弃状态:数据集何时创建?是否最新版本?如果已被废弃(因伦理、法律或准确性问题被公开撤下),原因是什么?请注意,一个数据集未被废弃并不代表它安全可用。
- 代表性与假设:谁在数据集中?谁被排除在外?数据集中包含了哪些假设、直觉、理论、刻板印象或不平等?这些框架如何通过数据集的格式化过程被固化?
- 知情同意:数据主体是如何给予同意被纳入的?同意是否充分知情、自愿且可撤销?如何保护主体的匿名性?需警惕所谓的“匿名数据”在与其它数据集结合时被重新识别的风险。
- 合法与伦理访问:你是否有合法、合乎伦理的权限使用此数据集?你的使用是否符合其许可协议和使用条款,以及你所在机构的行为准则?
> 核心建议:如果上述问题的答案令你感到不安,或者关键信息缺失,最负责任的选择有时是放弃使用该数据集。解释为何不构建某个模型或不使用某个数据集,本身就是一个有价值的贡献。
6.2 使用阶段:你将用数据集讲述什么故事?
你的项目目标将指引你对数据集的选择、特征的解读、模型的选择以及调整的方向。
- 目标对齐:你的项目目标是什么?这个数据集如何帮助你实现它?应优先考虑项目本身的目的,而非数据集的流行度或你的熟悉度。
- 假设检验:你通过框定项目优先考虑或排除了哪些假设?如何通过与来自不同学科或背景的人(如艺术家、实践者、社区利益相关者)合作,更丰富地制定项目目标?
- 处理与特征选择中的假设:在清洗数据和选择特征进行分析时,你做了哪些假设?你是否不自觉地视数据为“中性”?清洗过程是否误传了信息或移除了重要细节?
- 偏离初衷:你的项目在多大程度上偏离了数据集的原始目的?如果偏离显著,你如何追踪可能产生的新影响?如何与可能受新用途影响的社区互动?
- 伤害评估与缓解:你对数据集的使用可能造成什么伤害?你将如何衡量和解决负面影响?采取哪些步骤来最小化伤害?与可能受影响的数据主体和客体密切合作,共同制定缓解策略。
- 同意与匿名的维护:数据主体是否被告知与你的具体使用案例相关的风险?他们能否追溯其数据被如何使用?
- 衍生数据集的责任:你的工作是否产生了一个新的、衍生的数据集?你将如何应对衍生数据集产生的新伦理问题,同时处理原始数据集已有的问题?为此创建一份新的数据表至关重要。
6.3 管理阶段:这个数据集将继续讲述什么故事?
项目分析完成并不意味着工作的结束。负责任的数据管理需要对分享、维护和废弃采取整体性、可持续的视角。
- 如何分享:你将如何分享这个数据集?提供你修改后的版本,还是链接到创建者的原始版本?谁将拥有何种访问权限?开放获取的精神意味着提供清晰、完整的文档,包括面向非技术受众的简明使用说明。
- 遵循FAIR原则:你的结果是否可发现、可访问、可互操作、可重用?在数据仓库中列出你的项目和数据集,确保其拥有数字对象标识符和完整的元数据。
- 文档化:你是否记录了所有额外的数据预处理步骤?是否创建了新的数据表?在研究过程中随时记录决策和原因,这对未来使用者是无价之宝。
- 呈现形式:你将使用何种形式来讲述基于此数据集的故事?能否与他人合作,采用不同的形式或感官媒介?设计选择编码了太多意义,应有意为之。
- 维护与监控:如果数据集涉及隐私或同意约束,你是否有安全、长期的存储和访问控制计划?在你或团队离开后,如何维持项目及其基础设施的管理链?
- 应对变更与归档:你如何知道数据集创建者是否修订或废弃了该数据集?你的应对计划是什么?谁将负责在必要时归档或废弃你自己的数据?遵循如卢乔尼和科里等人推荐的数据集废弃框架,包括说明废弃原因、移除方式、影响缓解计划、申诉机制、时间线以及发布后访问协议。
7. 实践中的警示与反思:为什么“去偏见”是不够的?
7.1 数据集如何导致伤害?
不当使用数据集可能伤害数据主体、数据客体、数据工人(准备数据集的劳动者)以及使用数据集的研究人员、设计师等社群。这些伤害可分为两类:
- 分配性伤害:算法系统帮助拒绝向个人提供资源(如贷款、保险、工作机会)。
- 代表性伤害:算法系统歪曲或污名化某些社区。
社会学家鲁哈·本杰明所称的“编码不平等”指出,算法和数据集不仅反映和再生产现有的不平等,还常将其标榜为“更客观或更进步”。机器学习和海量数据集的速度与规模,使得歧视变得更容易、更快,也更难挑战。
7.2 数据集出错的常见陷阱
研究总结了使用大型复杂数据集时的四种常见陷阱:
- 虚假任务:任务成功仅因为任务本身与现实世界的合理关联或能力不对应。
- 数据中的伪影:机器学习模型可以轻易利用这些伪影来“玩弄”任务。
- 草率的标注或文档:缺乏反思性描述会“侵蚀基于这些数据集的任何科学探究的基础”。
- 代表性:数据集在包含哪些数据主体、代表谁的“凝视”方面存在偏见。
即使试图修复数据集,也常陷入相同陷阱。研究表明,在创建后修改的数据集(通常是为了提高模型的泛化能力)仍然容易受到与原始数据集相同类型问题的影响。关键在于,需要超越技术修复,从项目设计到废弃,从历史和技术基础到领域整体方法,全盘考虑数据管理。
7.3 超越“去偏见”:拥抱交叉性与情境化权力分析
试图通过移除有问题内容或优化系统来完全消除伤害是不现实的。术语“偏见”本身就很复杂,它代表了一组更根本地嵌入机器学习系统(尤其是分类机制)的关切。
大量研究致力于通过改进学习技术、用不同或对抗性数据集补充数据等方法来创建更稳健的模型。这些量化策略可以修补关键问题或提高准确性,但无法解决潜在的结构性问题或嵌入的社会技术问题。
本指南建议采取一种分层方法:
- 意识:首先,理解你的数据集中的分类。它预设了哪些类别?这些类别拥有何种权力、承载何种意义?与你的团队一起研究,并联系圈子之外的人以获得不同视角。
- 行动:其次,如果你的数据集中的分类可能过于简化、具有压迫性或有害(例如, resulting system might contribute to power imbalances, or collapse complex identities),以至于数据集不应被用于机器学习,那么请准备好调整甚至终止你的项目。有时,不构建它就是最好的行动。
交叉性(Intersectionality)——源于黑人女性主义和金伯利·克伦肖的法律理论——提供了一个强大的框架。它分析权力如何在系统层面运作,以分层的方式维持压迫并塑造身份。应用于数据集时,��叉性原则包括:以边缘化和受影响最深的群体为中心,在数据集生命周期的每个阶段保持他们的优先地位,并强调关系性和关怀的伦理。
> 实操心得:在一次合作项目中,我们试图建立一个消费者细分模型。最初的特征包括“年龄”、“收入”、“地理位置”等常见人口统计学变量。通过引入交叉性视角,我们与社会科学研究者合作,增加了“获取数字服务的便利性”、“对特定营销渠道的信任度”等更情境化的特征,并意识到单纯按“年龄”和“收入”分类会掩盖低收入老年群体与低收入年轻群体面临的截然不同的障碍。这并没有消除“分类”,但让我们的分类变得更加细致和负责任,最终模型的商业应用也更精准、更少冒犯性。
8. 工具、资源与行动路线
8.1 技术工具栈
在Python生态中,处理数据集常用到以下库:
- NumPy:用于高效处理大型多维数组和矩阵运算的基础库。
- Pandas:提供高性能、易用的数据结构和数据分析工具,是数据清洗、转换、分析的利器。
- Matplotlib/Seaborn:数据可视化库,用于探索性数据分析,直观发现数据分布和潜在问题。
- Scikit-learn:机器学习库,包含丰富的预处理工具(如标准化、编码)和模型。
- Hugging Face Datasets:一个强大的库和社区平台,提供对数千个数据集的轻松访问、处理和分享,并常附有数据卡。
> 技巧:在使用pd.read_csv()或类似函数加载数据后,立即使用.info()和.describe()方法,并可视化关键特征的分布。这能帮你快速发现缺失值、异常值以及潜在的类别不平衡问题。
8.2 数据集资源与仓库
- Hugging Face Datasets:强烈推荐,许多数据集附有社区贡献的数据卡。
- Kaggle:拥有大量数据集和数据科学竞赛,但需仔细审查其来源和质量。
- Papers with Code:将学术论文与相关的代码、数据集链接起来。
- Zenodo:由CERN运营的通用开放获取研究数据仓库。
- 研究数据注册表:如re3data.org,可以按学科查找专业的数据仓库。
8.3 构建你的批判性实践清单
将批判性思维融入日常工作流,可以从创建一个简单的检查清单开始:
项目启动前:
- [ ] 明确项目核心目标及潜在受影响群体。
- [ ] 搜索目标领域数据集,优先选择提供完整数据表(Datasheet)的。
- [ ] 仔细阅读数据表、许可证和论文,回答“起源阶段”的关键问题。
- [ ] 进行小规模探索性分析,直观感受数据质量与分布。
数据处理与建模中:
- [ ] 记录每一次数据转换(清洗、特征工程)的原因和具体操作。
- [ ] 分析训练集、验证集、测试集的分布是否一致,是否存在数据泄露。
- [ ] 使用公平性评估工具包(如
AI Fairness 360,Fairlearn)检查模型在不同子群体上的性能差异。 - [ ] 定期与团队成员(最好包括非技术背景的成员)讨论伦理假设和潜在风险。
项目交付与后期:
- [ ] 撰写项目文档,包括数据来源、处理步骤、已知局限性和伦理考量。
- [ ] 如果创建了衍生数据集,为其制作一份新的数据表。
- [ ] 制定数据共享或访问控制计划。
- [ ] 规划数据集和模型的长期维护、监控及废弃流程。
最后,记住技术哲学家唐纳德·A·诺曼的一句话:“我们设计的不是最终产品,而是用户与产品互动时的体验。” 在机器学习中,我们通过数据集和模型设计的,远不止一个软件功能,而是一种社会互动和权力关系的体验。批判性地使用数据集,就是对我们所设计的这种体验负责的开始。这条路没有终点,它是一个需要持续学习、反思和对话的实践过程。希望这份指南能成为你手边一份常看常新的工具,帮助你在复杂的数据世界中,做出更清醒、更负责任的选择。