python常用库-pandas、Hugging Face的datasets库(大模型之JSONL(JSON Lines))
文章目录
- python常用库pandas、Hugging Face的datasets库(大模型之JSONL(JSON Lines))
- 背景
- 什么是JSONL(JSON Lines)
- 通过pandas读取和保存JSONL文件
- pandas读取和保存JSONL文件
- Hugging Face的datasets库
- Hugging Face的datasets库 和 pandas 我应该用哪个
- 参考
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