迁移学习是深度学习中最强大的技术之一,尤其是在使用大型语言模型 (LLM) 时。这些模型(例如 Flan-T5)经过大量数据的预训练,使它们能够泛化许多语言任务。我们可以针对特定任务(例如回答问题)微调这些预先训练的模型,而不是从头开始训练模型。
在本指南中,我们将引导您了解如何执行迁移学习 在 Flan-T5-large 上使用 TensorFlow 和 Hugging Face。我们将在 SQuAD(斯坦福问答数据集) 上微调此模型,这是一个流行的数据集,用于训练模型以根据给定上下文回答问题。
我们的要点涵盖内容包括:
Hugging Face 是一个流行的平台和库,可简化 自然语言处理 (NLP) 中强大模型的使用。关键组件包括:
使用 Hugging Face,您无需从头开始构建模型。它提供了对各种预训练模型的访问,包括BERT、GPT-3和T5,这显着减少了开发 NLP 解决方案所需的时间和资源。通过利用这些模型,您可以针对特定的下游任务(例如问答、文本分类和摘要)快速对其进行微调。
Hugging Face 提供了各种模型类,但 AutoModel 是最灵活且使用最广泛的模型之一。 AutoModel API 抽象化了手动选择和加载模型的复杂性。你不需要事先知道每个模型的具体类别; AutoModel 将根据模型名称加载正确的架构。
例如,AutoModelForSeq2SeqLM 用于序列到序列模型,例如 T5 或 BART,通常用于翻译、摘要等任务,以及问答。 AutoModel 的美妙之处在于它与模型无关,这意味着您可以轻松更换模型并仍然使用相同的代码。
以下是它在实践中的工作原理:
from transformers import TFAutoModelForSeq2SeqLM, AutoTokenizer# Load the pre-trained Flan-T5-large model and tokenizermodel_name = "google/flan-t5-large"model = TFAutoModelForSeq2SeqLM.from_pretrained(model_name) # Load modeltokenizer = AutoTokenizer.from_pretrained(model_name) # Load tokenizer
AutoModel 根据模型名称动态加载正确的模型架构(在本例中为 flan-t5-large)。这种灵活性使开发过程更加顺畅和更快,因为您无需担心手动指定每个模型的架构。
了解如何T5 有效,我们首先来分解一下它的架构。 T5 代表 Text-to-Text Transfer Transformer,由 Google 于 2019 年推出。T5 背后的关键思想是每个 NLP 任务都可以转化为文本到文本问题,无论是翻译、摘要,甚至问答。
T5 的关键组件:
以下是 T5 如何应用于问答任务的示例:
Input: "question: What is T5? context: T5 is a text-to-text transfer transformer developed by Google."Output: "T5 is a text-to-text transfer transformer."
T5 文本到文本框架的优点在于其灵活性。您只需重新表述输入即可将相同的模型架构用于各种任务。这使得 T5 具有高度通用性,适用于一系列 NLP 任务。
T5 已在名为 C4(Colossal Clean Crawled Corpus),这使它对语言结构有了扎实的理解。通过迁移学习,我们可以微调这个预训练模型以专门处理特定任务,例如使用 SQuAD 数据集进行问答。通过利用 T5 的预训练知识,我们只需要调整最后一层即可使其在我们的任务中表现良好,从而减少训练时间和计算资源。
加载和预处理 SQuAD 数据集现在我们有了模型,我们需要数据来对其进行微调。我们将使用SQuAD 数据集,这是一个基于文本段落的问答对的集合。
from transformers import TFAutoModelForSeq2SeqLM, AutoTokenizer# Load the pre-trained Flan-T5-large model and tokenizermodel_name = "google/flan-t5-large"model = TFAutoModelForSeq2SeqLM.from_pretrained(model_name) # Load modeltokenizer = AutoTokenizer.from_pretrained(model_name) # Load tokenizer
SQuAD 数据集广泛用于问答任务中的模型训练。数据集中的每个数据点都包含一个上下文(一段文本)、一个问题和相应的答案,这是找到的一段文本
在将数据输入模型之前,我们需要对其进行标记。标记化将原始文本转换为模型可以理解的数值(标记)。对于 T5,我们必须将输入格式化为问题和上下文的组合。
Input: "question: What is T5? context: T5 is a text-to-text transfer transformer developed by Google."Output: "T5 is a text-to-text transfer transformer."
此函数标记 问题上下文 对(输入)和 答案(输出)。标记化对于将原始文本转换为模型可以处理的标记化序列是必要的。
这里是我们执行迁移学习的地方。为了提高微调效率,我们冻结编码器和解码器层,并仅解冻最后一层。这种策略确保计算繁重的层保持完整,同时允许最后一层专门负责回答问题的任务。
from datasets import load_dataset# Load the SQuAD datasetsquad = load_dataset("squad") train_data = squad["train"] valid_data = squad["validation"]
解释:
模型微调后,测试它在验证集上的表现非常重要。
# Preprocessing function to tokenize inputs and outputsdef preprocess_function(examples): # Combine the question and context into a single string inputs = ["question: " + q + " context: " + c for q, c in zip(examples["question"], examples["context"])] model_inputs = tokenizer(inputs, max_length=512, truncation=True, padding="max_length", return_tensors="tf") # Tokenize the answer (label) labels = tokenizer(examples["answers"]["text"][0], max_length=64, truncation=True, padding="max_length", return_tensors="tf") model_inputs["labels"] = labels["input_ids"] return model_inputs# Preprocess the datasettrain_data = train_data.map(preprocess_function, batched=True) valid_data = valid_data.map(preprocess_function, batched=True)
此代码采用示例问题-上下文对,将其标记化,并使用微调模型生成答案。分词器将输出解码回人类可读的文本。
虽然我们已经介绍了微调的基础知识,但还有几种方法可以进一步改进您模型的性能:
在本指南中,我们演练了微调预训练的 LLM (Flan-T5-大)使用 TensorFlow 和 Hugging Face。通过冻结计算量大的编码器和解码器层并仅微调最后一层,我们优化了训练过程,同时仍然使模型适应 SQuAD 数据集上的特定问答任务。
T5 的文本到文本框架使其高度灵活,可适应各种 NLP 任务,而 Hugging Face 的 AutoModel 抽象简化了使用这些模型的过程。通过了解 T5 等模型背后的架构和原理,您可以将这些技术应用于各种其他 NLP 任务,使迁移学习成为机器学习工具包中的强大工具。
以上是法学硕士:使用 TensorFlow、Keras、Hugging Face 进行迁移学习的详细内容。更多信息请关注PHP中文网其他相关文章!