自然语言处理——Hugging Face 详解

        Hugging Face 是一个以自然语言处理(NLP)为核心的人工智能平台和开源社区,提供了一系列非常流行的机器学习工具和预训练模型,尤其在文本生成、分类、翻译、情感分析等任务中表现出色。Hugging Face 旗下最为著名的项目是 Transformers 库,它为 NLP 任务提供了大量的预训练模型,并且支持多种主流深度学习框架,如 PyTorch 和 TensorFlow。

一、Hugging Face 的背景和目标

        Hugging Face 旨在降低机器学习和自然语言处理的入门门槛,并使机器学习模型的训练、应用和共享更加简单、透明。其最著名的工具和平台包括:

  1. Transformers:提供了多种预训练的 NLP 模型,可以快速地将其应用于各种 NLP 任务,如文本生成、文本分类、情感分析、机器翻译等。
  2. Datasets:提供了大量公开的 NLP 数据集,可以方便地进行数据预处理和加载。
  3. Tokenizers:为文本处理提供了高效的分词工具,支持多种分词算法。
  4. Hugging Face Hub:这是一个模型存储库,用户可以上传、下载、分享模型。

        Hugging Face 通过开源技术和社区支持,极大地促进了 NLP 领域的发展,尤其是在预训练模型的应用上,它推动了从机器学习到深度学习的转变。

二、Hugging Face 的核心技术——Transformers

1. Transformers 模型

        Transformers 是由 Vaswani 等人在 2017 年提出的一种神经网络架构,特别适用于序列到序列(sequence-to-sequence)任务。其核心创新在于自注意力(self-attention)机制,它可以捕捉输入数据中的长程依赖关系,而不需要像传统的递归神经网络(RNN)和长短时记忆网络(LSTM)那样逐步处理输入。

Transformers 模型的主要结构包括以下几个部分:

  1. 自注意力机制(Self-Attention):通过计算每个单词与其他单词之间的注意力权重来建模输入序列中的依赖关系。
  2. 位置编码(Positional Encoding):由于 Transformer 不使用递归结构,它需要显式地引入位置编码,以便模型能够理解输入的顺序信息。
  3. 编码器(Encoder)和解码器(Decoder):标准的 Transformer 架构包含两个主要部分:编码器和解码器。编码器将输入序列转换为隐状态,解码器根据隐状态生成输出序列。
  4. 多头注意力(Multi-head Attention):为了使模型能够捕捉到不同的上下文信息,Transformer 引入了多头注意力机制。
2. 模型的微调

        Hugging Face 提供的 Transformer 模型都是 预训练模型,这些模型经过大规模的文本数据训练,具有很强的迁移能力。预训练模型可以通过少量的样本进行 微调(fine-tuning),从而适应特定任务,如情感分析、命名实体识别(NER)等。

        通过 Hugging Face,用户可以快速地加载预训练模型,并将其应用到自己的任务上。下面是一个基本的微调流程:

  1. 加载预训练模型:通过 transformers 库加载预训练模型(例如 BERT、GPT、T5 等)。
  2. 准备数据:准备特定任务的数据集,并进行必要的预处理(例如分词)。
  3. 微调:通过迁移学习和梯度下降等方法,利用特定任务的数据对预训练模型进行微调。
  4. 评估和应用:微调后的模型可以进行评估,并用于实际的预测任务。

三、Hugging Face 源代码实现

1. 安装 transformers 库

        要使用 Hugging Face 的工具,我们首先需要安装 transformers 和 datasets 库:

pip install transformers datasets
2. 加载和使用预训练模型

        在 Hugging Face 中加载一个预训练模型非常简单。例如,加载 BERT 模型并进行文本分类的代码如下:

from transformers import pipeline# 加载预训练的文本分类模型
classifier = pipeline("sentiment-analysis")# 进行预测
result = classifier("I love using Hugging Face!")
print(result)

        在上面的代码中,pipeline 是一个高层接口,可以用来快速加载和应用各种 NLP 模型。通过 "sentiment-analysis" 任务,我们加载了一个用于情感分析的预训练模型,并使用它对输入的文本进行预测。

3. 微调模型

        假设我们想对一个文本分类任务进行微调。下面是一个完整的流程,使用 transformers 和 datasets 库进行文本分类任务的微调。

from transformers import Trainer, TrainingArguments, BertForSequenceClassification, BertTokenizer
from datasets import load_dataset# 加载数据集
dataset = load_dataset("imdb")# 加载BERT tokenizer和模型
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")# 数据预处理函数
def preprocess_function(examples):return tokenizer(examples["text"], truncation=True, padding="max_length")# 对数据集进行预处理
encoded_datasets = dataset.map(preprocess_function, batched=True)# 分割训练和验证数据集
train_dataset = encoded_datasets["train"]
eval_dataset = encoded_datasets["test"]# 设置训练参数
training_args = TrainingArguments(output_dir="./results",evaluation_strategy="epoch",learning_rate=2e-5,per_device_train_batch_size=16,per_device_eval_batch_size=64,num_train_epochs=3,weight_decay=0.01,
)# 使用Trainer API进行微调
trainer = Trainer(model=model,args=training_args,train_dataset=train_dataset,eval_dataset=eval_dataset,
)# 开始训练
trainer.train()# 保存模型
trainer.save_model("./finetuned_bert")

代码解释:
  • 加载数据集:我们从 Hugging Face Datasets Hub 加载了 IMDB 数据集,并对其进行预处理。
  • 加载模型:我们加载了 BERT 模型(bert-base-uncased),并使用其进行文本分类。
  • 数据预处理:使用 BERT 的 tokenizer 对数据集进行分词,并将文本转换为模型可以理解的输入格式。
  • 训练设置:使用 TrainingArguments 来设置训练参数,如学习率、批量大小和训练周期数。
  • TrainerTrainer 是 Hugging Face 提供的一个高层接口,它封装了训练和评估的流程,简化了模型的训练过程。
4. 模型的保存与加载

训练完成后,我们可以保存微调后的模型,并在未来的应用中重新加载使用:

from transformers import pipeline# 加载预训练的文本分类模型
classifier = pipeline("sentiment-analysis")# 进行预测
result = classifier("I love using Hugging Face!")
print(result)

四、Hugging Face 的其他功能

除了预训练模型和微调工具外,Hugging Face 还提供了许多强大的功能:

  1. Hugging Face Hub:用户可以上传自己的模型到 Hugging Face Hub,并与社区共享。模型上传后可以通过简单的 API 调用进行加载。

  2. Datasets 库:Hugging Face 还提供了 datasets 库,它支持从多种格式的数据集进行加载(CSV、JSON、Parquet 等),并且具备数据预处理和转换的功能。

  3. Tokenizers:Hugging Face 提供了高效的 Tokenizer 库,专门用于文本数据的处理,包括分词、编码和解码等。

  4. Accelerate:这是一个旨在简化多GPU和分布式训练的工具,用户可以通过几行代码快速使用多GPU进行训练。

  5. Spaces:Hugging Face 还提供了一个名为 Spaces 的平台,允许用户构建和分享机器学习应用程序,并能方便地在 Web 界面上进行交互。

五、总结

        Hugging Face 通过提供易用的 API、预训练模型和社区支持,极大地降低了 NLP 和深度学习的使用门槛。它的 Transformers 库让研究人员和开发者能够快速上手并在各种任务上获得很好的效果。通过微调、模型共享和高效的训练工具,Hugging Face 为 NLU(自然语言理解)任务和 NLP 研究提供了强大的支持,帮助推动了该领域的进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot基础系列学习(四):Thymeleaf模板

文章目录 一丶什么是模板引擎二丶Thymeleaf 介绍三丶使用引入依赖代码html页面响应 一丶什么是模板引擎 模板引擎是一种将数据和模板结合起来生成最终结果的工具,它将一个模板和一个数据对象作为输入,通过模板解析和渲染生成最终的结果。通俗地说&#…

「QT」几何数据类 之 QRectF 浮点型矩形类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

动手学深度学习-使用d2l导致jupyter内核挂掉

参考如何解决Jupyter Notebook当中有关内核挂掉的问题_挂掉的内核-CSDN博客 在使用d2l库之前加入 import os os.environ["KMP_DUPLICATE_LIB_OK"]"TRUE"

阿里云centos7.9服务器磁盘挂载,切换服务路径

项目背景 1、项目使用的服务器为阿里云centos7.9,默认的磁盘为vda,文件系统挂载在这个磁盘上,项目上使用的文件夹为/home/hnst/uploadPath 2、vda使用率已达到91% 3、现购置一块新的磁盘为vdb,大小为2T 目的 切换服务所使用的…

uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)

一. 创建一个hooks hooks—>useSystemBar.js 二. useSystemBar.js 其中// #ifdef MP-WEIXIN 不是注释 这是uni-app的写法 import {ref} from vue;export default function() {// 获取系统信息let systemInfo ;// #ifdef MP-WEIXINsystemInfo uni.getWindowInfo…

每日科技资讯:2024年11月09日【龙】农历十月初九 ---文末送书

目录 1.史上最强游戏CPU!9800X3D首发评测2.苹果喊话iPhone 13和14钉子户:16方方面面都升级了3.加拿大政府下令 TikTok 关闭该国业务,但应用仍可以继续访问4.OpenAI 刚刚花了超过 1000 万美元购买了Chat.com5.Max 加入打击密码共享行列6.微软可…

探索深度学习的本质

深度学习的本质是利用多层(深层)的神经网络结构来从数据中学习复杂的模式和特征。其主要特点是具有层次结构,能够实现自动特征提取。非线性、可扩展性和迁移学习能力是深度学习能够处理复杂问题和广泛(低成本)应用的关…

vue3 + vite引入地址路径报错,以及无法点击跳转相应的文件

vue3 vite引入地址路径报错,以及无法点击跳转相应的文件 在项目中找到tsconfig.json,或者jsconfig.json 文件,使用一下代码替换即可。如果两个文件都不存在,如果项目使用了ts,就创建tsconfig.json文件,复…

API接口:助力汽车管理与安全应用

随着汽车行业的飞速发展,越来越多的汽车管理技术被应用到交通安全和智慧交通系统中。在这一过程中,API接口起到了至关重要的作用。通过API接口,我们可以实现诸如车主身份验核、车辆信息查询等功能,从而为汽车智慧交通发展与安全应…

TikTok本土店vs跨境店:解读TikTok小店差异

TikTok小店的两种主要的店铺类型:本土店和跨境店,虽然这两种店铺在功能上有相似之处,但它们在运营模式、市场定位、目标受众和面临的挑战等方面存在显著的区别。 一、定义与基本特征 1. TikTok本土店 本土店指的是在特定国家或地区内经营的…

[libos源码学习 1] Liboc协程生产者消费者举例

文章目录 1. CoRoutineEnv_t结构体用于管理协程环境 3 Liboc协程生产者消费者例子4 Liboc协程生产者消费者, 为什么队列不需要上锁?5. 两个协程访问资源不需要加队列吗5. 参考 1. CoRoutineEnv_t结构体用于管理协程环境 struct stCoRoutineEnv_t { stCo…

【leetcode】动态规划刷题总结-划分问题

判定能否划分 一般定义dp[i]表示nums[:i 1]能否划分,然后枚举最后一个子数组的左端点,得到nums[:i 1]能否划分 LeetCode2369题 检查数组是否存在有效划分 class Solution:def validPartition(self, nums: List[int]) -> bool:if len(nums) 2:re…

[含文档+PPT+源码等]精品基于springboot实现的原生Andriod广告播放系统

基于Spring Boot实现的原生Android广告播放系统背景,主要可以从以下几个方面进行阐述: 一、市场需求与背景 移动互联网的快速发展: 随着移动互联网技术的不断进步,智能手机已成为人们日常生活中不可或缺的一部分。人们越来越多地…

【汇编语言】[BX]和loop指令(四)—— 汇编语言中的段前缀与内存保护:原理与应用解析

文章目录 前言1. 段前缀1.1 示例演示1.2 总结 2. 一段安全的空间2.1 存在的问题2.2 示例演示2.2.1 编译、链接、加载程序2.2.2 运行程序 2.3 总结 3. 段前缀的使用3.1 问题引入3.2 分析问题3.3 代码实现3.4 程序的改进3.4.1 分析3.4.2 代码实现 结语 前言 📌 汇编语…

经典双指针--合并升序链表

#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h>typedef struct Node {int data;struct Node* next; } Node;Node* newNode(int data);/* 请完成下面的函数 */ Node* mergeList(Node* L1, Node* L2) {Node* head n…

Python代码主要实现了一个基于Transformer和LSTM的混合模型,用于对给定数据集进行二分类任务

Python代码主要实现了一个基于Transformer和LSTM的混合模型,用于对给定数据集进行二分类任务。代码的大致流程包括数据读取、数据预处理、模型构建、模型训练与评估以及结果输出。 #!/usr/bin/env python # coding: utf-8# In[4]:import numpy as np import pandas as pd imp…

dell服务器安装ESXI8

1.下载镜像在官网 2.打开ipmi&#xff08;idrac&#xff09;&#xff0c;将esxi镜像挂载&#xff0c;然后服务器开机 3.进入bios设置cpu虚拟化开启&#xff0c;进入boot设置启动选项为映像方式 4..进入安装引导界面3.加载完配置进入安装 系统提示点击继 5.选择安装磁盘进行…

【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦

更改name的文本数量限制大小&#xff0c; 其他我们只在name中进行操作 【除了低级可以在message中进行操作】 一、低级low <script>alert("假客套")</script> 二、中级middle 过滤了小写&#xff0c;咱们可以大写 <Script>alert("假客套…

基于Python的自然语言处理系列(57):使用最佳表示向量法实现整本书的高效摘要

在自然语言处理中,处理大型文档,如书籍或长篇文本,总结其关键内容是一项挑战。面对长达数万或数十万字的书籍时,我们往往需要找到一种既能代表书籍主旨,又能降低处理成本的方法。本篇博文介绍了一种称为“最佳表示向量法”(Best Representation Vectors)的技术,通过向量…

从0开始学习机器学习--Day19--学习曲线

一般来说&#xff0c;如果一个算法的表现不理想&#xff0c;那么多半是因为出现了欠拟合或过拟合问题&#xff0c;这种时候我们要做的就是搞清楚出现的是偏差问题还是方差问题&#xff0c;亦或是二者皆有&#xff0c;这有助于我们精准定位问题所在。 之前&#xff0c;我们发现…