前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >5分钟 NLP :Hugging Face 主要类和函数介绍 🤗

5分钟 NLP :Hugging Face 主要类和函数介绍 🤗

作者头像
数据派THU
发布于 2022-03-14 04:42:37
发布于 2022-03-14 04:42:37
4.3K00
代码可运行
举报
文章被收录于专栏:数据派THU数据派THU
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
来源:Deephub Imba本文约2200字,建议阅读9分钟本文包含其主要类和函数的概述以及一些代码示例。可以作为该库的一个入门教程 。

主要包括Pipeline, Datasets, Metrics, and AutoClasses

HuggingFace是一个非常流行的 NLP 库。本文包含其主要类和函数的概述以及一些代码示例。可以作为该库的一个入门教程 。

Hugging Face 是一个开源库,用于构建、训练和部署最先进的 NLP 模型。Hugging Face 提供了两个主要的库,用于模型的transformers 和用于数据集的datasets 。可以直接使用 pip 安装它们。

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

Pipeline

使用transformers库中的Pipeline是开始试验的最快和最简单的方法:通过向Pipeline对象提供任务名称,然后从 Hugging Face 模型存储库中自动下载合适的模型,然后就可以使用了!

transformers库中已经提供了以下的几个任务,例如:

  • 文本分类
  • 问答
  • 翻译
  • 文本摘要
  • 文本生成

除此以外还有计算机视觉和音频任务(主要也是基于transformer的)

下面是一个情绪分析任务的例子。为了预测句子的情绪,只需将句子传递给模型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from transformers import pipeline

classifier = pipeline("sentiment-analysis")

results = classifier("I'm so happy today!")
print(f"{results[0]['label']} with score {results[0]['score']}")
# POSITIVE with score 0.9998742341995239

模型的输出是一个字典列表,其中每个字典都有一个标签(对于这个特定示例,值为“POSITIVE”或“NEGATIVE”)和一个分数(即预测标签的分数)。

可以为分类器提供多个句子,并在一个函数调用中获得所有结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
results = classifier(["I'm so happy today!", "I hope you don't hate him..."])
for result in results:
  print(f"{result['label']} with score {result['score']}")
# POSITIVE with score 0.9998742341995239
# NEGATIVE with score 0.6760789155960083

也可以通过设置模型名称的参数指定要使用的模型,所有的模型和关于模型的信息都在官方文档中提供了,例如下面代码使用的是twitter-roberta-base-sentiment

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
classifier = pipeline("sentiment-analysis",
                    model="cardiffnlp/twitter-roberta-base-sentiment",
                    tokenizer="cardiffnlp/twitter-roberta-base-sentiment")
# three possible outputs:
# LABEL_0 -> negative
# LABEL_1 -> neutral
# LABEL_2 -> positive

results = classifier(["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."])
for result in results:
  print(f"{result['label']} with score {result['score']}")
# LABEL_2 with score 0.9814898371696472
# LABEL_1 with score 0.5063014030456543

Dataset

Dataset库可以轻松下载 NLP 中使用的一些最常见的基准数据集。

例如需要加载Stanford Sentiment Treebank(SST2,。它的目标是二元(正面和负面)分类,只有句子级别的标签。可以直接使用 load_dataset 函数加载数据集。

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

dataset = datasets.load_dataset("glue", "sst2")

print(dataset)
DatasetDict({
  train: Dataset({
      features: ['sentence', 'label', 'idx'],
      num_rows: 67349
  })
  validation: Dataset({
      features: ['sentence', 'label', 'idx'],
      num_rows: 872
  })
  test: Dataset({
      features: ['sentence', 'label', 'idx'],
      num_rows: 1821
  })
})

数据集已经被分为训练集、验证集和测试集。可以使用 split 参数调用 load_dataset 函数,直接得到我们感兴趣的数据集的拆分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dataset = datasets.load_dataset("glue", "sst2", split='train')

print(dataset)
Dataset({
  features: ['sentence', 'label', 'idx'],
  num_rows: 67349
})

如果想使用 Pandas 处理数据集,可以直接使用数据集的对象创建df。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd

df = pd.DataFrame(dataset)
df.head()

使用GPU

现在已经加载了一个关于情感分析的数据集,下面开始创建一个情感分析模型。

首先测试下预测 500 个句子的情绪并测量它需要多少时间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
classifier = pipeline("sentiment-analysis")
%time results = classifier(dataset.data["sentence"].to_pylist()[:500])
# CPU times: user 21.9 s, sys: 56.9 ms, total: 22 s
# Wall time: 21.8 s

预测 500 个句子需要 21.8 秒,平均每秒 23 个句子。我们试试 GPU

为了让分类器使用 GPU,首先必须保证GPU是可用的,然后用参数device=0 。这样就可以在 支持CUDA 的GPU上运行模型,其中从零开始的每个 id 都映射到一个 CUDA 设备,值 -1 是 CPU。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
classifier = pipeline("sentiment-analysis", device=0)
%time results = classifier(dataset.data["sentence"].to_pylist()[:500])
# CPU times: user 4.07 s, sys: 49.6 ms, total: 4.12 s
# Wall time: 4.11 s

预测 500 句只用了 4.1 秒,平均每秒 122 句,速度提高了大约 6 倍!这就对了😏

指标

如果想在 SST2 数据集上测试分类器的质量怎么办?应该使用哪个指标?

在 Hugging Face 中,metrics 和 datasets 是配对在一起的。所以可以使用与 load_dataset 函数相同的参数调用 load_metric 函数。

对于 SST2 数据集,指标是准确度。可以使用以下代码直接通过metric获得指标值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
metric = datasets.load_metric("glue", "sst2")

n_samples = 500

X = dataset.data["sentence"].to_pylist()[:n_samples]
y = dataset.data["label"].to_pylist()[:n_samples]

results = classifier(X)
predictions = [0 if res["label"] == "NEGATIVE" else 1 for res in results]

print(metric.compute(predictions=predictions, references=y))
# {'accuracy': 0.988}

AutoClasses

pipeline 在底层是由 AutoModel 和 AutoTokenizer 类来实现的。AutoClass(即像 AutoModel 和 AutoTokenizer 这样的通用类)是加载模型的快捷方式,它可以从其名称或路径中自动检索预训练模型。在使用时只需要为任务选择合适的 AutoModel 并使用 AutoTokenizer 为其关联的分词器:在这个示例中是对文本进行分类,因此正确的 AutoModel 是 AutoModelForSequenceClassification。

下面我们看看如何使用 AutoModelForSequenceClassification 和 AutoTokenizer 来实现与上面Pipeline相同的功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from transformers import AutoTokenizer, AutoModelForSequenceClassification

model_name = "nlptown/bert-base-multilingual-uncased-sentiment"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

这里使用 AutoTokenizer 创建一个分词器对象,并使用 AutoModelForSequenceClassification 创建一个模型对象。只需要传递模型的名称,剩下的事情都会自动完成。

接下来让我们看看如何使用分词器对句子进行分词。tokenizer 输出是一个字典,由 input_ids(即在输入句子中检测到的每个 token 的 id,取自 tokenizer 词汇表)、token_type_ids(用于需要两个文本进行预测的模型中,我们现在可以忽略它们)组成的字典, 和 attention_mask(显示在标记化期间发生填充的位置)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
encoding = tokenizer(["Hello!", "How are you?"], padding=True,
                    truncation=True, max_length=512, return_tensors="pt")

print(encoding)
{'input_ids': tensor([[ 101, 29155,   106,   102,     0,     0],
      [ 101, 12548, 10320, 10855,   136,   102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 0, 0],
      [1, 1, 1, 1, 1, 1]])}

然后将标记完的句子传递给模型,模型负责输出预测。这个特定的模型输出五个分数,其中每个分数是评论得分的概率,因为分数从 1 到 5。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
outputs = model(**encoding)

print(outputs)
SequenceClassifierOutput(loss=None, logits=tensor([[-0.2410, -0.9115, -0.3269, -0.0462, 1.2899],
      [-0.3575, -0.6521, -0.4409, 0.0471, 0.9552]],
      grad_fn=<AddmmBackward0>), hidden_states=None, attentions=None)

该模型在 logits 属性中输出最终结果。将 softmax 函数应用于 logits 可以获得每个标签的概率。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch import nn

pt_predictions = nn.functional.softmax(outputs.logits, dim=-1)

print(pt_predictions)
tensor([[0.1210, 0.0619, 0.1110, 0.1470, 0.5592],
      [0.1269, 0.0945, 0.1168, 0.1902, 0.4716]], grad_fn=<SoftmaxBackward0>)

在本地保存和加载模型

最后,看看如何在本地保存模型。这可以使用分词器和模型的 save_pretrained 函数来完成。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pt_save_directory = "./model"
tokenizer.save_pretrained(pt_save_directory)
model.save_pretrained(pt_save_directory)

如果要加载之前保存的模型,可以使用AutoModel 类的 from_pretrained 函数加载它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = AutoModelForSequenceClassification.from_pretrained("./model")

总结

在本文中介绍了Hugging Face 库的主要类和函数。包括transformers 的datasets库,以及如何使用Pipeline在几行代码中加载模型,并让这些代码在 CPU 或 GPU 上运行,还介绍了如何直接从库中加载基准数据集以及如何计算指标。最后还演示了如何使用最重要的两个类 AutoModel 和 AutoTokenizer和如何在本地保存和加载模型,通过以上的介绍我想已经可以使用Hugging Face库开始你的NLP之旅了。

编辑:王菁

校对:林亦霖

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

本文分享自 数据派THU 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
【干货总结】分层强化学习(HRL)全面总结
来源:https://zhuanlan.zhihu.com/p/267524544
深度强化学习实验室
2020/12/01
4.2K0
【干货总结】分层强化学习(HRL)全面总结
【前沿跟进】Google, OpenAI提出层次强化学习新思路
层次强化学习(HRL)中的自动Skill Discovery思路 文:CreateAMind陈七山 1前言:关于层次强化学习(HRL) 如何解决强化学习在反馈稀疏时的困难,一直是学界重点研究的方向。一种思路是采用层次化的思想 (Hierarchical Reinforcement Learning,简称HRL)。这并不是一个新兴的方向,20年前就有相关论文发表[1][2]。但由于始终没有达到理想的效果,所以最近各大机构如OpenAI, DeepMind, UCB都在进行这方面的研究,NIPS2017也有一个
CreateAMind
2018/07/20
1.1K0
【RL Latest Tech】分层强化学习(Hierarchical RL)
分层强化学习(Hierarchical Reinforcement Learning,HRL)是一类旨在通过引入多层次结构来提高强化学习算法效率的方法。其核心思想是将复杂的任务分解为若干子任务,通过解决这些子任务来最终完成整体目标。以下是关于分层强化学习的详细介绍:
不去幼儿园
2024/12/03
3940
【RL Latest Tech】分层强化学习(Hierarchical RL)
【Hierarchical RL】不允许你不了解分层强化学习(总结篇)
下面这张图片展示了两层结构,上层为管理者(高层策略),下层为工人(低层策略)。管理者选择子目标,表现为分支路径,工人执行动作以实现子目标,动作通过箭头指向远处的最终目标。环境表现为网格世界,管理者从上方监控进度。
不去幼儿园
2024/12/03
1.5K0
【Hierarchical RL】不允许你不了解分层强化学习(总结篇)
【Hierarchical RL】隐空间分层强化学习(HRL-LS )算法
隐空间分层强化学习,Hierarchical Reinforcement Learning with Latent Space (HRL-LS) 是一种分层强化学习(Hierarchical Reinforcement Learning, HRL)算法,旨在通过在隐空间(Latent Space)中进行策略优化,来处理高维复杂任务中的长期依赖问题。该算法提出了一种新的框架,能够同时利用分层结构和潜在变量模型,来提高在复杂环境中的学习效率。
不去幼儿园
2024/12/03
1640
【Hierarchical RL】隐空间分层强化学习(HRL-LS )算法
论文 | 解读72篇DeepMind深度强化学习论文(内有合集下载)
DeepMind,位于英国伦敦,是由人工智能程序师兼神经科学家戴密斯·哈萨比斯(Demis Hassabis)等人联合创立,是前沿的人工智能企业,其将机器学习和系统神经科学的最先进技术结合起来,建立强大的通用学习算法。最初成果主要应用于模拟、电子商务、游戏开发等商业领域。
AI研习社
2019/07/04
2.2K0
论文 | 解读72篇DeepMind深度强化学习论文(内有合集下载)
【RL Latest Tech】分层强化学习:FeUdal Networks算法
FeUdal Networks(FuN)是一种分层强化学习(Hierarchical Reinforcement Learning, HRL)算法,由Google DeepMind团队提出。该算法的灵感来源于层级控制结构,将任务分解为高层目标和低层执行细节,从而提高强化学习在复杂环境中的效率。与传统的强化学习算法不同,FeUdal Networks将学习过程分为不同的层次,每个层次的角色不同,但都为共同完成任务服务。
不去幼儿园
2024/12/03
2250
【RL Latest Tech】分层强化学习:FeUdal Networks算法
17种深度强化学习算法用Pytorch实现
深度强化学习已经在许多领域取得了瞩目的成就,并且仍是各大领域受热捧的方向之一。本文推荐一个包含了 17 种深度强化学习算法实现的 PyTorch 代码库。
代码医生工作室
2019/09/17
2.3K0
17种深度强化学习算法用Pytorch实现
【Hierarchical RL】分层演员-评论家(Hierarchical Actor-Critic )算法
分层演员-评论家,Hierarchical Actor-Critic (HAC) 算法是一种用于分层强化学习(Hierarchical Reinforcement Learning, HRL)的算法,由Levy等人在2019年提出。HAC的目的是通过分层结构,将复杂任务分解为不同的时间尺度的子任务,从而更高效地学习策略。该算法使用了两层的Actor-Critic架构来实现策略和值函数的学习,并通过子任务的分解来降低学习的难度。
不去幼儿园
2024/12/03
2850
【Hierarchical RL】分层演员-评论家(Hierarchical Actor-Critic )算法
【Hierarchical RL】离线策略修正分层强化学习(HIRO)算法
离线策略修正分层强化学习,Hierarchical Reinforcement Learning with Off-Policy Correction (HIRO) 是一种基于分层强化学习的算法,旨在解决长时间跨度和稀疏奖励问题。HIRO 特别引入了离策略(off-policy)校正机制,允许高层策略利用低层策略的经验,而不会因为低层策略的更新而产生偏差。
不去幼儿园
2024/12/03
2500
【Hierarchical RL】离线策略修正分层强化学习(HIRO)算法
【RL Latest Tech】分层强化学习:Option-Critic架构算法
分层强化学习(Hierarchical Reinforcement Learning, HRL)通过将复杂问题分解为更小的子问题,显著提高了强化学习算法在解决高维状态空间和长期目标任务中的效率。Option-Critic架构是分层强化学习中一种非常有影响力的方法,专门用于自动发现和优化子策略(称为“Option”)。它是在经典的Options框架基础上提出的,用来处理分层决策问题,特别是可以在没有明确的子目标定义的情况下自动学习子策略。
不去幼儿园
2024/12/03
3211
【RL Latest Tech】分层强化学习:Option-Critic架构算法
【干货】ICML2018:63篇强化学习论文精华解读!
【新智元导读】机器学习顶会ICML 2018从2473份提交论文中接收了621篇,其中有63余篇强化学习相关论文,作者将这些论文分成了多个类别,并对每篇文章的核心贡献做了精炼的总结,这些文章也是追踪强化学习最前沿技术的绝佳材料,精炼的总结也也便于我们快速查找与自己研究相关的文章。
新智元
2018/08/01
1.1K0
【干货】ICML2018:63篇强化学习论文精华解读!
DIVERSITY IS ALL YOU NEED: 充满睿智的论述
互信息从state action 到 state skill;action到skill就是提升一级抽象
CreateAMind
2019/07/22
6110
DIVERSITY IS ALL YOU NEED: 充满睿智的论述
17种深度强化学习算法用Pytorch实现
深度强化学习已经在许多领域取得了瞩目的成就,并且仍是各大领域受热捧的方向之一。本文推荐一个包含了 17 种深度强化学习算法实现的 PyTorch 代码库。
新智元
2019/09/17
1.9K0
17种深度强化学习算法用Pytorch实现
深入机器学习系列之强化学习
强化学习(reinforcement learning),又称再励学习,评价学习,是一种重要的机器学习方法,在智能控制机器人及分析预测等领域有许多应用。本文将介绍强化学习的相关概念、算法及其应用实例。
数据猿
2019/07/31
1.2K0
深入机器学习系列之强化学习
【Hierarchical RL】动态分层强化学习(DHRL)算法
动态分层强化学习,Dynamic Hierarchical Reinforcement Learning (DHRL) 是一种自适应分层强化学习算法,其目标是根据任务和环境的复杂性动态地构建、修改和利用分层策略。DHRL 不仅仅是预定义层次结构的简单执行,而是允许代理在学习过程中根据需要动态生成和调整分层策略,从而实现更好的任务分解和高效学习。
不去幼儿园
2024/12/03
2220
【Hierarchical RL】动态分层强化学习(DHRL)算法
强化学习如何使用内在动机?
「内在动机」 (Intrinsic Motivation) 这一概念最初是在心理学中提出并发展起来的。由于其在制造开放式学习机器和机器人方面的潜力,这一概念正日益受到认知科学的关注。
机器之心
2020/05/26
8190
强化学习如何使用内在动机?
博客 | 过去10年NIPS顶会强化学习论文(100多篇)汇总(2008-2018年)
本文原载于微信公众号:深度强化学习算法 ,AI研习社经授权转载。欢迎关注 深度学习强化算法 微信公众号、及 AI研习社博客专栏。
AI研习社
2019/05/22
1.4K0
博客 | 过去10年NIPS顶会强化学习论文(100多篇)汇总(2008-2018年)
一文了解强化学习
虽然是周末,也保持充电,今天来看看强化学习,不过不是要用它来玩游戏,而是觉得它在制造业,库存,电商,广告,推荐,金融,医疗等与我们生活息息相关的领域也有很好的应用,当然要了解一下了。 本文结构: 定义 和监督式学习, 非监督式学习的区别 主要算法和类别 应用举例 ---- 1. 定义 强化学习是机器学习的一个重要分支,是多学科多领域交叉的一个产物,它的本质是解决 decision making 问题,即自动进行决策,并且可以做连续决策。 它主要包含四个元素,agent,环境状态,行动,奖励, 强化学习的目标
杨熹
2018/04/03
8340
一文了解强化学习
《 NEXT 技术快报》:机器学习篇
本文探讨了多智能体系统中的协作问题,并提出了一种基于变分推理的框架,用于解决智能体在复杂场景中的协作问题。该框架通过最大化角色分配的熵来训练角色分配模型,从而实现更加高效的协作。同时,该框架具有较好的扩展性,可以应用于不同规模和复杂度的协作问题。在实践中,该框架已经在多个场景中得到了验证,能够有效地提高协作效率和稳定性。
serena
2017/10/13
1.3K0
《 NEXT 技术快报》:机器学习篇
推荐阅读
相关推荐
【干货总结】分层强化学习(HRL)全面总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验