微调 BERT 进行文本分类

一个带有 Python 代码的可破解示例尽管当今的 100B+ 参数转换器模型是 AI 领域最先进的模型,但我们仍然可以使用较小的(<1B 参数)模型完成很多工作。在本文中,我将介绍一个这样的示例,即微调 BERT(1.1 亿个参数)以对网络钓鱼 URL 进行分类。我将首先介绍关键概念,然后分享示例 Python 代码。图片来自 Canva。微调微调涉及通过额外的训练将预训练模型调整到特定用例。预训练模型是通过无监督学习开发的,从而无需大规模标记数据集。然后,与从头开始训练相比,经过微调的模型可以利用预先训练的模型表示来显着降低训练成本并提高模型性能 [1]。微调大型语言模型 (LLM)将训练过程分为多个阶段,造就了当今最先进的 Transformer 模型,例如 GPT-4o、Claude 和 Llama 3.2。它还实现了人工智能的民主化,因为昂贵的模型预训练工作可以由专门的研究实验室完成,然后他们可以将这些模型公开用于微调。BERT虽然模型微调在 ChatGPT 之后获得了极大的欢迎,但它至少从 2015 年就已经存在了 [2]。专为微调开发的早期语言模型之一是 Google 的 BERT 模型,该模型在两个无监督任务上进行了预训练:1) 掩蔽语言建模 (MLM) 和 2) nex

来源:走向数据科学

我们将首先导入一些方便的库。

从数据集导入数据集,来自变形金刚的数据集导入autotoNizer,automodelforsequersececececrification,trieberArguments,Trainerimport evalueimport numpy numpy aS npfrom transformers import dataCollat​​orWithAteratorWithPadding

接下来,我们将加载培训数据集。它由3,000个文本标签对组成,并具有70-15-15列车测试验证拆分。数据最初来自此处(开放数据库许可证)。

在这里
dataset_dict = load_dataset(“ shawhin/eThing site-classification”)

变压器库使其非常容易加载和调整预训练的模型。这就是Bert模型的外观。

负载和适应预训练的模型
#定义预训练的模型Pathmodel_path =“ Google-Bert/Bert-Base-Incuncy'#负载模型TokenizerTokenizer = autotokenizer.from_preteraine.from_pretrataining(model_path)#带有二进制分类模型的二进制分类模型head2label = head2label = {0:0:“ AutomodelForSequencececrification.from_pretrate(model_path,num_labels = 2,id2label = id2label,label2ID = label2ID,)

当我们加载这样的模型时,默认情况下将将所有参数设置为可训练的设置。但是,培训所有1.1亿参数将在计算上是昂贵且可能不必要的。

相反,我们可以冻结大多数模型参数,只训练模型的最终层和分类头。

仅训练模型的最后一层和分类头
#冻结所有基本模型参数,用于名称,param in model.base_model.named_pa​​rameters():param.requires_grad = false#unfreeze base Model Model Model pioming layers layers layers for name ins.base_model.model.named_pa​​remet.parameters()
预处理我们的数据 数据碰撞器
培训结果。作者的图像。
奖金

结论

在llms👇