Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在NLP项目中使用Hugging Face的Datasets 库

在NLP项目中使用Hugging Face的Datasets 库

作者头像
deephub
发布于 2021-07-01 03:05:06
发布于 2021-07-01 03:05:06
3.1K00
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:0
代码可运行

数据科学是关于数据的。网络上有各种来源可以为您的数据分析机器学习项目获取数据。最受欢迎的来源之一是 Kaggle,我相信我们每个人都必须在我们的数据旅程中使用它。

最近,我遇到了一个新的来源来为我的 NLP 项目获取数据,我很想谈谈它。这是 Hugging Face 的数据集库,一个快速高效的库,可以轻松共享和加载数据集和评估指标。因此,如果您从事自然语言理解 (NLP) 工作并希望为下一个项目提供数据,那么 Hugging Face 就是您的最佳选择。?

本文的动机:Hugging Face 提供的数据集格式与我们的 Pandas dataframe不同,所以最初使用 Hugging Face 数据集可能看起来令人生畏?。但是 Hugging Face 有很好的文档,虽然信息量很大。? 这篇文章绝不是详尽无遗的,如果你想对你的数据集做更多的事情,我强烈建议你查看他们的文档。

让我们先了解一下 Hugging Face 和数据集库,然后通过一个例子来了解如何使用这个库中的数据集。?

Hugging Face ? 是自然语言处理 (NLP) 技术的开源提供商。您可以使用最先进的Hugging Face 模型(在 Transformers 库下)来构建和训练您自己的模型。您可以使用拥抱人脸数据集库来共享和加载数据集。您甚至可以将此库用于评估指标。

数据集库

根据 Hugging Face 网站,Datasets 库目前拥有 100 多个公共数据集。? 数据集不仅有英语,还有其他语言和方言。? 它支持大多数这些数据集的数据加载器,并且只需一行代码就可以实现,这使得加载数据成为一项轻松的任务。?? 根据网站上提供的信息,除了可以轻松访问数据集之外,该库还有以下有趣的功能:

  • 在大型数据集的发展使得数据集自然地将用户从 RAM 限制中解放出来,所有数据集都使用高效的零序列化成本后端 (Apache Arrow) 进行内存映射
  • 智能缓存:永远不要将数据处理多次。
  • 轻量级和快速的透明和 pythonic API(多处理/缓存/内存映射)。
  • 与 NumPy、pandas、PyTorch、Tensorflow 2 和 JAX 的内置互操作性。

哇!这是相当多的好处。?

在本文中,我将展示我们通常在数据科学或分析任务中执行的一些步骤,以了解我们的数据或将我们的数据转换为所需的格式。所以,让我们快速深入这个库并编写一些简单的 Python 代码。? 请注意,本文仅涵盖数据集而非指标。

数据集版本:1.7.0

使用pip安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 !pip install datasets

导入包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 from datasets import list_datasets, load_dataset
 from pprint import pprint

从数据集库中,我们可以导入list_datasets来查看这个库中可用的数据集列表。打印模块提供了“漂亮打印”的功能。

截至2021年6月7日,数据集库有928个数据集。我们可以使用以下代码看到可用的数据集列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 datasets = list_datasets()
 print("Number of datasets in the Datasets library: ", len(datasets), "\n\n")
 
 #list of datasets in pretty-print format
 pprint(datasets, compact=True)

如果在下载数据集之前就想知道它的属性,该怎么办呢?我们可以使用一行代码来实现这一点。☝️只需将索引设置为数据集的名称,就可以了!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #dataset attributes 
 squad = list_datasets(with_details=True)[datasets.index('squad')]
 
 #calling the python dataclass
 pprint(squad.__dict__)

加载数据集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 squad_dataset = load_dataset('squad')

这句代码下面发生了什么??datasets.load_dataset()执行了以下操作:

  1. 从hugs Face GitHub repo或AWS桶中下载并导入SQuAD python处理脚本(如果它还没有存储在库中)。
  2. 运行SQuAD脚本下载数据集。处理和缓存的SQuAD在一个Arrow 表。
  3. 基于用户要求的分割返回一个数据集。默认情况下,它返回整个数据集。

让我们理解一下我们得到的数据集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print(squad_dataset)

数据集分为两部分:训练和验证。feature对象包含关于列的信息——列名和数据类型。我们还可以看到每次拆分的行数(num_rows)。很丰富!

我们也可以在加载数据集时指定分割。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 squad_train = load_dataset('squad', split='train')
 squad_valid = load_dataset('squad', split='validation')

这会将训练集保存在squad_train中,验证集保存在squad_valid中。

但是,您会意识到加载一些数据集会抛出一个错误,在检查错误时,可能得到需要第二个参数配置的错误。

下面是一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 amazon_us_reviews = load_dataset('amazon_us_reviews')

一些数据集包含几个配置,这些配置定义了需要被选择的数据集的子部分。

解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 amazon_us_reviews = load_dataset('amazon_us_reviews', 'Watches_v1_00')

这将使用配置加载amazon_us_reviews数据集。

让我们来看看我们的数据集。??

我们看到了数据集信息中的行数。我们甚至可以用标准的len函数得到它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print("Length of training set: ", len(squad_train))

训练集长度:87599

检查数据集

要查看数据集的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print("First example from the dataset: \n")
 pprint(squad_train[0])

要获得带有几个示例的切片,代码与我们使用的pandas dataframe相同。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print("Two examples from the dataset using slice operation: \n")
 pprint(squad_train[14:16])

想在列中看到值?用列名索引数据集。下面是“question”栏目的一部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print("A column slice from the dataset: \n")
 pprint(squad_train['question'][:5])

可以看到,行切片给出了一个字典,而列切片给出了一个列表。getitem方法根据查询的类型返回不同的格式。例如,数据集[0]之类的条目将返回一个元素字典,数据集[2:5]之类的切片将返回一个元素列表字典,而数据集[' question ']之类的列或列的slice将返回一个元素列表。这起初看起来很令人惊讶,但hug Face做到了这一点,因为它实际上更容易用于数据处理,而不是为每个视图返回相同的格式。

请看这个有趣的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print(squad_train[‘question’][0])
 print(squad_train[0][‘question’])

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?
 To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?

两者都返回相同的输出。让我们验证!?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print(squad_train['question'][0] == squad_train[0]['question'])

输出为True。好了!我们在使用pandas dataframe时经常犯的一个错误,但是在这里却不是!

注意:数据集由一个或几个Apache Arrow表支持,这些表是类型化的,允许快速检索和访问。您可以加载任意大小的数据集,而不必担心内存限制,因为数据集在RAM中不占用空间,并且在需要时直接从驱动器读取。

让我们进一步检查数据集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print("Features: ")
 pprint(squad_train.features)print("Column names: ", squad_train.column_names)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 print("Number of rows: ", squad_train.num_rows)
 print("Number of columns: ", squad_train.num_columns)
 print("Shape: ", squad_train.shape)

输出:

  • 行数:87599
  • 列数:5
  • 形状:(87599 5)

注意,您也可以使用len函数获得行数。

数据集操作

添加/删除一个新列

添加一个名为“new_column”的列,条目为“foo”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 new_column = ["foo"] * len(squad_train)
 squad_train = squad_train.add_column("new_column", new_column)
 print(squad_train)

现在让我们删除这一列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 squad_train = squad_train.remove_columns("new_column")

重命名一个列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 squad_train = squad_train.rename_column("title", "heading")
 print(squad_train)

修改/更新数据集

要修改或更新数据集,可以使用dataset.map。map()是一个强大的方法,灵感来自于tf.data.Dataset map方法。我们可以将这个函数应用于一个例子,甚至一批例子,甚至生成新的行或列。

通过示例修改示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 updated_squad_train = squad_train.map(lambda example: {'question': 'Question: ' + example['question']})
 pprint(updated_squad_train['question'][:5])

输出

让我们使用现有列添加新列并删除旧列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 updated_squad_train = squad_train.map(lambda example: {'new_heading': "Context: " + example['heading']}, remove_columns=['heading'])
 pprint(updated_squad_train.column_names)
 pprint(updated_squad_train['new_heading'][:5])

输出

列 " new_heading "已经使用列 " heading "的内容进行了填充,列" heading "已经从数据集中移除

您可以使用映射对数据集执行多个操作。根据你的需求尝试新事物。?

除此之外,您还可以批量处理数据。

我们总是希望我们的数据集是一个格式良好的表格,就像我们看到一个pandas dataframe一样。我们可以将数据集转换为相同的格式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 import random
 import pandas as pd
 from IPython.display import display, HTMLdef display_random_examples(dataset=squad_train, num_examples=5):
     assert num_examples < len(dataset)
     
     random_picks = []
     for i in range(num_examples):
         random_pick = random.randint(0,len(dataset)-1)
         random_picks.append(random_pick)
     
     df = pd.DataFrame(dataset[random_picks])
     display(HTML(df.to_html()))
         
 display_random_examples(squad_train, 3)

输出是一个格式很好的表格。?

这就是本文的全部内容。从这里开始,您可以根据项目需求对数据进行预处理,并构建模型或创建良好的可视化效果。不可能在一篇文章中涵盖所有内容。然而,通过阅读本文,您可以了解如何使用数据集库中的可用方法。如果需要对数据集做更多操作,请查看文档。还有很多很多的方法,比如排序,洗牌,分片,选择,过滤,连接数据集等等。您还可以为PyTorch、Tensorflow、Numpy和Pandas格式化数据集。

如果你想看代码,请参考这个链接到我的Github : https://github.com/chetnakhanna16/huggingface_datasets/blob/main/HuggingFace_Datatsets_Library_TDS.ipynb

作者:Chetna Khanna

原文地址:https://towardsdatascience.com/use-the-datasets-library-of-hugging-face-in-your-next-nlp-project-94e300cca850

deephub翻译组

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
中小企业网页设计,轻松拓展网络市场
网络时代,无论是资金雄厚的大型企业,还是各方面资源相对匮乏的中小企业,在线网站的设计和搭建,对于挖掘和开拓市场,创造更多商机,树立深入人心的企业品牌形象,都发挥着至关重要的作用。
奔跑的小鹿
2019/01/24
1.2K0
中小企业网页设计,轻松拓展网络市场
2018最佳网页设计:就是要你灵感爆棚!!!
2018已然过半,网页设计涌现了一些新的设计趋势,例如破碎网格设计,动态或不规则文字排版设计,流体特效应用等。也同时延续着2017和2016,甚至更早的网页设计趋势,例如简约风设计,扁平化设计,响应式设计,视觉滚动差设计,单页以及全屏视频背景设计等等。
奔跑的小鹿
2019/01/24
1.8K0
2018最佳网页设计:就是要你灵感爆棚!!!
2018年不可错过的创意404报错设计
404报错页面,作为提醒网站访问者服务器未找到请求资源或文件的页面,时常被UI/UX设计师,产品经理以及网页/软件开发者视作 (包括枯燥的登录页面,加载页面以及引导页面在内) 导致网站/软件用户流失或跳出的重要元凶。然而,但这并不意味着404页面在任何情况下,对于他们来说都是不能提及的噩梦。
用户1372273
2018/03/20
2.2K7
2018年不可错过的创意404报错设计
如何设计一款赏心悦目的后台系统界面?
相信大部分人看到这个标题时,第一反应都是这样。因为在我们的认知里,后台系统主要是自己人看的,因此界面只需要功能齐全好用就行了,并不需要那么好看。但是随着技术的发展,以及大众审美的普遍提升,用户对于后台系统也有了更高的要求。
奔跑的小鹿
2020/02/25
1.5K0
如何设计一款赏心悦目的后台系统界面?
30个最优CSS动画案例分享,轻松让网页用户随心而“动”
CSS或CSS3动画,包括常见的鼠标悬停动画,网页加载动画,页面切换动画,文本动画以及背景动画等等,能够有效地提升网页趣味性和视觉吸引力。这也是为什么CSS/CSS3动画设计能够迅速蹿升为网页设计一大流行趋势的重要原因。
奔跑的小鹿
2020/01/13
47.9K0
30个最优CSS动画案例分享,轻松让网页用户随心而“动”
【新手指南】App原型设计:如何快速实现这6种交互效果?
做App原型设计,那么页面切换、进度条、页面滚动、图片轮播,下拉菜单,搜索框这些交互效果必不可少。如何简单快速地实现这些效果呢?以下小编根据经验为大家提供了一些简单的设计方法,以供参考。
奔跑的小鹿
2019/01/24
3.3K0
用户体验要好,App动画得这么做
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具。  
奔跑的小鹿
2019/01/24
8990
用户体验要好,App动画得这么做
创意网页排版设计和教程分享,打造 “视”不可挡的网页设计
网页中超过95%以上的信息都是通过文字的形式呈现。 然而,页面文字并非毫无章法的随意呈现。事实上,更具可读性、视觉效果以及独特排版和布局的网页文本设计,更能吸引用户,提升用户愉悦度。这也是为什么越来越多的设计师日益重视网页排版设计的重要原因。
奔跑的小鹿
2019/01/24
1.9K0
创意网页排版设计和教程分享,打造 “视”不可挡的网页设计
24个最新创意进度条设计,分分钟让你灵感爆表!!!
现今,Web或App 软件设计中,除却常见的加载动画,另一种时常出现在加载、下载,导航以及播放等页面中的组件设计——进度条设计。也能够有效地可视化等待,及时给予用户反馈和提示,缓解用户负面情绪,提升用户体验的同时,降低跳出率。
奔跑的小鹿
2019/01/24
3.3K0
24个最新创意进度条设计,分分钟让你灵感爆表!!!
App项目实战之路(三):原型篇
本来,我是没打算写原型篇的,但考虑到关注我的人中也有部分产品狗,更重要的是,我一直认为,不懂产品设计的程序猿不是优秀的产品经理。而且,应该也有不少程序猿想往产品经理的方向发展的。所以,最后决定献丑了。
Keegan小钢
2018/08/10
1.8K0
App项目实战之路(三):原型篇
移动端APP设计趋势
移动端APP在2017年经历了诸多的变化, 人工智能、聊天式的界面、响应式设计、虚拟现实(VR)和增强现实(AR)让设计师不断面临新的挑战。研究表明,用户每天耗费在手机和平板上的平均时长为158分钟,其中127分钟是耗费在各类APP中,可以看出移动端APP的快速发展都是不争的事实,在我们不断吸收新的东西和掌握新的潮流的同时,还需要确认这些设计趋势是否被验证了。以下是2017年移动端产品最有影响力的趋势:
進无尽
2018/09/12
1.3K0
移动端APP设计趋势
管理后台原型设计分享- 政务管理系统
现如今,越来越多的团队开始注重对自动化系统的使用,ERP系统(企业资源计划系统)应运而生。ERP系统是针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的管理软件。ERP系统具有以下优势:
奔跑的小鹿
2020/03/25
2.2K0
管理后台原型设计分享- 政务管理系统
灵感分享|10个优秀网站设计实例赏析及原型分享
网页设计师们经常会浏览高质量的网页设计作品分享网站,来解决灵感枯竭的问题。因为在这些优秀的网站设计实例中可以看到某些趋势,诸如:扁平化设计、视差滚动、响应式设计、流行配色设计等等。今天小摹为大家带来10个优秀网站设计实例,希望能为网页设计师们带来好的灵感。
奔跑的小鹿
2020/01/13
8.9K0
灵感分享|10个优秀网站设计实例赏析及原型分享
2019年网页设计趋势前瞻,先睹为快!
追随最新的网页设计趋势,紧跟设计潮流是设计师们必做的功课之一。快速更迭的网页设计趋势和网页开发技术对2019年的网页设计趋势来说必将产生直接的影响。
奔跑的小鹿
2019/01/24
8770
2019年网页设计趋势前瞻,先睹为快!
4款APP原型设计工具助你搞定移动应用设计!
随着信息化社会的不断发展,不仅手机迭代更新的速度飞快,就连手机里的App 也层出不穷。作为一名UI/UX设计师或产品经理,如何才能设计一款出色的移动App?光有好的创意是不够的,你还需要一款正确的Ap
奔跑的小鹿
2018/06/11
5.5K0
UI设计师必备的五款界面设计工具
在前几篇文章中,我们分享了一些最受欢迎的原型设计工具,今天我们来谈谈界面设计工具。工具的重要性对于设计师来讲不言而喻。任何想法都需要借助工具来实现。想要成为一名出色的UI设计师,你需要多掌握一些技能,才能增强自身竞争力。同时也给那些想转行做UI设计师的朋友一些工具建议,接下来我们就来盘点一下那些UI设计师需要掌握的界面设计工具。
奔跑的小鹿
2018/08/07
3.6K0
UI设计师必备的五款界面设计工具
让你不再恋家的9款小众时尚的酒店网站设计
一场说走就走的旅行少不了一家精挑细选的酒店。出门在外,没有一个舒适的住处,恐怕旅行的记忆也并不是那么美好。大牌酒店住不起,小众酒店性价比高,但哪家最合适?网上攻略必不可少。 作为主观性非常强的视觉性动物,选择酒店的时候除了看价格,当然也会更看重酒店的网页设计风格。如果酒店的网站设计都乱糟糟,那酒店自身可想而知。作为提升酒店形象的门户,酒店网站设计一定不能马虎。 如何设计具有现代感的酒店网站?个人分析可以从以下几点要素出发: 1. 响应式设计:网站必须支持跨设备浏览。 2. 卓越的用户体验:简化的网站浏览流程
奔跑的小鹿
2018/03/30
1.1K0
让你不再恋家的9款小众时尚的酒店网站设计
纸上原型设计 VS 桌面原型工具设计,你更喜欢谁?
纸上原型设计,作为传统的原型设计方式,简单快速,成本低廉,为大部分设计师所喜爱。而桌面原型工具设计,作为伴随电脑科技发展而出现的原型设计方式,快速全面,高效保真,动效灵敏,专业优质,一经推出,就备受青睐,迅速在设计师群体之中普及。但作为网页或移动端应用UX/UI设计的你,更喜欢或更愿意使用他们中的哪一种来完成你的UX/UI设计呢?为方便大家选择,这里分别为设计师朋友们介绍两种原型设计方式的优缺点,希望对大家有所帮助:
用户1372273
2018/02/26
1.6K0
纸上原型设计 VS 桌面原型工具设计,你更喜欢谁?
【技巧和案例分享】引导页如何设计,才能把用户顺利“引进门”?
现在社会,同类产品竞争越演越烈。用户对产品的第一映像往往决定了一切。而用户的第一印象又起始于引导页。也就是说,引导页的好坏,很大程度上直接影响用户是否最终使用或购买产品。所以,如若设计师能够一开始就添加引人入胜的引导页设计,产品吸引和说服用户使用和购买的机率就会更大。
奔跑的小鹿
2020/03/16
7790
【技巧和案例分享】引导页如何设计,才能把用户顺利“引进门”?
让你不再恋家的9款小众时尚的酒店网站设计
一场说走就走的旅行少不了一家精挑细选的酒店。出门在外,没有一个舒适的住处,恐怕旅行的记忆也并不是那么美好。大牌酒店住不起,小众酒店性价比高,但哪家最合适?网上攻略必不可少。
奔跑的小鹿
2018/03/19
2.7K5
让你不再恋家的9款小众时尚的酒店网站设计
推荐阅读
相关推荐
中小企业网页设计,轻松拓展网络市场
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验