当前位置:   article > 正文

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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)}")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/221526
推荐阅读
相关标签
  

闽ICP备14008679号