网贷网站建设,创建网站怎么创,石家庄网页,平面网页设计是做什么的动动发财的小手#xff0c;点个赞吧#xff01; 在 NLP 中#xff0c;Transformer 模型架构是一场革命#xff0c;极大地增强了理解和生成文本信息的能力。 在本教程[1]中#xff0c;我们将深入研究 BERT#xff08;一种著名的基于 Transformer 的模型#xff09;#… 动动发财的小手点个赞吧 在 NLP 中Transformer 模型架构是一场革命极大地增强了理解和生成文本信息的能力。 在本教程[1]中我们将深入研究 BERT一种著名的基于 Transformer 的模型并提供一个实践示例来微调基本 BERT 模型以进行情感分析。 BERT简介 BERT 由 Google 研究人员于 2018 年推出是一种使用 Transformer 架构的强大语言模型。 BERT 突破了早期模型架构例如 LSTM 和 GRU单向或顺序双向的界限同时考虑了过去和未来的上下文。这是由于创新的“注意力机制”它允许模型在生成表示时权衡句子中单词的重要性。 BERT 模型针对以下两个 NLP 任务进行了预训练 掩码语言模型 (MLM) 下一句话预测 (NSP) 通常用作各种下游 NLP 任务的基础模型例如我们将在本教程中介绍的情感分析。 预训练和微调 BERT 的强大之处在于它的两步过程 预训练是 BERT 在大量数据上进行训练的阶段。因此它学习预测句子中的屏蔽词MLM 任务并预测一个句子是否在另一个句子后面NSP 任务。此阶段的输出是一个预训练的 NLP 模型具有对该语言的通用“理解” 微调是针对特定任务进一步训练预训练的 BERT 模型。该模型使用预先训练的参数进行初始化并且整个模型在下游任务上进行训练从而使 BERT 能够根据当前任务的具体情况微调其对语言的理解。 实践使用 BERT 进行情感分析 完整的代码可作为 GitHub 上的 Jupyter Notebook 获取 在本次实践练习中我们将在 IMDB 电影评论数据集许可证Apache 2.0上训练情感分析模型该数据集 会标记评论是正面还是负面。我们还将使用 Hugging Face 的转换器库加载模型。 让我们加载所有库 import pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltfrom sklearn.metrics import confusion_matrix, roc_curve, aucfrom datasets import load_datasetfrom transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer# Variables to set the number of epochs and samplesnum_epochs 10num_samples 100 # set this to -1 to use all data 首先我们需要加载数据集和模型标记器。 # Step 1: Load dataset and model tokenizerdataset load_dataset(imdb)tokenizer AutoTokenizer.from_pretrained(bert-base-uncased) 接下来我们将创建一个绘图来查看正类和负类的分布。 # Data Explorationtrain_df pd.DataFrame(dataset[train])sns.countplot(xlabel, datatrain_df)plt.title(Class distribution)plt.show() 接下来我们通过标记文本来预处理数据集。我们使用 BERT 的标记器它将文本转换为与 BERT 词汇相对应的标记。 # Step 2: Preprocess the datasetdef tokenize_function(examples): return tokenizer(examples[text], paddingmax_length, truncationTrue)tokenized_datasets dataset.map(tokenize_function, batchedTrue) 之后我们准备训练和评估数据集。请记住如果您想使用所有数据可以将 num_samples 变量设置为 -1。 if num_samples -1: small_train_dataset tokenized_datasets[train].shuffle(seed42) small_eval_dataset tokenized_datasets[test].shuffle(seed42)else: small_train_dataset tokenized_datasets[train].shuffle(seed42).select(range(num_samples)) small_eval_dataset tokenized_datasets[test].shuffle(seed42).select(range(num_samples)) 然后我们加载预训练的 BERT 模型。我们将使用 AutoModelForSequenceClassification 类这是一个专为分类任务设计的 BERT 模型。 # Step 3: Load pre-trained modelmodel AutoModelForSequenceClassification.from_pretrained(bert-base-uncased, num_labels2) 现在我们准备定义训练参数并创建一个 Trainer 实例来训练我们的模型。 # Step 4: Define training argumentstraining_args TrainingArguments(test_trainer, evaluation_strategyepoch, no_cudaTrue, num_train_epochsnum_epochs)# Step 5: Create Trainer instance and traintrainer Trainer( modelmodel, argstraining_args, train_datasetsmall_train_dataset, eval_datasetsmall_eval_dataset)trainer.train() 结果解释 训练完我们的模型后让我们对其进行评估。我们将计算混淆矩阵和 ROC 曲线以了解我们的模型的表现如何。 # Step 6: Evaluationpredictions trainer.predict(small_eval_dataset)# Confusion matrixcm confusion_matrix(small_eval_dataset[label], predictions.predictions.argmax(-1))sns.heatmap(cm, annotTrue, fmtd)plt.title(Confusion Matrix)plt.show()# ROC Curvefpr, tpr, _ roc_curve(small_eval_dataset[label], predictions.predictions[:, 1])roc_auc auc(fpr, tpr)plt.figure(figsize(1.618 * 5, 5))plt.plot(fpr, tpr, colordarkorange, lw2, labelROC curve (area %0.2f) % roc_auc)plt.plot([0, 1], [0, 1], colornavy, lw2, linestyle--)plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel(False Positive Rate)plt.ylabel(True Positive Rate)plt.title(Receiver operating characteristic)plt.legend(loclower right)plt.show() 混淆矩阵详细说明了我们的预测如何与实际标签相匹配而 ROC 曲线则向我们展示了各种阈值设置下真阳性率灵敏度和假阳性率1 - 特异性之间的权衡。 最后为了查看我们的模型的实际效果让我们用它来推断示例文本的情绪。 # Step 7: Inference on a new samplesample_text This is a fantastic movie. I really enjoyed it.sample_inputs tokenizer(sample_text, paddingmax_length, truncationTrue, max_length512, return_tensorspt)# Move inputs to device (if GPU available)sample_inputs.to(training_args.device)# Make predictionpredictions model(**sample_inputs)predicted_class predictions.logits.argmax(-1).item()if predicted_class 1: print(Positive sentiment)else: print(Negative sentiment) 总结 通过浏览 IMDb 电影评论的情感分析示例我希望您能够清楚地了解如何将 BERT 应用于现实世界的 NLP 问题。我在此处包含的 Python 代码可以进行调整和扩展以处理不同的任务和数据集为更复杂和更准确的语言模型铺平道路。 Reference [1] Source: https://towardsdatascience.com/practical-introduction-to-transformer-models-bert-4715ed0deede 本文由 mdnice 多平台发布