Python 中的 Transformers 库

Python 中的 Transformers 库

一、什么是 Transformers?

Transformers 是一个由 Hugging Face 开发并维护的开源 Python 库,旨在为开发者提供简单、统一的接口来使用预训练的 Transformer 模型。它支持超过 300 种预训练模型(如 BERT、RoBERTa、GPT-2、T5、DistilBERT、XLM-R 等),适用于多种语言和任务。

该库的主要特点包括:

  • 支持 PyTorch 和 TensorFlow 框架。
  • 提供简洁的 API 接口,便于快速加载和使用模型。
  • 集成大量预训练模型,开箱即用。
  • 支持文本分类、命名实体识别、问答、翻译、摘要生成等多种任务。
  • 可轻松微调模型以适应特定应用场景。

二、安装 Transformers

要使用 Transformers,首先需要安装它。推荐使用 pip 安装:

pip install transformers

如果你还希望使用 PyTorch 或 TensorFlow,也需单独安装:

# 安装 PyTorch(推荐) pip install torch # 或者安装 TensorFlow pip install tensorflow

此外,许多任务还需要分词器(Tokenizer),通常会自动随模型一起下载,但你也可以手动安装相关依赖。


三、核心组件介绍

1. 模型(Model)

Transformers 中的模型是执行具体 NLP 任务的核心。例如:

  • BertForSequenceClassification:用于文本分类。
  • BertForQuestionAnswering:用于问答任务。
  • GPT2LMHeadModel:用于文本生成。

你可以通过模型名称从 Hugging Face 模型中心(https://huggingface.co/models)加载预训练模型。

2. 分词器(Tokenizer)

分词器负责将原始文本转换为模型可理解的数字输入(token IDs)。每个模型都有对应的分词器。

例如,BERT 使用 WordPiece 分词,而 GPT 使用 Byte-Pair Encoding(BPE)。

from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') tokens = tokenizer("Hello, how are you?", return_tensors='pt') print(tokens)

输出示例:

{ 'input_ids': tensor([[101, 7592, 1010, 2129, 2024, 2017, 102]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1]]) }

其中 101 和 102 分别代表 [CLS] 和 [SEP] 特殊标记。

3. 管道(Pipeline)

pipeline 是 Transformers 提供的高级 API,允许用户无需编写复杂代码即可完成常见任务。

示例 1:情感分析

from transformers import pipeline classifier = pipeline("sentiment-analysis") result = classifier("I love using the Transformers library!") print(result) # 输出: [{'label': 'POSITIVE', 'score': 0.9998}]

示例 2:命名实体识别(NER)

ner_pipeline = pipeline("ner", grouped_entities=True) entities = ner_pipeline("Apple is looking at buying a U.K. startup for $1 billion.") print(entities)

示例 3:文本生成

generator = pipeline("text-generation", model="gpt2") texts = generator("Once upon a time,", max_length=50, num_return_sequences=2) for text in texts: print(text['generated_text'])

四、自定义模型微调(Fine-tuning)

虽然预训练模型已经很强大,但在特定数据集上微调通常能获得更好的性能。

以下是一个简单的文本分类微调示例(使用 PyTorch):

from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer import torch from datasets import load_dataset # 加载数据集(以 IMDb 电影评论为例) dataset = load_dataset('imdb') # 加载分词器和模型 model_name = 'distilbert-base-uncased' tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2) # 分词函数 def tokenize_function(examples): return tokenizer(examples['text'], truncation=True, padding=True, max_length=512) # 对数据集进行分词 tokenized_datasets = dataset.map(tokenize_function, batched=True) # 训练参数 training_args = TrainingArguments( output_dir='./results', evaluation_strategy="epoch", per_device_train_batch_size=8, per_device_eval_batch_size=8, num_train_epochs=3, weight_decay=0.01, ) # 创建 Trainer trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_datasets['train'], eval_dataset=tokenized_datasets['test'] ) # 开始训练 trainer.train()
注意:上述代码需要额外安装 datasets 库:pip install datasets

五、支持的任务类型

Transformers 支持广泛的任务,包括但不限于:

任务类型示例模型
文本分类BERT, DistilBERT
命名实体识别(NER)BERT, RoBERTa
问答(QA)BERT, ALBERT
文本生成GPT-2, GPT-Neo
机器翻译T5, MarianMT
文本摘要BART, Pegasus
句子相似度Sentence-BERT

六、优势与局限

优点:

  • 易用性高pipeline 接口让新手也能快速上手。
  • 生态丰富:与 DatasetsAccelerateEvaluate 等库无缝集成。
  • 社区活跃:Hugging Face Hub 上有成千上万共享模型。
  • 跨框架支持:同时支持 PyTorch 和 TensorFlow。

局限:

  • 资源消耗大:大型模型(如 GPT-3)需要高性能 GPU。
  • 推理延迟高:实时应用中可能需要模型压缩或蒸馏。
  • 黑盒性质:部分模型难以解释其决策过程。

七、结语

Transformers 不仅是一个 Python 库,更是一个推动 NLP 民主化的重要平台。它让研究人员和开发者能够以前所未有的速度构建强大的语言理解系统。无论你是想快速实现一个情感分析工具,还是在专业场景下微调模型解决实际问题,Transformers 都是一个不可或缺的工具。

未来,随着模型小型化、多模态融合(如图像+文本)的发展,Transformers 也将持续进化,继续引领 AI 技术的前沿。


参考资料

Read more

Flutter 三方库 flutter_image_test_utils 的鸿蒙化适配指南 - 实现端侧 UI 测试中的网络图片模拟、支持 HTTP 图片请求劫持与自动化渲染一致性验证实战

Flutter 三方库 flutter_image_test_utils 的鸿蒙化适配指南 - 实现端侧 UI 测试中的网络图片模拟、支持 HTTP 图片请求劫持与自动化渲染一致性验证实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 flutter_image_test_utils 的鸿蒙化适配指南 - 实现端侧 UI 测试中的网络图片模拟、支持 HTTP 图片请求劫持与自动化渲染一致性验证实战 前言 在进行 Flutter for OpenHarmony 的自动化 UI 测试(Widget Test / Integration Test)时,网络图片的加载往往是最大的“变数”。由于测试环境可能处于隔离内网或不稳定的网络中,真实的图片下载会导致测试用例因超时而断断续续。flutter_image_test_utils 是一款强大的测试辅助库,它能完美模拟(Mock)网络图片请求。本文将指导大家如何在鸿蒙端构建极致稳定的视觉回归测试。 一、原原理性解析 / 概念介绍 1.1

By Ne0inhk
鸿蒙APP开发从入门到精通:鸿蒙电商购物车全栈项目——用户管理、商品列表、购物车

鸿蒙APP开发从入门到精通:鸿蒙电商购物车全栈项目——用户管理、商品列表、购物车

《鸿蒙APP开发从入门到精通》第13篇:鸿蒙电商购物车全栈项目——用户管理、商品列表、购物车 🛒📱 内容承接与核心价值 这是《鸿蒙APP开发从入门到精通》的第13篇——用户管理、商品列表、购物车篇,100%承接第12篇的「运维监控、生态运营与专属变现」项目架构,完成鸿蒙电商购物车全栈项目的基础功能实现。 学习目标: * 掌握用户管理的设计与实现; * 实现用户注册、登录、用户信息管理; * 理解商品列表的设计与实现; * 实现商品列表、商品详情、商品搜索; * 掌握购物车管理的设计与实现; * 实现添加商品到购物车、修改购物车商品数量、删除购物车商品; * 优化用户管理、商品列表、购物车的用户体验(响应速度、数据安全、用户反馈)。 学习重点: * 鸿蒙APP用户管理的开发流程; * 用户管理的分类与使用场景; * 商品列表的设计与实现; * 购物车管理的设计与实现。 一、 用户管理基础 🎯 1.1 用户管理定义 用户管理是指对应用的用户进行管理,主要包括以下方面:

By Ne0inhk
HarmonyOS6半年磨一剑 - RcImage组件填充模式与形状系统设计(一)

HarmonyOS6半年磨一剑 - RcImage组件填充模式与形状系统设计(一)

目录 * 前言 * 项目简介 * 核心特性 * 开源计划 * rchoui官网 * 文档概述 * 第一章: 填充模式系统 * 1.1 填充模式类型定义 * 1.2 填充模式对比分析 * 1.3 填充模式实现机制 * 第二章: contain 模式深度解析 * 2.1 contain 模式工作原理 * 2.2 contain 模式适用场景 * 第三章: cover 模式深度解析 * 3.1 cover 模式工作原理 * 3.2 cover 模式适用场景 * 第四章: fill 模式深度解析 * 4.1 fill 模式工作原理 * 4.2 fill

By Ne0inhk
大力学习台灯T6/T6Pro 救砖实战:macOS/Windows 用 mtkclient 从 Fastboot 无限重启完整恢复(含固件下载地址)

大力学习台灯T6/T6Pro 救砖实战:macOS/Windows 用 mtkclient 从 Fastboot 无限重启完整恢复(含固件下载地址)

大力学习台灯T6/T6Pro(MTK)救砖实战(小白可用):macOS/Windows 用 mtkclient 从 Fastboot/Logo 无限重启完整恢复(含恢复原机 SN/proinfo) 本文记录一次 Dali T6 学习机(联发科 MTK 平台,示例识别为 MT6771/0x788 系列)从“卡 Fastboot / Logo 无限重启”到 成功进入系统,并最终 恢复原机 SN/设备身份(proinfo) 的完整过程。 如果你是小白:你只需要按本文顺序复制粘贴命令即可。每一步我都写了: TL;DR(傻瓜式总流程:照抄就能修) 下面这套是“最短路径”修复流程:

By Ne0inhk