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

datasets 数据处理封装后,统一处理流程以避免Dataset Map顺序依赖问题

文章目录

    • 处理流程说明
    • 小结

在实际项目中,我们常常需要对数据集进行预处理。为了规范操作,我封装了一个基础数据集处理类:

class DatasetAbstract:"""所有数据集都应包含以下几个字段:* question:用户提问文本* pos:与用户问题相关的正例文本* neg:与用户问题相关的负例文本* answer:用户问题对应的最终答案说明:部分数据集(如 HotpotQA、IIRC、2WikiMQA、Musique 等)本身就提供了 supporting facts,可用于支持正负例抽取。(参考 MDQA 论文)"""def __init__(self, dataset_name: str):self.dataset_name = dataset_nameself.dataset = self.load_dataset()# self.dataset = self.dataset.map(self.set_pos_text)# self.dataset = self.dataset.map(self.set_neg_text)# self.dataset = self.dataset.map(self.get_answer_data)# self.dataset = self.dataset.map(self.get_retrirver_data)# 数据集全部的处理过程都加载进内存,需要大内存self.dataset = self.dataset.map(self.full_process, num_proc=8)def full_process(self, item):item = self.set_pos_text(item)item = self.set_neg_text(item)item = self.get_answer_data(item)item = self.get_retrirver_data(item)return item

处理流程说明

在最初的设计中,我将数据处理函数(set_pos_textset_neg_textget_answer_dataget_retrirver_data)分步骤地进行 map 调用:

self.dataset = self.load_dataset()
self.dataset = self.dataset.map(self.set_pos_text)
self.dataset = self.dataset.map(self.set_neg_text)
self.dataset = self.dataset.map(self.get_answer_data)
self.dataset = self.dataset.map(self.get_retrirver_data)

这种分步 map 的方式在本地 Python 脚本运行时表现正常。但当在 Jupyter Notebook 中运行时,遇到了预期之外的问题,处理结果与脚本中的不一致。

经过排查,发现问题的根本原因在于 map 函数内部存在隐式的并行处理,尤其是在某些 datasets 库版本中,即便未显式指定 num_proc>1,后台也可能开启轻量并发优化。这导致不同处理步骤之间的依赖关系被打破(如 set_neg_text 可能在 set_pos_text 之前被调用),进而产生错误结果。

因此,如果各处理步骤之间存在明显的先后依赖关系,推荐采用统一封装成一个大函数的方法,一次性进行完整处理,避免中间状态不一致的问题。

我最终将所有小处理函数整合到 full_process 中,确保各步骤按顺序执行,并在一次 map 中完成,成功得到了预期结果。


小结

总结经验

  • 如果数据处理函数之间没有强依赖,可以分步 map,提高可读性和模块化程度。
  • 如果函数之间有顺序依赖,务必封装成一个统一的处理函数,确保数据流正确。
  • 注意不同运行环境(如本地脚本、Jupyter Notebook、服务器环境)下 datasets.map() 的并行行为可能存在差异。
  • 若需要明确控制,可以设置 num_proc=1 强制单进程,避免并发问题。

相关文章:

  • 云原生周刊:Kubernetes v1.33 正式发布
  • 机器学习第三篇 模型评估(交叉验证)
  • 算法思想之哈希表
  • 前端:纯HTML、CSS和JS菜单样式
  • 在matlab中使用UAV123官方toolkits测试自己的数据集
  • 鼠标滚动字体缩放
  • STM32 USB配置详解
  • 从数据到决策:如何使用Python进行自动驾驶数据分析
  • 图论---拓扑排序(DFS)
  • 计算机视觉进化论:YOLOv12、YOLOv11与Darknet系YOLOv7的微调实战对比
  • Linux运维——Vim基础
  • 如何搭建spark yarn模式的集合集群
  • 搭建 Spark YARN 模式集群指南
  • 集成学习详解
  • Darvas Box黄金交易算法详解:基于XAU/USD的实战应用
  • Web 基础与Nginx访问统计
  • lmms-eval--微调实战笔记
  • 如何实现Kafka的Exactly-Once语义?
  • 输出圆周率的前n位数字
  • 含锡废水综合治理技术解析
  • 湖北宜昌:在青山绿水间解锁乡村振兴“密码”
  • 逆境之上,万物生长
  • 常州市委原常委、组织部部长陈翔调任江苏省民宗委副主任
  • 中国德国商会报告:76%在华德企受美国关税影响,但对华投资战略依然稳固
  • 创新创业50人论坛开幕在即,双创青年为何选择来上海筑梦?
  • 中国电信财务部总经理周响华调任华润集团总会计师