自2018年推出以来,伯特(Bert)改变了自然语言处理。它在情感分析,问题回答和语言推论等任务中表现良好。伯特使用双向训练和基于变压器的自我发挥,引入了一种新的方式来理解文本中的单词之间的关系。但是,尽管取得了成功,但伯特还是有局限性。它在计算效率,处理更长的文本并提供可解释性方面挣扎。这导致了Modernbert的发展,这是一个旨在应对这些挑战的模型。 ModernBert提高了处理速度,更好地处理更长的文本,并为开发人员提供了更大的透明度。在本文中,我们将探讨如何使用Modernbert进行情感分析,强调其特征和对Bert的改进。
学习目标>本文是> > data Science Blogathon的一部分。 >目录
>什么是bert?问题> Modernbert通过结合更有效的算法(例如>> flash注意力 > > > > local-local-lobal inter-local-lobal Entercting注意)来解决这些局限性,从而优化了内存使用量并提高了处理速度。此外,ModernBert引入了增强功能,以通过集成诸如 旋转位置嵌入(ROPE)
>
>现代伯特基碱有22层和1.49亿个参数
>现代伯特·塔尔格(Modernbert-Large)有28层和3.95亿个参数
局部 - 全球交替注意
>仅在每三层之后才能参加完整的输入。这是全球关注。
同时,所有其他层都有一个滑动窗口。在这个滑动窗口中,每个令牌都只能参加最接近的128个令牌。这是当地的关注。旋转位置嵌入(绳索)是一种变压器模型技术,它使用旋转矩阵在序列中编码令牌的位置。它包含了绝对和相对位置信息,调整了注意机制以了解令牌之间的顺序和距离。绳索使用旋转矩阵编码令牌的绝对位置,还记下了相对位置信息或令牌之间的顺序和距离。
毫无定论和测序>通常用于找到最长的令牌,添加毫无意义的填充令牌以填充其余的较短序列以等于其长度。这增加了对无意义令牌的计算。毫无用处可以从序列中删除不必要的填充令牌,减少浪费的计算。
>
>注意:
>我已经使用了A100 GPU在Google Colab上更快地处理。有关更多信息,请参阅:
>通过将情感标签列(标签)重命名为“标签”并删除不必要的列来准备数据集。 >让我们使用f1_score作为度量来评估我们的模型。我们将定义一个函数来处理评估预测并计算其F1分数。这是我们将模型的预测与真实标签进行比较。 >定义超参数和其他配置,用于使用拥抱脸的训练记录来微调模型。让我们理解一些论点:
> Modernbert博客
MODERBERT文档
> Q5。什么是旋转电位嵌入?它们与固定位置嵌入有何不同?与仅捕获绝对位置的固定位置嵌入相反,旋转位置嵌入(绳索)使用旋转矩阵来编码绝对位置和相对位置。绳索在扩展序列中的性能更好。 Q6。 Modernbert的潜在应用是什么? Modernbert的某些应用可以在文本分类,情感分析,问答,指定性识别,法律文本分析,代码理解等领域中进行。 wandb api需要什么以及为什么需要?权重和偏见(W&B)是跟踪,可视化和共享ML实验的平台。它有助于跟踪模型指标,可视化实验数据,共享结果等等。 它有助于监视指标,例如准确性,可视化进度,调整超参数,跟踪模型的版本等。
>步骤2:使用load_dataset函数加载IMDB数据集#install libraries
!pip install git+https://github.com/huggingface/transformers.git datasets accelerate scikit-learn -Uqq
!pip install -U transformers>=4.48.0
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer,AutoModelForMaskedLM,AutoConfig
from datasets import load_dataset
>步骤3:tokenization
使用预先训练的现代基准词架令牌化数据集。此过程将文本转换为适合模型的数值输入。命令“ Tokenized_test_dataset [0]”将打印标记测试数据集的第一个示例,包括标记输入,例如输入ID和标签。
#Load the dataset
from datasets import load_dataset
imdb = load_dataset("imdb")
#print the first test sample
imdb["test"][0]
>步骤4:初始化现代伯特基本模型的情感分类
>
#install libraries
!pip install git+https://github.com/huggingface/transformers.git datasets accelerate scikit-learn -Uqq
!pip install -U transformers>=4.48.0
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer,AutoModelForMaskedLM,AutoConfig
from datasets import load_dataset
>步骤5:准备数据集
#Load the dataset
from datasets import load_dataset
imdb = load_dataset("imdb")
#print the first test sample
imdb["test"][0]
步骤6:定义计算指标
#initialize the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base")
model = AutoModelForMaskedLM.from_pretrained("answerdotai/ModernBERT-base")
#define the tokenizer function
def tokenizer_function(example):
return tokenizer(
example["text"],
padding="max_length",
truncation=True,
max_length=512, ## max length can be modified
return_tensors="pt"
)
#tokenize training and testing data set based on above defined tokenizer function
tokenized_train_dataset = imdb["train"].map(tokenizer_function, batched=True)
tokenized_test_dataset = imdb["test"].map(tokenizer_function, batched=True)
#print the tokenized output of first test sample
print(tokenized_test_dataset[0])
>步骤7:设置培训参数
#initialize the model
config = AutoConfig.from_pretrained("answerdotai/ModernBERT-base")
model = AutoModelForSequenceClassification.from_config(config)
>使用培训师类执行模型培训和评估过程。
#data preparation step -
train_dataset = tokenized_train_dataset.remove_columns(['text']).rename_column('label', 'labels')
test_dataset = tokenized_test_dataset.remove_columns(['text']).rename_column('label', 'labels')
>步骤9:评估
在测试数据集上评估训练的模型。
import numpy as np
from sklearn.metrics import f1_score
# Metric helper method
def compute_metrics(eval_pred):
predictions, labels = eval_pred
predictions = np.argmax(predictions, axis=1)
score = f1_score(
labels, predictions, labels=labels, pos_label=1, average="weighted"
)
return {"f1": float(score) if score == 1 else score}
步骤10:保存微调模型
>保存微调模型和代币器以进行进一步的重复使用。
>
#define training arguments
train_bsz, val_bsz = 32, 32
lr = 8e-5
betas = (0.9, 0.98)
n_epochs = 2
eps = 1e-6
wd = 8e-6
training_args = TrainingArguments(
output_dir=f"fine_tuned_modern_bert",
learning_rate=lr,
per_device_train_batch_size=train_bsz,
per_device_eval_batch_size=val_bsz,
num_train_epochs=n_epochs,
lr_scheduler_type="linear",
optim="adamw_torch",
adam_beta1=betas[0],
adam_beta2=betas[1],
adam_epsilon=eps,
logging_strategy="epoch",
eval_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
bf16=True,
bf16_full_eval=True,
push_to_hub=False,
)
>这里:0表示负面审查,1表示积极的审查。在我的新示例中,输出应为[0,1],因为无聊表示负面评论(0),而壮观的意见则表示为1,因此将以输出为1。
。
#Create a Trainer instance
trainer = Trainer(
model=model, # The pre-trained model
args=training_args, # Training arguments
train_dataset=train_dataset, # Tokenized training dataset
eval_dataset=test_dataset, # Tokenized test dataset
compute_metrics=compute_metrics, # Personally, I missed this step, my output won't show F1 score
)
现代伯特
虽然Modernbert对传统Bert进行了一些改进,但它仍然存在一些局限性:
>
钥匙要点现代伯特通过修复效率低下和有限的上下文处理等问题来改善BERT。
>它使用闪光注意力和旋转位置嵌入速度进行更快的处理和更长的文本支持。
> Q1。什么是仅编码的体系结构? Ans。 仅编码器架构过程输入序列而不生成输出序列,重点是理解和编码输入。 Bert的局限性是什么? BERT的某些局限性包括高计算资源,固定上下文长度,效率低下,复杂性以及缺乏常识推理。什么是注意机制?注意机制是一种允许模型专注于输入的特定部分以确定哪些部分或多或少重要的技术。什么是交替注意?这种机制在关注文本序列中的本地和全局环境之间交替。 当地的注意力突出了相邻的单词或短语,收集细粒度的信息,而全球注意力识别整个文本中的整体模式和关系。
以上是与现代伯特一起增强情感分析的详细内容。更多信息请关注PHP中文网其他相关文章!