工作中,总是要使用各种中文数据集,每次使用数据集都要花费不少的时间进行寻找,写预处理代码,结合不同的模型和框架做出相应的处理。有的时候好不容易找到合适的数据集,但是却因为网络问题,无法下载,下载了很长一段时间,突然弹出 timeout。

既浪费时间,也浪费精力。

所以,就决定自己造个轮子,搞定这个问题。

考虑到这个包要能有很好的多框架兼容性,并且还要有很好的性能和源码的架构。找来找去,最终找到了 Huggingface 的 Datasets 库,这个包有着非常好的框架兼容性,性能和源码架构,是一个非常好的解决方案。但是!它依然存在一个问题,由于它采用的存储后端是国外的 AWS S3 和 github 的 LFS,必然的,导致了它的网络非常的不稳定,经常的出各种网络问题。

既然找到了问题,那么也就操刀解决掉它。于是,就有了 datasetstore,把原有的国外存储后端进行了替换,使用国内的存储,并且也针对一些中文数据集的特有情况,做了一些处理,方便我们使用各种各种各样的数据集。

接下来,让我们看看如何快速的使用 datasetstore

快速开始

pip install datasetstore

一条命令,安装好所有的依赖,就可以直接使用了。

使用方法

from datasetstore import load_dataset, list_datasets

# 打印支持的数据集
print(list_datasets()) # 加载数据及并打印并第一个样本
hotel_review = load_dataset('hotel-review')
print(hotel_review['train'][0]) # 处理数据集 - 给每个样本增加一个文本长度的特征
hotel_review = hotel_review.map(lambda x: {"length": len(x["text"])}) # 结合 transformers 库,快速使用各种模型处理任务
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('bert-base-cased') tokenized_dataset = hotel_review.map(lambda x: tokenizer(x['text']), batched=True)

数据加载

在使用 load_dataset() 接口的时候,datasetstore 会从云端下载所需要的数据集,目前支持的数据集在这里。下载截图如下:

也可以调用 list_datasets() 来查看所有已经支持的数据集。

如果有你想用的数据集是不支持的,你可以联系作者(也就是我) zhangchunyang_pri@126.com,包含数据集附件和数据集的使用方法,我来上传上去。后续也会开放接口,让大家自己上传数据集,目前这个功能先在测试中。

数据集的使用

数据集的使用也非常的简单,下面我对一些常用的方法做些介绍,更多的可以参考 HuggingFace Datasets 文档来查看更多细节的使用方法。那如果你觉得看起来费劲,也可以留言给我,我后面会写一些使用的方法。如果觉得原始包有些地方不符合我们的使用习惯,也可以留言给我,我会在后续的迭代中,更新到 datasetstore 中。

# 通过索引获取样本
dataset[0] # 通过特证明获取特征
dataset["text"] # 使用数据集切片功能
dataset[:3] # 数据集排序
dataset.sort("label") # 数据集打乱
shuffled_dataset = sorted_dataset.shuffle(seed=42) # 数据集的选择
small_dataset = dataset.select([0, 10, 20, 30, 40, 50]) # 数据集的筛选
start_with_ar = dataset.filter(lambda example: example["sentence1"].startswith("Ar"))
len(start_with_ar) # 数据集切分
dataset.train_test_split(test_size=0.1) # 数据集切片
datasets = load_dataset("imdb", split="train")
dataset.shard(num_shards=4, index=0) # 数据集重命名特征
dataset = dataset.rename_column("text", "sentenceA") # 数据集特征移除
dataset.remove_columns("label") # 数据集 map
def add_prefix(example):
example["sentence1"] = 'My sentence: '' + example["sentence1"]
return example updated_dataset = small_dataset.map(add_prefix) # 多进程处理
updated_dataset = dataset.map(lambda example, idx: {"sentence2": f"{idx}: " + example["sentence2"]}, num_proc=4)

还有更多的用途和功能以后再写,欢迎使用,提出你的建议,如果你也能加入进来就更好了。

觉得有用,请给我一个 star,这是对我最大的支持。

https://github.com/CYang828/datasetstore

一个包搞定中文数据集: datasetstore的更多相关文章

  1. 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定

    1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...

  2. Jquery一个slideToggle搞定div的隐藏与显示

    Jquery一个slideToggle搞定div的隐藏与显示 <!DOCTYPE html> <html> <head> <script src=" ...

  3. 一个命令搞定 Web 国际化

    背景 随着出海的业务越来越多,web 应用面临越来越多的国际化的工作.如何高效,高质量的完成 Web 前端国际化工作,已经是摆在 web 前端同学的急需解决的问题. i18n-helper-cli 是 ...

  4. 如何让两个div在同一行显示?一个float搞定

    最近在学习div和css,遇到了一些问题也解决了很多以前以为很难搞定的问题.比如:如何让两个div显示在同一行呢?(不是用table表格,table对SE不太友好)其实,<div> 是一个 ...

  5. iOS之下拉放大,上推缩小,一个方法搞定

    先来看看效果吧. 讲讲大概的实现思路:1、创建头部的视图和tableview,需要注意的是tableview要设置contentInset,contentInsent 的顶部要和头部视图的背景图的高度 ...

  6. 收不到Win10正式版预订通知?一个批处理搞定

    目前,已经有不少Win7.Win8.1用户在系统右下角收到Win10正式版的预订提示窗口.点击接受预订后,系统会将Win10正式版所需的安装文件提前下载好,7月29日正式发布的时候,就可以第一时间升级 ...

  7. 一个类搞定UIScrollView那些事

    前言 UIScrollView可以说是我们在日常编程中使用频率最多.扩展性最好的一个类,根据不同的需求和设计,我们都能玩出花来,当然有一些需求是大部分应用通用的,今天就聊一下以下需求,在一个categ ...

  8. H5 拖拽,一个函数搞定,直接指定对象设置可拖拽

    页面上,弹个小窗体,想让它可以拖拽,又不想 加载一堆js,就简单的能让他可以拖动? 嗯,下面有这样一个函数,调用下就好了! 1. 先来说说 H5的 拖拽 在 HTML5 中,拖放是标准的一部分,任何元 ...

  9. 一个类搞定UIScrollView那些事儿

    前言 UIScrollView可以说是我们在日常编程中使用频率最多.扩展性最好的一个类,根据不同的需求和设计,我们都能玩出花来,当然有一些需求是大部分应用通用的,今天就聊一下以下需求,在一个categ ...

随机推荐

  1. 机械硬盘和ssd固态硬盘的原理对比分析

    固态硬盘和机械硬盘的区别 机械硬盘 磁头是不是直接和盘片接触的呢 磁盘中有几个盘片 机械硬盘的工作原理 固态硬盘的寻址方式 SMR叠瓦式真的比PMR优秀吗 固态硬盘 主控芯片 闪存颗粒 缓存单元 固态 ...

  2. java基础知识点梳理

    前言 在别人追问我以下几个问题,自己在问题回答上不够全面和准确,对此自己把专门针对这几个问题进行总结! java相关问题 1.Java中构造方法跟普通方法的区别? 构造方法与普通方法的调用时机不同. ...

  3. 零基础学Python:元组(Tuple)详细教程

    Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可https://jq.qq.com/?_wv=1 ...

  4. C#生成putty格式的ppk文件(支持passphrase)

    背景 2022国家级护网行动即将开启,根据阿里云给出的安全建议,需要将登陆Linux的方式改为密钥对方式.我这里使用的远程工具是自己开发的,能够同时管理Windows和Linux,但是以前不支持密钥对 ...

  5. java中的变量及命名

    变量 变量顾名思义就是可以变化的量 因为java是强类型语言,所以每个变量都必须声明其类型 java变量是最基本的存储单元,要素包括变量名称,变量类型和作用域. 目录 变量 1.常用的变量创建 2.变 ...

  6. CVPR 2017:See the Forest for the Trees: Joint Spatial and Temporal Recurrent Neural Networks for Video-based Person Re-identification

    [1] Z. Zhou, Y. Huang, W. Wang, L. Wang, T. Tan, Ieee, See the Forest for the Trees: Joint Spatial a ...

  7. 《A Neural Algorithm of Artistic Style》理解

    在美术中,特别是绘画,人类掌握了通过在图像的内容和风格间建立复杂的相互作用从而创造独特的视觉体验的技巧.到目前为止,这个过程的算法基础是未知的,也没有现存的人工系统拥有这样的能力.然而在视觉感知的其他 ...

  8. 记一次 .NET 某新能源系统 线程疯涨 分析

    一:背景 1. 讲故事 前段时间收到一个朋友的求助,说他的程序线程数疯涨,寻求如何解决. 等我分析完之后,我觉得这个问题很有代表性,所以拿出来和大家分享下,还是上老工具 WinDbg. 二: WinD ...

  9. Lambda表达式的无参数无返回值的练习和Lambda表达式有参数有返回值的练习

    使用Lambda(无参无返回) 说明:给定一个厨师(Cook)接口,内含唯一的抽象方法makeFood,且无参数.无返回值.如下: public interface Cook{ public abst ...

  10. 要想不踩SaaS那些坑,得先了解“SaaS架构”

    摘要:围绕当下许多企业青睐的SaaS应用开发,华为云开发者技术服务工程师程泽在DTT首期带来主题为 <SaaS云原生应用典型架构> 的DTT首期直播分享. 本文分享自华为云社区<DT ...