5分钟NLP:使用 HuggingFace 微调BERT 并使用 TensorBoard 可视化

上篇文章我们已经介绍了Hugging Face的主要类,在本文中将介绍如何使用Hugging Face进行BERT的微调进行评论的分类。其中包含:AutoTokenizer、AutoModel、Trainer、TensorBoard、数据集和指标的使用方法。

 

在本文中,我们将只关注训练和测试拆分。每个数据集都由一个文本特征(评论的文本)和一个标签特征(表示评论的好坏)组成。

  1. from datasets import load_dataset, load_metric
  2. task = "imdb"
  3. dataset = load_dataset(task)
  4. print(dataset)
  5. """
  6. DatasetDict({
  7. train: Dataset({
  8. features: ['text', 'label'],
  9. num_rows: 25000
  10. })
  11. test: Dataset({
  12. features: ['text', 'label'],
  13. num_rows: 25000
  14. })
  15. unsupervised: Dataset({
  16. features: ['text', 'label'],
  17. num_rows: 50000
  18. })
  19. })
  20. """

IMDb数据集的通用基准指标是准确率,所以这里使用 datasets 库的 load_metric 函数来加载 metric 脚本,稍后可以与 compute 方法一起使用。

  1. metric = load_metric("accuracy")
  2. metric.compute(predictions=[0,0,1,1], references=[0,1,1,1])
  3. # {'accuracy': 0.75}

下载的数据集有训练和测试拆分,但我们还需要拆分出验证集来判断模型在训练期间表现以避免过拟合。

使用train_test_split 应用于 test_size = 0.3 进行拆分:这会产生一个包含 70% 原始样本的新训练集和一个包含 30% 原始样本的验证集。

  1. splitted_datasets = dataset["train"].train_test_split(test_size=0.3)
  2. print(splitted_datasets)
  3. """
  4. DatasetDict({
  5. train: Dataset({
  6. features: ['text', 'label'],
  7. num_rows: 17500
  8. })
  9. test: Dataset({
  10. features: ['text', 'label'],
  11. num_rows: 7500
  12. })
  13. })
  14. """

接下来使用 Hugging Face的AutoTokenizer 类加载 BERT Tokenizer。

本文实际上加载 DistilBERT 作为 快速替代方案,如果需要加载 BERT,代码基本是相同的(即将 distilbert-base-uncased 替换为 Bert-base-uncased)。DistilBERT 是一种小型、快速、廉价和轻量级的 Transformer 模型,通过蒸馏 BERT 基础进行训练。根据 GLUE 语言理解基准测试,它的参数比 Bert-base-uncased 少 40%,运行速度提高 60%,同时保持 BERT 95% 以上的性能。

完整列表:

https://www.overfit.cn/post/bf902048c16c4944a171665dc6ffdccb

posted @ 2022-03-10 10:59  deephub  阅读(394)  评论(0编辑  收藏  举报