首页  >  文章  >  科技周边  >  法学硕士:使用 TensorFlow、Keras、Hugging Face 进行迁移学习

法学硕士:使用 TensorFlow、Keras、Hugging Face 进行迁移学习

PHP中文网
PHP中文网原创
2024-10-18 17:52:44277浏览

迁移学习是深度学习中最强大的技术之一,尤其是在使用大型语言模型 (LLM) 时。这些模型(例如 Flan-T5)经过大量数据的预训练,使它们能够泛化许多语言任务。我们可以针对特定任务(例如回答问题)微调这些预先训练的模型,而不是从头开始训练模型。

在本指南中,我们将引导您了解如何执行迁移学习Flan-T5-large 上使用 TensorFlowHugging Face。我们将在 SQuAD(斯坦福问答数据集) 上微调此模型,这是一个流行的数据集,用于训练模型以根据给定上下文回答问题。

我们的要点涵盖内容包括:

  • 详细介绍 Hugging Face 及其在 NLP 中的帮助。
  • 代码的分步说明,包括如何加载和微调Flan-T5-large 模型。
  • 冻结大型编码器和解码器层,仅解冻最后一层以进行高效微调。
  • SQuAD 数据集的简要介绍以及如何为我们的任务处理它。
  • 深入解释 T5 架构以及 Hugging Face 的 AutoModel 的工作原理。
  • 改进微调过程以获得更好性能的方法。

什么是 Hugging Face?

Hugging Face 是一个流行的平台和库,可简化 自然语言处理 (NLP) 中强大模型的使用。关键组件包括:

  1. 模型中心:预训练模型的存储库,可针对特定任务进行微调。
  2. Transformers Library:提供轻松加载和微调模型的工具。
  3. 数据集库:快速轻松地加载数据集的方法,例如SQuAD,用于训练。

使用 Hugging Face,您无需从头开始构建模型。它提供了对各种预训练模型的访问,包括BERTGPT-3T5,这显着减少了开发 NLP 解决方案所需的时间和资源。通过利用这些模型,您可以针对特定的下游任务(例如问答、文本分类和摘要)快速对其进行微调。

什么是 AutoModel?

Hugging Face 提供了各种模型类,但 AutoModel 是最灵活且使用最广泛的模型之一。 AutoModel API 抽象化了手动选择和加载模型的复杂性。你不需要事先知道每个模型的具体类别; AutoModel 将根据模型名称加载正确的架构。

例如,AutoModelForSeq2SeqLM 用于序列到序列模型,例如 T5BART,通常用于翻译、摘要等任务,以及问答。 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 有效,我们首先来分解一下它的架构。 T5 代表 Text-to-Text Transfer Transformer,由 Google 于 2019 年推出。T5 背后的关键思想是每个 NLP 任务都可以转化为文本到文本问题,无论是翻译、摘要,甚至问答。

T5 的关键组件:

  • 编码器-解码器架构:T5 是一个序列到序列( Seq2Seq)模型。编码器处理输入文本,而解码器生成输出。
  • 任务无关设计:T5 将每个任务转换为文本到文本的问题。例如,对于问答,输入的结构为“问题:上下文:”,模型的任务是将答案预测为文本。
  • 预使用跨度损坏进行训练: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 非常适合迁移学习

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"]

解释:

  • 冻结编码器和解码器层:我们冻结这些层,因为它们非常大并且已经对大量数据进行了预训练。对它们进行微调需要大量的计算资源和时间。通过冻结它们,我们保留了它们的一般语言理解,并专注于微调最后一层。
  • 解冻最后一层:这允许模型从 SQuAD 学习特定于任务的信息数据集。最后一层将负责根据问题上下文对生成答案。
  • 微调:我们使用较小的学习率并训练模型 3 个周期来适应它

评估模型

模型微调后,测试它在验证集上的表现非常重要。

 # 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)

此代码采用示例问题-上下文对,将其标记化,并使用微调模型生成答案。分词器将输出解码回人类可读的文本。

改进微调的方法

虽然我们已经介绍了微调的基础知识,但还有几种方法可以进一步改进您模型的性能:

  1. 数据增强:使用数据增强技术来增加训练数据的大小。这可能包括解释问题或稍微修改上下文以创建更多训练样本。
  2. 使用迁移学习技术:探索其他迁移学习技术,例如参数高效微调(PEFT) ),它允许对模型参数的较小子集进行微调。
  3. 优化:尝试使用更高级的优化器,例如 AdamWLAMB 为了更好的收敛。此外,请考虑尝试不同的学习率、批量大小和预热步骤。
  4. 超参数实验:您可以尝试学习率、epoch 数和 dropout 率等超参数。使用小型验证集来调整这些超参数。
  5. 利用 TPU 或多 GPU 训练:如果您正在处理大型数据集或模型,请考虑使用 TPU(张量处理单元)或多个 GPU 来加速训练过程。

结论

在本指南中,我们演练了微调预训练的 LLM (Flan-T5-大)使用 TensorFlowHugging Face。通过冻结计算量大的编码器和解码器层并仅微调最后一层,我们优化了训练过程,同时仍然使模型适应 SQuAD 数据集上的特定问答任务。

T5 的文本到文本框架使其高度灵活,可适应各种 NLP 任务,而 Hugging Face 的 AutoModel 抽象简化了使用这些模型的过程。通过了解 T5 等模型背后的架构和原理,您可以将这些技术应用于各种其他 NLP 任务,使迁移学习成为机器学习工具包中的强大工具。

 

以上是法学硕士:使用 TensorFlow、Keras、Hugging Face 进行迁移学习的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn