Python transformers库

2025年3月15日 | 阅读 6 分钟

在下面的教程中,我们将理解 Python 编程语言中 transformers 库的基础知识。

Python transformers 库简介

预训练的 transformer 模型彻底改变了自然语言处理 (NLP),并且可以使用 Hugging Face 的 `transformers` 库轻松进行操作。对于文本分类、翻译和问答等应用,该库拥有先进的模型。具体来说,这些基于 transformer 的模型在处理序列数据方面表现出色。

用户可以选择修改这些预训练模型或立即将其用于特定用例。该包支持 BERT、GPT 和 T5 等流行模型,同时还使 深度学习框架,如 PyTorchTensorFlow 更易于使用。由于这种抽象,研究人员和开发人员可以更轻松地执行分词、模型推理和训练,从而需要更少的代码来访问最先进的模型。

我们可以使用 PIP 安装程序在系统中安装 transformers 库,如下所示

Python transformers 库的实现

在下一节中,我们将讨论一些示例,来说明在 Python 中 transformers 库的实现。

示例 1

了解 transformers 库的基本用法。

代码:对于推理,加载预训练模型和分词器

输出

代码的输出取决于正在使用的任务和特定的模型。示例使用 BERT 进行序列分类任务(类似于情感分析),原始的 logits(即模型的未归一化预测分数)包含在 outputs 对象中。

输出的解释如下

 
tensor([[ 1.2317, -0.4521]])   

此输出表明,模型已为二分类任务返回两个 logits。每个 logit 对应一个类别(例如,积极或消极情感)。

  • 第一个值 (1.2317) 是第一个类别的 logit。
  • 第二个值 (-0.4521) 是第二个类别的 logit。

注意:您可以使用 softmax 函数将这些 logits 转换为概率

示例代码

输出

 
tensor([[0.8718, 0.1282]])   

这意味着模型为第一个类别分配了 87.18% 的概率,为第二个类别分配了 12.82% 的概率,表明预测为积极情感。

说明

所示示例使用预训练的 BERT 模型进行情感分析,以及 Hugging Face transformers 库。首先,模型和分词器从 bert-base-uncased 检查点加载。 "This is a great product!" 是输入文本,分词器将其转换为模型可以理解的 token ID。

一旦文本被分词并格式化为张量,就通过 model(inputs) 语法传递给模型。模型返回 logits,它们是表示其每个类别预测的原始分数。

此模型用于二分类,预测一种积极或消极的态度。在应用 softmax 技术(将其转换为概率)之前,logits 表示模型对每个类别的确定程度。

为了从 logits 创建概率分布,使用了 Softmax。模型在此实例中预测积极情感,如分别为 87.18% 和 12.82% 的较高和较低概率所示。使用预训练模型,此示例显示了执行快速文本分类任务所需的代码量很少。

示例 2

以下是使用 Hugging Face `transformers` 包,利用预训练的 GPT-2 模型进行文本生成的示例

对于文本补全、故事创作和对话构建等任务,自回归语言模型 GPT-2 非常适合。此示例说明了 GPT-2 的用法生成文本。GPT-2 预测将遵循特定模式的单词。

代码

输出

 
Once upon a time in a distant land, there lived a young princess who dreamed of exploring the world beyond her kingdom. One day, she packed her belongings and set off on an adventure, encountering magical creatures and mysterious lands along the way.   

说明

此示例利用 Hugging Face transformers 库,通过预训练的 GPT-2 模型生成文本。GPT-2 是一个语言生成模型,它根据提供的上下文预测序列中的下一个单词。

如果使用 from_pretrained 加载分词器和模型,您就可以使用预训练的 GPT-2 模型。接下来,输入文本 "Once upon a time in a distant land" 被分词并作为张量返回给模型。

使用 model.generate 方法生成输入的延续,其中最大长度设置为 50 个 token。no_repeat_ngram_size 参数可确保避免重复序列。

生成后,通过跳过特殊 token 将输出序列解码回人类可读的文本。打印最终结果,展示了如何根据初始输入提示将 GPT-2 用于文本补全或讲故事等任务。

讨论在 Python 中使用 transformers 库的一些优点和缺点

在下一节中,我们将讨论 transformers 库的主要优点以及一些缺点。

使用 transformers 库的一些优点

  • 对于使用 GPT-2 等模型的文本生成,Hugging Face transformers 库提供了许多优势。可访问性是其主要优势之一。使用最少的代码加载 GPT-2、BERT 等预训练模型时,无需从头开始创建或训练复杂的模型。为了构建复杂的自然语言处理 (NLP) 应用程序,所需的时间和计算资源更少。
  • Transformers 能够根据自定义数据集对模型进行微调,从而能够针对特定任务进行调整,从而确保在独特用例上获得更好的性能。此外,该库还内置了分词、模型推理和优化工具等功能,可以轻松高效地处理复杂过程。
  • 预训练模型以及文档和社区支持为研究和生产级应用程序提供了坚实的基础。

使用 transformers 库的一些缺点

  • 除了许多优点之外,Hugging Face transformers 库还存在缺点。一个重要的缺点是资源密集。由于 transformer 模型需要大量内存和处理能力,因此那些无法访问高性能硬件(如 GPU)的用户可能会发现使用 GPT-2 和 BERT 等大型模型很困难。
  • 另一个限制是微调模型时的复杂性。虽然预训练模型易于获取,但在特定任务上对它们进行微调可能需要仔细调整超参数和大量的领域知识。
  • 此外,transformer 模型在实时应用中通常速度较慢,尤其是在生成长文本序列时,这归因于它们的自回归性质。此外,transformer 模型的大小会增加推理时间,尤其是在低延迟至关重要的场景中。这可能会成为实时或边缘应用的障碍。此外,虽然该库支持多种语言,但某些不太常见的语言可能没有相同的模型性能或支持水平。

结论

总之,Hugging Face transformers 库对于开发人员和研究人员都非常易于访问,为文本生成、分类和翻译等自然语言处理任务提供了强大而灵活的工具集。用户可以通过更少的代码利用最先进的技术,这得益于其与 GPT-2 等预训练模型的集成,从而节省了时间和计算资源。像推理、内置分词以及与 TensorFlow 和 PyTorch 的互操作性等功能进一步增强了其适应性。

然而,该库仍然存在一些严重的问题。Transformer 需要大量内存和计算能力,尤其是 GPT-2 和 BERT 等大型设备。这种微调需要对模型和特定任务都有深入的了解,这可能具有挑战性。尽管如此,像 GPT-2 这样的自回归模型不太适合实时应用,因为它们可以较慢地生成长文本序列。