【深度学习】Hugging Face Transformers:预训练语言模型与迁移学习

摘要:本文介绍了Hugging Face Transformers库,重点介绍了预训练语言模型和迁移学习的概念。我们将通过示例来说明如何使用Transformers库进行文本分类、生成等任务,以及如何用自己的数据微调预训练模型。

1. Hugging Face Transformers 简介

Hugging Face Transformers 是一个用于自然语言处理(NLP)的开源库,提供了各种预训练模型。这些模型被广泛应用于各种任务,如文本分类、命名实体识别、问答、文本生成等。Transformers库易于使用,可方便地集成到现有的深度学习框架,如PyTorch和TensorFlow。

2. 预训练语言模型

预训练语言模型是在大规模文本数据上训练的深度学习模型。这些模型学习了文本的潜在结构,包括语法、句法和语义等。预训练模型可以用作迁移学习的基础,为各种NLP任务提供丰富的特征表示。一些著名的预训练模型包括BERT、GPT-2、RoBERTa等。

3. 迁移学习与微调

迁移学习是一种利用预训练模型的知识来解决新任务的方法。通过在预训练模型的基础上进行微调,可以快速适应新任务,从而节省大量计算资源。微调是指在新任务的数据上对预训练模型的权重进行细微调整,使模型能够适应新任务。

4. 使用Transformers进行文本分类

from transformers import BertTokenizer, BertForSequenceClassification
import torch

tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")

inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
labels = torch.tensor([1]).unsqueeze(0)
outputs = model(**inputs, labels=labels)
loss = outputs.loss
logits = outputs.logits

5. 使用Transformers进行文本生成

from transformers import GPT2LMHeadModel, GPT2Tokenizer

tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")

inputs = tokenizer.encode("Once upon a time", return_tensors="pt")
outputs = model.generate(inputs, max_length=50, num_return_sequences=5)

for i, output in enumerate(outputs):
    print(f"Generated text {
      
      i+1}: {
      
      tokenizer.decode(output)}")

6. 在自己的数据上微调预训练模型

以下是使用Hugging Face Transformers在自定义数据集上进行微调的示例:

from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
import torch
import numpy as np
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split

# 加载数据
newsgroups_data = fetch_20newsgroups(subset="all", remove=("headers", "footers", "quotes"))
X_train, X_test, y_train, y_test = train_test_split(newsgroups_data.data, newsgroups_data.target, test_size=0.2)

# 预处理函数
def preprocess(texts, labels, tokenizer):
    input_ids = tokenizer(texts, truncation=True, padding=True, return_tensors="pt")
    return input_ids, torch.tensor(labels)

tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=20)

# 预处理数据
X_train_processed, y_train_processed = preprocess(X_train, y_train, tokenizer)
X_test_processed, y_test_processed = preprocess(X_test, y_test, tokenizer)

# 设置训练参数
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    logging_steps=100,
    evaluation_strategy="epoch",
)

# 训练模型
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=torch.utils.data.TensorDataset(X_train_processed, y_train_processed),
    eval_dataset=torch.utils.data.TensorDataset(X_test_processed, y_test_processed),
)
trainer.train()

7. 总结

本文介绍了Hugging Face Transformers库,包括预训练语言模型和迁移学习。我们通过实际代码示例演示了如何使用Transformers进行文本分类、生成等任务,以及如何在自定义数据集上微调预训练模型。

8. 参考文献

  1. Hugging Face Transformers官方文档
  2. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  3. The Illustrated Transformer

猜你喜欢

转载自blog.csdn.net/qq_33578950/article/details/130159871