Press "Enter" to skip to content

通过微调来适应下游任务的BERT

介绍

适应下游任务的BERT包括利用预训练的BERT模型,并在其上添加一层并对其进行目标任务的训练以定制化。这种技术允许模型从用于训练的数据中了解任务细节,同时利用预训练的BERT模型的广泛语言表达知识。使用Python中的hugging face transformers包来微调BERT。描述您的训练数据,包括输入文本和标签。根据您的数据使用BertForSequenceClassification类的fit()函数来微调预训练的BERT模型以用于下游任务。

学习目标

  1. 本文的目标是深入探讨BERT的微调。
  2. 通过详细分析,突出微调对下游任务的好处。
  3. 全面阐述下游的操作机制。
  4. 为下游活动的BERT微调提供完整的顺序概述。

BERT如何进行微调?

通过训练一个新的层,将预训练模型与所需工作的训练数据适应到特定的下游任务,从而进行BERT的微调。这个过程使模型能够获得任务特定的知识,并提升在目标任务上的性能。

BERT微调过程中的主要步骤

1:使用hugging face transformers库加载预训练的BERT模型和分词器。

import torch

# 根据可用性选择合适的设备(CUDA或CPU)
gpu_available = torch.cuda.is_available()
device = torch.device("cuda" if gpu_available else "cpu")

# 使用不同的分词器
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')

# 使用自定义函数加载模型
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained('bert-base-uncased')

model.to(device)

2:指定特定目标任务的训练数据,包括输入文本及其对应的标签。

# 指定输入文本和对应的标签
input_text = "这是一个示例输入文本"
labels = [1]

3:使用BERT分词器对输入文本进行分词。

# 对输入文本进行分词
input_ids = torch.tensor(tokenizer.encode(input_text)).unsqueeze(0)

4:将模型设置为训练模式。

# 将模型设置为训练模式
model.train()

步骤5:为了获得预训练的BERT模型的微调,我们使用BertForSequenceClassification类的方法。它包括使用目标任务的训练数据来训练预训练的BERT模型的新层。

# 设置您的数据集、批量大小和其他训练超参数
dataset_train = ...
batch_size = 32
num_epochs = 3
learning_rate = 2e-5

# 为训练集创建数据加载器
train_dataloader = torch.utils.data.DataLoader(dataset_train, batch_size=batch_size)
model.fit(train_dataloader, num_epochs=num_epochs, learning_rate=learning_rate)

步骤6:研究经过微调的BERT模型在特定目标任务上的表现。

# 将模型切换到评估模式
model.eval()

# 计算输入文本的逻辑回归(非标准化概率)
with torch.no_grad():
    logits = model(input_ids)

# 使用逻辑回归生成输入文本的预测结果
predictions = logits.argmax(dim=-1)

accuracy = ...

这些是微调BERT用于下游任务的主要步骤。您可以将其作为基础,并根据您的具体用例进行定制。

微调BERT使模型能够获得任务特定的信息,提升其在目标任务上的性能。当目标任务涉及相对较小的数据集时,微调与小数据集一起使用尤其有价值,因为微调使模型能够学习从单独的预训练BERT模型中无法获得的任务特定信息。

在微调期间哪些层会发生修改?

在微调期间,只有预训练的BERT模型附加的补充层的权重会进行更新。预训练的BERT模型的权重保持不变。因此,只有添加的层在整个微调过程中发生修改。

通常,附加的层作为分类层在预训练的BERT模型结果之后运行,并为最终任务中的每个类别生成logits。目标任务的训练数据用于训练附加的层,使其获取特定于任务的信息并提高模型在目标任务上的性能。

总之,在微调期间,预训练的BERT模型上方的添加层会发生修改。预训练的BERT模型保持固定的权重。因此,在训练过程中只有添加的层会进行更新。

下游任务

下游任务包括各种自然语言处理(NLP)操作,使用预训练的语言重建模型(如BERT)。以下是几个这些任务的例子。

文本分类

文本分类涉及将文本分配到预定义的类别或标签中。例如,可以训练一个文本分类模型将电影评论分类为积极或消极。

使用BertForSequenceClassification库将BERT用于文本分类。该类使用输入数据(如单词或段落)为每个类别生成logits。

通过微调来适应下游任务的BERT 四海 第1张

自然语言推理

自然语言推理,也称为文本蕴涵(RTE),确定给定前提文本和假设文本之间的关系。要将BERT用于自然语言推理,可以使用hugging face transformers库提供的BertForSequenceClassification类。该类接受一对前提和假设文本作为输入,并生成每个类别(蕴涵,矛盾和中性)的logits(非归一化概率)作为输出。

通过微调来适应下游任务的BERT 四海 第2张

命名实体识别

命名实体识别过程包括在文本中查找和划分定义的项目,例如人物和地点。hugging face transformers库提供了BertForTokenClassification类,用于对BERT进行命名实体识别的微调。该类接受输入文本并为输入文本中的每个标记生成logits,指示标记的类别。

通过微调来适应下游任务的BERT 四海 第3张

问答

回答问题涉及根据给定的上下文生成人类语言的回应。要对BERT进行问答的微调,可以使用hugging face transformers库提供的BertForQuestionAnswering类。该类接受上下文和问题作为输入,并在上下文中提供答案的开始和结束索引作为输出。

研究人员不断探索在各种NLP任务中利用BERT和其他语言表示模型的新方法。预训练的语言表示模型(如BERT)使得能够完成各种下游任务,例如上述例子。还可以将经过微调的BERT模型应用于许多其他NLP任务。

通过微调来适应下游任务的BERT 四海 第4张

结论

当对BERT进行微调时,通过使用有限的标记数据更新其边界,将预训练的BERT模型调整到特定的工作或领域中。例如,当利用BERT进行情感分析时,微调需要包含文本及其相应情感标签的数据集。这通常涉及在BERT编码器之上添加一个任务特定的层,并以端到端的方式训练整个模型,使用适当的损失函数和优化器。

要点

  • 在适应BERT用于下游任务时,利用微调技术通常可以提高特定任务上自然语言处理模型的效率。
  • 该过程涉及通过使用目标任务的训练数据,在预训练模型之上训练一个新的层,使模型能够获取特定于任务的知识并提高在目标任务上的性能。
  • 总体而言,在特定任务上微调BERT可能是增加NLP模型效率的有效方法。
  • 它使模型能够利用预训练BERT模型对一般语言表示的理解,同时从目标任务的训练数据中获取特定于任务的信息。

常见问题

本文中显示的媒体内容不归Analytics Vidhya所有,仅由作者自行决定使用。

Leave a Reply

Your email address will not be published. Required fields are marked *