【问题标题】:Implement custom Huggingface dataset with data downloaded from s3使用从 s3 下载的数据实现自定义 Huggingface 数据集
【发布时间】:2022-10-19 00:31:26
【问题描述】:

为了实现自定义 Huggingface 数据集,我需要实现三种方法:

from datasets import DatasetBuilder, DownloadManager

class MyDataset(DatasetBuilder):
    def _info(self):
        ...

    def _split_generator(self, dl_manager: DownloadManager):
        '''
        Method in charge of downloading (or retrieving locally
        the data files), organizing them according to the splits
        and defining specific arguments for the generation process
        if needed.
        '''
        ...

    def _generate_examples():
        ...

现在,在_split_generator 方法中,我需要从 S3 下载一个 CSV 文件(一个私有存储桶,需要密钥才能访问它)。下载后,该文件将被进一步处理。

不知道有没有办法使用参数dl_manager来下载呢?我想我可以使用其他一些方法/外部库下载该文件,但我想知道是否可以使用 Huggingface 的 datasets 对象和功能来完成它。

this repo 中,您可以看到许多自定义数据集的示例。例如,用于构建的数据亚马逊美国评论https://s3.amazonaws.com/amazon-reviews-pds/tsv/amazon_reviews_us_" + name + ".tsv.gz" 下载(如您所见here)。虽然这是一个公共链接,但每个人都可以访问它。相反,我想使用Downloadmanager 对象从 S3 下载我的私人数据。

【问题讨论】:

    标签: python amazon-s3 huggingface-datasets


    【解决方案1】:

    datasets 提供了一些从 S3(和其他云提供商)下载东西的类:https://huggingface.co/docs/datasets/v2.4.0/en/filesystems

    因此,您可以执行以下操作:

    def _split_generators(self, dl_manager):
        s3 = datasets.filesystems.S3FileSystem()
    
        _, f = os.path.split(MY_S3_URI)
        s3.get(MY_S3_URI, os.path.join(CACHE_DIR, f))
    
        return [
            datasets.SplitGenerator(name=datasets.Split.ALL, gen_kwargs={"filepath": os.path.join(CACHE_DIR, f)}),
        ]
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,发现 DownloadManager 有一个 download_custom 方法就是为了这个。

      https://huggingface.co/docs/datasets/package_reference/builder_classes#datasets.DownloadManager.download_custom

      从他们的例子:

      downloaded_files = dl_manager.download_custom(
          's3://my-bucket/data.zip',
          custom_download_for_my_private_bucket
      )
      

      请注意,您可以将其与 extract 结合使用,以通过自定义下载功能获得 download_and_extract 的类似行为。

      extracted_path = dl_manager.extract(
          dl_manager.download_custom(
              's3://my-bucket/data.zip', 
              custom_download_for_my_private_bucket
          )
      )
      
      

      【讨论】:

        猜你喜欢
        • 2021-11-07
        • 2019-01-03
        • 2021-09-30
        • 2022-08-15
        • 2022-10-22
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        • 2022-07-18
        相关资源
        最近更新 更多