如何使用Hugging Face Transformers微调F5以回答问题?

译文 精选
人工智能
T5是一个功能强大的模型,旨在帮助计算机理解和生成人类语言。T5的全称是“文本到文本转换器”。它是一个可以完成许多语言任务的模型。T5将所有任务视为文本到文本问题。我们在本文中将学习如何优化T5以回答问题。

译者 | 布加迪

审校 | 重楼

使用Hugging Face Transformers对T5模型进行微调以处理问题回答任务很简单:只需为模型提供问题和上下文,它就能学会生成正确的答案。

T5是一个功能强大的模型,旨在帮助计算机理解和生成人类语言。T5的全称是“文本到文本转换器”。它是一个可以完成许多语言任务的模型。T5将所有任务视为文本到文本问题。我们在本文中将学习如何优化T5以回答问题。

安装所需的库

首先,我们必须安装必要的库:

pip install transformers datasets torch
  • Transformer:提供T5模型及其他Transformer架构的Hugging Face库。
  • 数据集:访问和处理数据集的库。
  • Torch:帮助构建和训练神经网络的深度学习库。

加载数据集

为了对T5进行微调以回答问题,我们将使用BoolQ数据集,该数据集含有答案为二进制(是/否)的问题/答案对。你可以使用Hugging Face的数据集库来加载BoolQ数据集。

from datasets import load_dataset

# Load the BoolQ dataset
dataset = load_dataset("boolq")

# Display the first few rows of the dataset
print(dataset['train'].to_pandas().head())

预处理数据

T5要求输入采用特定的格式。我们需要更改数据集,以便问题和答案都是文本格式。输入格式为问题:上下文:,输出将是答案。现在,我们需要加载T5模型及其分词器(Tokenizer)。分词器将把我们的文本输入转换成模型可以理解的词元ID(token ID)。接下来,我们需要对输入和输出数据进行分词。分词器将文本转换成输入ID和注意力掩码,这是训练模型所必需的。

from transformers import T5Tokenizer, T5ForConditionalGeneration, Trainer, TrainingArguments

# Initialize the T5 tokenizer and model (T5-small in this case)
tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")

# Preprocessing the dataset: Prepare input-output pairs for T5
def preprocess_function(examples):
    inputs = [f"Question: {question}  Passage: {passage}" for question, passage in zip(examples['question'], examples['passage'])]
    targets = ['true' if answer else 'false' for answer in examples['answer']]
    
    # Tokenize inputs and outputs
    model_inputs = tokenizer(inputs, max_length=512, truncation=True, padding='max_length')
    labels = tokenizer(targets, max_length=10, truncation=True, padding='max_length')
    model_inputs["labels"] = labels["input_ids"]
    
    return model_inputs

# Preprocess the dataset
tokenized_dataset = dataset.map(preprocess_function, batched=True)

微调T5

现在数据已经准备好了,我们可以对T5模型进行微调了。Hugging的Trainer API通过处理训练循环、优化和评估简化了这个过程。

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    num_train_epochs=3,
    weight_decay=0.01,
    logging_dir="./logs",
    logging_steps=10,
)

# Initialize the Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset["train"],
    eval_dataset=tokenized_dataset["validation"],
)

# Fine-tune the model
trainer.train()

评估模型

在微调之后,重要的是在验证集上评估模型,看看它如何很好地回答问题。你可以使用Trainer的评估方法。

# Evaluate the model on the validation dataset
eval_results = trainer.evaluate()

# Print the evaluation results
print(f"Evaluation results: {eval_results}")
Evaluation results:  {‘eval_loss’: 0.03487783297896385, ‘eval_runtime’: 37.2638, ‘eval_samples_per_second’: 87.753, ‘eval_steps_per_second’: 10.976, ‘epoch’: 3.0}

进行预测

一旦T5模型经过微调和评估,我们就可以用它来预测新的问题回答任务。为此,我们可以准备一个新的输入(问题和上下文),对其进行分词,从模型生成输出(答案)。

from transformers import T5Tokenizer, T5ForConditionalGeneration

# Load the fine-tuned model and tokenizer
model = T5ForConditionalGeneration.from_pretrained("./results")
tokenizer = T5Tokenizer.from_pretrained("t5-base")

# Prepare a new input
input_text = "question: Is the sky blue? context: The sky is blue on a clear day."

# Tokenize the input
input_ids = tokenizer(input_text, return_tensors="pt").input_ids

# Generate the answer using the model
output_ids = model.generate(input_ids)

# Decode the generated tokens to get the predicted answer
predicted_answer = tokenizer.decode(output_ids[0], skip_special_tokens=True)

# Print the predicted answer
print(f"Predicted answer: {predicted_answer}")  # Predicted answer: yes

结论

总之,微调T5可以帮助它更好地回答问题。我们学习了如何准备数据和训练模型。使用Hugging库使这个过程更容易。训练后,T5可以听懂问题并给出正确的答案。这对聊天机器人或搜索引擎等许多应用大有帮助。

原文标题:How to Fine-Tune T5 for Question Answering Tasks with Hugging Face Transformers作者:Jayita Gulati

责任编辑:姜华 来源: 51CTO内容精选
相关推荐

2024-06-21 08:42:54

BERTNLP自然语言处理

2024-09-26 10:42:20

2024-11-15 08:24:41

2016-03-03 14:48:51

F5应用交付

2015-07-23 15:50:51

F5移动互联网

2014-12-04 16:02:05

F5

2011-07-21 10:34:55

F5ARX

2018-03-09 14:46:09

2012-05-09 09:25:56

F5SPDY网关

2024-05-06 12:22:00

AI训练

2024-08-28 08:25:25

Python预训练模型情绪数据集

2018-05-14 16:41:45

2021-09-29 09:09:20

F5收购Threat Stac

2010-05-10 14:07:26

负载均衡器

2013-10-24 11:14:51

F5应用交付OpenStack 基

2019-03-13 09:40:35

F5Nginx协议

2023-10-08 09:00:00

LLMGitHub人工智能

2011-06-15 14:39:51

F5应用交付

2014-09-26 15:01:01

2010-04-26 15:25:40

点赞
收藏

51CTO技术栈公众号