【HuggingFace文档学习】datasets库加载数据

datasets库是Hugging Face平台的,用于轻松访问和共享用于音频、计算机视觉和自然语言处理任务的数据集的库。该库整合、规范出了一种简单的方式来加载、处理和使用数据。以下是使用datasets库加载数据方法总结:load_dataset()方法。

load_dataset()是Hugging Face的datasets库中的一个核心函数,可以从各种来源加载数据集,返回Dataset对象DatasetDict对象。以下是一些常见的使用方法:

  1. 从远程仓库加载:这是最常见的使用方式,只需要提供数据集的名称即可,在能正常访问huggingface的情况下简单易行。例如,加载rotten_tomatoes数据集和加载cnn_dailymail数据集:

    from datasets import load_dataset
    dataset = load_dataset("rotten_tomatoes")
    
    # 有些数据集区分了【子集】的概念(称作版本或配置),对于这类数据集,需要在后面声明加载哪一个子集。
    from datasets import load_dataset
    dataset = load_dataset("cnn_dailymail", "3.0.0")
    
    • 如果不指明参数split,则返回DatasetDict对象,所有的split(如:train、validation、test)一起返回。如上例的rotten_tomatoes数据集返回结果。

      DatasetDict({
      train: Dataset({
      features: [‘text’, ‘label’],
      num_rows: 8530
      })
      validation: Dataset({
      features: [‘text’, ‘label’],
      num_rows: 1066
      })
      test: Dataset({
      features: [‘text’, ‘label’],
      num_rows: 1066
      })
      })

    • 如果指明split参数split,则返回Dataset对象,为具体的split。如:

      from datasets import load_dataset
      dataset = load_dataset("rotten_tomatoes", split="train")
      

      Dataset({
      features: [‘text’, ‘label’],
      num_rows: 8530
      })

  2. 从本地文件加载:根据本地文件的格式而异。

    • JSON文件:如果格式为JSON文件,则使用load_dataset()按如下方式来加载它。

      from datasets import load_dataset
      dataset = load_dataset('json', data_files='path_to_file.json')
      

      默认会把所有样本作为训练集。json中所有出现过的构成这个返回的Dataset对象features属性

      DatasetDict({
      train: Dataset({
      features: [‘content’, ‘basename’, ‘article’, ‘summary’, ‘result’],
      num_rows: 160
      })
      })

    • CSV文件:如果格式为CSV文件,则使用load_dataset()按如下方式来加载它。

      from datasets import load_dataset
      dataset = load_dataset('csv', data_files='path_to_file.csv')
      
    • Arrow文件:Arrow文件是datasets库的默认存储格式,加载它们会非常快速。

      from datasets import load_dataset
      dataset = load_dataset('path_to_file.arrow')
      

      可以以字典的形式赋值给data_files参数,来自由定义返回DatasetDict对象split

      一般地,大多以arrow格式存储的数据集,会很规范地将3个split分为3个文件,如:数据集cnn_dailymail的文件分为了cnn_dailymail-train.arrow, cnn_dailymail-validation.arrow, cnn_dailymail-test.arrow三部分。

      arrow_dir_cnndm = r'D:\datasets\cnn_dailymail\3.0.0'
      
      from datasets import load_dataset
      import os
      dataset = load_dataset(path=arrow_dir_cnndm, data_files=
                             {'train': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-train.arrow'), 
                              'validation': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-validation.arrow'), 
                              'test': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-test.arrow')})
      

      DatasetDict({
      train: Dataset({
      features: [‘article’, ‘highlights’, ‘id’],
      num_rows: 287113
      })
      validation: Dataset({
      features: [‘article’, ‘highlights’, ‘id’],
      num_rows: 13368
      })
      test: Dataset({
      features: [‘article’, ‘highlights’, ‘id’],
      num_rows: 11490
      })
      })

最后分析一下我整理datasets加载方法的初衷:笔者在服务器上复现代码时,便出现了

dataset = load_dataset("cnn_dailymail", "3.0.0")

然而学校的服务器因某种原因,不能在代码中远程访问huggingface,因而整个程序便会卡在这行代码。

为了顺利将实验进行下去,笔者不得不先将自己的本地电脑执行此代码,获得cnn_dailymail的本地文件。而后将文件传输至服务器,再在服务器上通过load_dataset()本地加载的方式顺利执行了下去。

arrow_dir_cnndm = './data/cnn_dailymail/3.0.0'
dataset = load_dataset(path=arrow_dir_cnndm, data_files=
                       {'train': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-train.arrow'), 
                        'validation': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-validation.arrow'), 
                        'test': os.path.join(arrow_dir_cnndm, 'cnn_dailymail-test.arrow')})

修改后的代码与原代码得到的dataset效果一模一样!最终得以过了这一关。

笔者非常喜欢huggingface提供的transformer库datasets库,最主要的原因便在于,它们将各式各样的模型和数据,在格式上和加载方式上实现了规范统一,我只需要记住几行模板,而后便能轻松加载各类模型和数据,不会将大把时间浪费在查看浩如烟海的API或者接口文档上。非常感谢huggingface提供的便利!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值