自然语言处理Hugging Face Transformers

news2025/4/16 14:03:24

Hugging Face Transformers 是一个基于 PyTorch 和 TensorFlow 的开源库,专注于 最先进的自然语言处理(NLP)模型,如 BERT、GPT、RoBERTa、T5 等。它提供了 预训练模型、微调工具和推理 API,广泛应用于文本分类、机器翻译、问答系统等任务。


1. Hugging Face Transformers 的特点

✅ 丰富的预训练模型:支持 500+ 种模型(如 BERT、GPT-3、Llama 2)。
✅ 跨框架支持:兼容 PyTorch、TensorFlow、JAX
✅ 易用 API:提供 pipeline,几行代码即可实现 NLP 任务。
✅ 社区支持:Hugging Face Hub 提供 数千个公开模型和数据集
✅ 支持自定义训练:可微调(Fine-tune)模型以适应特定任务。


2. 主要功能

(1) 开箱即用的 NLP 任务

  • 文本分类(情感分析、垃圾邮件检测)

  • 命名实体识别(NER)

  • 问答系统(QA)

  • 文本生成(如 GPT-3、Llama 2)

  • 机器翻译

  • 摘要生成

(2) 核心组件

  • pipeline:快速调用预训练模型进行推理。

  • AutoModel / AutoTokenizer:自动加载模型和分词器。

  • Trainer:简化模型训练和微调流程。

  • Datasets:高效加载和处理数据集。


3. 安装与基本使用

(1) 安装

pip install transformers

(可选)安装 PyTorch / TensorFlow:

pip install torch  # PyTorch
pip install tensorflow  # TensorFlow

注:此处我尝试了安装gpu版本的,因为我电脑安装的cuda版本较低,所以试了几个版本的tensorflow-gpu版本都和transformer版本不匹配。

(2) 使用 pipeline 快速体验

from transformers import pipeline 
# 情感分析 将下载的模型存于multilingual-sentiment-analysis路径下
classifier=pipeline("text-classification",model="./multilingual-sentiment-analysis")
print(classifier("我很骄傲"))
# 文本生成 
# 指定本地路径加载模型,将下载的模型存于gpt2路径下
generator = pipeline("text-generation",model="./gpt2")# 本地模型路径
result=generator("AI will change",max_length=50)
print(result[0]['generated_text'])

因为模型在线下载会比较麻烦,建议离线下载好,放到指定的文件夹下,方便调用

通过网盘分享的文件:gpt2
链接: https://pan.baidu.com/s/1Z9MZQKyOQrLlvn_jh3bGOg 提取码: 8ihe

通过网盘分享的文件:multilingual-sentiment-analysis
链接: https://pan.baidu.com/s/16e6Jvo44vetMmTxrQcZZqQ 提取码: tv4e

(3) 加载自定义模型

from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 加载模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 处理输入
inputs = tokenizer("Hello, world!", return_tensors="pt")
outputs = model(**inputs)
print(outputs)

4. 常用预训练模型

模型用途示例模型 ID
BERT文本分类、NER、问答bert-base-uncased
GPT-2文本生成gpt2
T5文本摘要、翻译t5-small
RoBERTa更强大的 BERT 变体roberta-base
Llama 2Meta 开源的大语言模型meta-llama/Llama-2-7b

5. 与 spaCy 的比较

特性Hugging Face TransformersspaCy
模型类型深度学习(BERT、GPT)传统统计模型 + 部分 DL
速度较慢(依赖 GPU 加速)⚡ 极快(CPU 友好)
适用任务复杂 NLP(翻译、生成)基础 NLP(分词、NER)
自定义训练✅ 支持(微调 LLM)✅ 支持(但规模较小)
易用性中等(需了解深度学习)👍 非常简单

👉 推荐选择

  • 如果需要 最先进的 NLP(如 ChatGPT 类应用) → Hugging Face

  • 如果需要 快速处理结构化文本(如实体提取) → spaCy


6. 实战案例

(1) 聊天机器人(使用 GPT-2)

from transformers import pipeline
chatbot = pipeline("text-generation", model="./gpt2")
response = chatbot("What is the future of AI?", max_length=50)
print(response[0]['generated_text'])

(2) 自定义微调(Fine-tuning)

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",
    per_device_train_batch_size=8,
    num_train_epochs=3,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
)
trainer.train()

(3)情感分析

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
model_name = "./multilingual-sentiment-analysis"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

def predict_sentiment(texts):
    inputs = tokenizer(texts, return_tensors="pt", truncation=True, padding=True, max_length=512)
    with torch.no_grad():
        outputs = model(**inputs)
    probabilities = torch.nn.functional.softmax(outputs.logits, dim=-1)
    sentiment_map = {0: "Very Negative", 1: "Negative", 2: "Neutral", 3: "Positive", 4: "Very Positive"}
    return [sentiment_map[p] for p in torch.argmax(probabilities, dim=-1).tolist()]

texts = [
    # English
    "I absolutely love the new design of this app!", "The customer service was disappointing.", "The weather is fine, nothing special.",
    # Chinese
    "这家餐厅的菜味道非常棒!", "我对他的回答很失望。", "天气今天一般。",
    # Spanish
    "¡Me encanta cómo quedó la decoración!", "El servicio fue terrible y muy lento.", "El libro estuvo más o menos.",
    # Arabic
    "الخدمة في هذا الفندق رائعة جدًا!", "لم يعجبني الطعام في هذا المطعم.", "كانت الرحلة عادية。",
    # Ukrainian
    "Мені дуже сподобалася ця вистава!", "Обслуговування було жахливим.", "Книга була посередньою。",
    # Hindi
    "यह जगह सच में अद्भुत है!", "यह अनुभव बहुत खराब था।", "फिल्म ठीक-ठाक थी।",
    # Bengali
    "এখানকার পরিবেশ অসাধারণ!", "সেবার মান একেবারেই খারাপ।", "খাবারটা মোটামুটি ছিল।",
    # Portuguese
    "Este livro é fantástico! Eu aprendi muitas coisas novas e inspiradoras.",
    "Não gostei do produto, veio quebrado.", "O filme foi ok, nada de especial.",
    # Japanese
    "このレストランの料理は本当に美味しいです!", "このホテルのサービスはがっかりしました。", "天気はまあまあです。",
    # Russian
    "Я в восторге от этого нового гаджета!", "Этот сервис оставил у меня только разочарование.", "Встреча была обычной, ничего особенного.",
    # French
    "J'adore ce restaurant, c'est excellent !", "L'attente était trop longue et frustrante.", "Le film était moyen, sans plus.",
    # Turkish
    "Bu otelin manzarasına bayıldım!", "Ürün tam bir hayal kırıklığıydı.", "Konser fena değildi, ortalamaydı.",
    # Italian
    "Adoro questo posto, è fantastico!", "Il servizio clienti è stato pessimo.", "La cena era nella media.",
    # Polish
    "Uwielbiam tę restaurację, jedzenie jest świetne!", "Obsługa klienta była rozczarowująca.", "Pogoda jest w porządku, nic szczególnego.",
    # Tagalog
    "Ang ganda ng lugar na ito, sobrang aliwalas!", "Hindi maganda ang serbisyo nila dito.", "Maayos lang ang palabas, walang espesyal.",
    # Dutch
    "Ik ben echt blij met mijn nieuwe aankoop!", "De klantenservice was echt slecht.", "De presentatie was gewoon oké, niet bijzonder.",
    # Malay
    "Saya suka makanan di sini, sangat sedap!", "Pengalaman ini sangat mengecewakan.", "Hari ini cuacanya biasa sahaja.",
    # Korean
    "이 가게의 케이크는 정말 맛있어요!", "서비스가 너무 별로였어요.", "날씨가 그저 그렇네요.",
    # Swiss German
    "Ich find dä Service i de Beiz mega guet!", "Däs Esä het mir nöd gfalle.", "D Wätter hüt isch so naja."
]

for text, sentiment in zip(texts, predict_sentiment(texts)):
    print(f"Text: {text}\nSentiment: {sentiment}\n")

7. 学习资源

  • 官方文档: huggingface.co/docs/transformers

  • Hugging Face 课程: huggingface.co/course(免费 NLP 课程)

  • 模型库: huggingface.co/models


总结

Hugging Face Transformers 是 当今最强大的 NLP 库之一,适用于:

  • 前沿 AI 研究(如 LLM、ChatGPT 类应用)

  • 企业级 NLP 解决方案(如智能客服、自动摘要)

  • 快速实验 SOTA 模型

🚀 推荐下一步

  1. 尝试 pipeline() 运行不同任务(如 "text-generation")。

  2. 在 Hugging Face Hub 上探索开源模型(如 bert-base-uncased)。

  3. 学习 微调(Fine-tuning) 以适应自定义数据集。

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

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

相关文章

vue3+vite+ts使用daisyui/tailwindcss

vite创建vue3脚手架 npm init vitelatest myVue3 – --template vue cd .\myVue3\ npm i npm run dev 安装tailwindcss/daisyui 依赖安装 npm install -D tailwindcss postcss autoprefixer daisyui npx tailwindcss init -p 这条命令将生成postcss.config.js(因为加了…

大联盟(特别版)双端互动平台完整套件分享:含多模块源码+本地部署环境

这是一套结构清晰、功能完整的互动平台组件,适合有开发经验的技术人员进行模块参考、结构研究或本地部署实验使用。 该平台覆盖前端展示、后端服务、移动端资源以及完整数据库,采用模块化架构,整体部署流程简单清晰,适合自研团队参…

Spark-SQL

Spark-SQL 概述 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块 Shark 是伯克利实验室 Spark 生态环境的组件之一,是基于 Hive 所开发的工具,它修改了内存管理、物理计划、执行三个模块,并使之能运行在 Spark 引擎上…

无人机气动-结构耦合技术要点与难点

一、技术要点 1. 多学科耦合建模 气动载荷与结构响应的双向耦合:气动力(如升力、阻力、力矩)导致结构变形,而变形改变气动外形,进一步影响气流分布,形成闭环反馈。 建模方法: 高精度C…

element-ui plus 中 filter-method 函数多次触发问题解决

前情提要 点进这个文章的小伙伴,应该都是为了解决一个需求,把原本的前端过滤改为后端过滤,但是将filter-method修改为后端取数据后,发现其触发了很多次。博主也是在修改表格过滤时用到了这个坑,本篇文章为大家解决一下…

基于【Lang Chain】构建智能问答系统的实战指南

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Lang Chain 2、LangChain在问答系统中的核心优…

TestHubo安装及入门指南

TestHubo是一款开源免费的测试管理工具,提供一站式测试解决方案,涵盖功能测试、接口测试、性能测试以及 Web 和 App 测试等多个维度。TestHubo 整合了全面的测试能力,使团队可以在一个平台内完成所有测试需求。本文将介绍如何快速安装配置及入…

react tailwindcss最简单的开始

参考教程: Install Tailwind CSS with Vite - TailwindCSS中文文档 | TailwindCSS中文网https://www.tailwindcss.cn/docs/guides/vite操作过程: Microsoft Windows [版本 10.0.26100.3476] (c) Microsoft Corporation。保留所有权利。D:\gitee\tailwi…

openGauss新特性 | 自动参数化执行计划缓存

目录 自动化参数执行计划缓存简介 SQL参数化及约束条件 一般常量参数化示例 总结 自动化参数执行计划缓存简介 执行计划缓存用于减少执行计划的生成次数。openGauss数据库会缓存之前生成的执行计划,以便在下次执行该SQL时直接使用,可…

3、组件:魔法傀儡的诞生——React 19 组件化开发全解析

一、开篇:魔法傀儡的觉醒 "每个React组件都像一具魔法傀儡,"邓布利多校长挥动魔杖,空中浮现出闪烁的代码字符,"它们能自主思考、协同工作,甚至能跨越时空(服务器与客户端)执行任…

达梦数据库迁移问题总结

更多技术博客,请关注微信公众号:运维之美 问题一、DTS工具运行乱码 开启图形化 [rootlocalhost ~]# xhost #如果命令不存在执行sudo yum install xorg-x11-server-utils xhost: unable to open display "" [rootlocalhost ~]# su - dmd…

OpenHarmony荷兰研习会回顾 | 仓颉语言赋能原生应用开发实践

近日,由全球顶级学术峰会EuroSys/ASPLOS和OpenHarmony社区在荷兰鹿特丹合办的操作系统深度研习会圆满收官,本次研习会以"架构探秘-开发实践-创新实验"三位一体的进阶模式,为全球开发者构建了沉浸式技术探索平台。其中,由…

RV1126 人脸识别门禁系统解决方案

1. 方案简介 本方案为类人脸门禁机的产品级解决方案,已为用户构建一个带调度框架的UI应用工程;准备好我司的easyeai-api链接调用;准备好UI的开发环境。具备低模块耦合度的特点。其目的在于方便用户快速拓展自定义的业务功能模块,以及快速更换UI皮肤。 2. 快速上手 2.1 开…

matlab内置的git软件版本管理功能

1、matlab多人协作开发比普通的嵌入式软件开发困难很多 用过matlab的人都知道,版本管理对于matlab来说真的很费劲,今天介绍的这个工具也不是说它就解决了这个痛点,只是让它变得简单一点。版本管理肯定是不可或缺的,干就完了 2、操作说明 如图所示,源代码管理,选项罗列的…

《前端面试题之 CSS篇(第一集)》

目录 1、CSS的盒模型2、CSS选择器及其优先级3、隐藏元素的方法有那些4、px、em、rem的区别及使用场景5、重排、重绘有什么区别6、水平垂直居中的实现7、CSS中可继承与不可继承属性有哪些8、Sass、Less 是什么?为什么要使用他们?9、CSS预处理器/后处理器是…

MySQL部分总结

mysql学习笔记,如有不足还请指出,谢谢。 外连接,内连接,全连接 外连接:左外、右外 内连接:自己和自己连接 全连接:左外连接右外链接 mysql unique字段 unique可以在数据库层面避免插入相同…

Linux Kernel 2

地址空间(Address Space) 一、物理地址空间(Physical Address Space) 物理地址空间 是指 RAM 和设备内存 在系统内存总线上所呈现的地址布局。 举例:在典型的 32 32 32 位 Intel 架构中, RAM&#xff08…

AndroidTV D贝桌面-v3.2.5-[支持文件传输]

AndroidTV D贝桌面 链接:https://pan.xunlei.com/s/VONXSBtgn8S_BsZxzjH_mHlAA1?pwdzet2# AndroidTV D贝桌面-v3.2.5[支持文件传输] 第一次使用的话,壁纸默认去掉的,不需要按遥控器上键,自己更换壁纸即可

线性方程组的解法

文章目录 线性方程组的解法认识一些基本的矩阵函数MATLAB 实现机电工程学院教学函数构造1.高斯消元法2.列主元消去法3. L U LU LU分解法 线性方程组的解法 看到以下线性方程组的一般形式:设有以下的 n n n阶线性方程组: A x b \mathbf{Ax}\mathbf{b} A…

Python赋能量子计算:算法创新与应用拓展

量子计算与Python结合的算法开发与应用研究 摘要 量子计算作为计算机科学的前沿技术,凭借其独特的计算能力在解决复杂问题方面展现出巨大潜力。Python作为一种高效、灵活的编程语言,为量子计算算法的开发提供了强大的支持。本文从研究学者的视角,系统探讨了量子计算与Pytho…