文章目录
python常用库pandas、Hugging Face的datasets库(大模型之JSONL(JSON Lines))
背景
在当今的数据交换领域,各种格式层出不穷,其中 Comma Separated Values(CSV)格式作为一种常见的数据交换格式,被广泛用于表示具有相同字段列表的记录集。而 JavaScript Object Notation(JSON)则已成为事实上的数据交换格式标准,取代了曾在 21 世纪初备受瞩目的 XML。JSON 不仅具有自我描述性,而且易于人类阅读。
在处理和分析大型数据集时,JSON Lines 格式成为了一种受欢迎的选择。
与传统的 JSON 格式相比,JSON Lines 不需要一次性加载整个文件,而是可以逐行读取和处理数据。这种特性使得 JSON Lines 非常适用于处理大型数据集,无需担心内存限制或性能问题。
每一行表示一个单独的条目这一特点使得 JSON Lines 格式化的文件具有可流式处理的特性。您可以根据需要读取任意多行来获取相同数量的记录。在网络爬虫等需要处理大量数据的场景中,JSON Lines 格式无疑是一种非常实用的选择。
JSONL(JSON Lines)在大模型时代,通常用于保存模型训练的数据集。
什么是JSONL(JSON Lines)
官网:https://jsonlines.org/
JSON Lines 特点
- 采用 UTF-8 编码;
- 每行必须是一个有效的 JSON 对象;
- 在每个 JSON 对象,采用 \n 或 \r\n 作为行分隔符;
建议约定:
- JSON Lines文件通常使用文件扩展名
.jsonl
保存 - 建议使用像 gzip 或 bzip2 这样的流压缩器以节省空间,生成 .jsonl.gz 或 .jsonl.bz2 文件
- MIME 类型可以是 application/jsonl,但这 还没有被标准化
- 文本编辑程序将文本文件的第一行称为“第1行”。JSON Lines文件中的第一个值也应称为“第1个值”
通过pandas读取和保存JSONL文件
微调任何人工智能模型的第一步是准备训练数据集。
很多时候,我们需要把一些我们常见的格式,如csv等,转换为更适合训练 AI 模型的 JSONL(JSON Lines)格式。
目前大模型很多的数据格式都是jsonl和json的,通常我们使用json的文件相对较多,对于jsonl的处理,我们其中每一行都是一个独立的JSON对象。这种格式非常适合于那些需要逐行读取和写入数据的场景,比如日志文件处理。Pandas是一个强大的Python数据分析库,它提供了读取和保存JSONL文件的功能,使得处理这种格式的数据变得简单快捷。
pandas读取和保存JSONL文件
在使用Python的数据处理库pandas时,可以轻松地读取和写入JSONL格式的文件。
当处理大型JSONL文件时,我们可能不希望一次性将所有数据加载到内存中。Pandas的read_json方法支持分块读取:
chunk_size = 1000 # 每次读取1000行
chunks = pd.read_json('large_data.jsonl', lines=True, chunksize=chunk_size)
for chunk in chunks:
print(chunk)
# 可以在这里对每个块进行处理
Hugging Face的datasets库
官方地址:https://huggingface.co/docs/datasets/index
Hugging Face中的datasets库为数据处理提供了强大且灵活的工具,能够帮助开发者和研究人员更高效地处理各种类型的数据集。通过其丰富的特性和广泛的社区支持,datasets库已成为机器学习项目中不可或缺的重要工具之一。
Hugging Face是用来处理数据集的一个python库。当微调一个模型时候,需要在以下三个方面使用该库,如下。
- 从Huggingface Hub上下载和缓冲数据集(也可以本地哟!)
- 使用Dataset.map()预处理数据
- 加载和计算指标
现在上GB的数据集是非常常见的,例如训练BERT和GPT2的数据集。加载如此之大的数据集对内存大要求很高。预训练GPT2的数据集包含8百万个文档和40GB的文本。如果你有尝试加载过这些数据,就会知道这有多么的麻烦!
Datasets针对大数据加载的痛点做了很多工作,在加载数据上使用内存映射的方法,使得加载数据不再受内存大小的限制,只要磁盘空间够大,就能够快速加载大数据文件。
只需要在load_dataset()
函数中指定加载数据的类型(csv或tsv表格数据、text文本数据、json或json lines格式数据已经pandas保存的pickle文件)以及设置参数data_files来指定一个或多个文件即可。
Hugging Face的datasets库 和 pandas 我应该用哪个
Hugging Face的datasets库
- 专用性:datasets库专为处理和加载各类自然语言处理(NLP)任务的数据集而设计,支持从Hugging Face Hub直接下载和加载多个公共数据集,比如GLUE、SQuAD、IMDB等1。
- 高效性:该库使用内存映射(memory mapping)和缓存机制,能够高效处理大规模数据集,并支持GPU加速5。
- 便捷性:通过简单的一行代码即可加载数据集,具备多线程处理能力,适合需要快速迭代的深度学习项目^6。
- 灵活性:可以方便地进行数据集的处理和变换(例如过滤、切分、映射)1。
- 与Transformers兼容:适合与Hugging Face的Transformers库结合使用,便于直接应用于模型训练和验证3。
Pandas
- 多功能性:Pandas是一个通用的数据处理库,不仅限于NLP领域,适合处理各种数据格式(如CSV、Excel、JSON等),非常适合一般的数据分析任务。
- 灵活的数据操作:Pandas提供了丰富的数据操作功能(如数据清洗、变换、合并、重塑等),在结构化数据的处理上非常强大2。
- 更广的应用场景:如果你的数据分析不仅限于NLP,比如数据可视化、数据科学等场景,Pandas则是更合适的选择。
- 学习曲线:对于新的数据科学家来说,Pandas的学习曲线相对较平缓,因为它的应用场景更广泛且有丰富的学习资源。
总结:
如果你的项目更多地涉及到深度学习和模型训练,建议优先使用datasets库;如果涉及到多样化的数据处理和分析任务,则Pandas更为合适。
参考
【大模型-驯化】成功搞懂大模型的jsonl数据格式处理和写入,通过pandas读取和保存JSONL文件
https://blog.csdn.net/lov1993/article/details/142494045
Hugging Face教程 - 5、huggingface的datasets库使用
参考URL: https://zhuanlan.zhihu.com/p/564816807