{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# E2. 使用 Bert + prompt 完成 SST2 分类\n", "\n", " 1 基础介绍:`prompt-based model`简介、与`fastNLP`的结合\n", "\n", " 2 准备工作:`P-Tuning v2`原理概述、`P-Tuning v2`模型搭建\n", "\n", " 3 模型训练:加载`tokenizer`、预处理`dataset`、模型训练与分析" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. 基础介绍:prompt-based model 简介、与 fastNLP 的结合\n", "\n", " 本示例使用`GLUE`评估基准中的`SST2`数据集,通过`prompt-based tuning`方式\n", "\n", " 微调`bert-base-uncased`模型,实现文本情感的二分类,在此之前本示例\n", "\n", " 将首先简单介绍提示学习模型的研究,以及与`fastNLP v0.8`结合的优势\n", "\n", "**`prompt`**,**提示词、提词器**,最早出自**`PET`**,\n", "\n", " \n", "\n", "**`prompt-based tuning`**,**基于提示的微调**,描述\n", "\n", " **`prompt-based model`**,**基于提示的模型**\n", "\n", "**`prompt-based model`**,**基于提示的模型**,举例\n", "\n", " 案例一:**`P-Tuning v1`**\n", "\n", " 案例二:**`PromptTuning`**\n", "\n", " 案例三:**`PrefixTuning`**\n", "\n", " 案例四:**`SoftPrompt`**\n", "\n", "使用`fastNLP v0.8`实现`prompt-based model`的优势\n", "\n", " \n", "\n", " 本示例仍使用了`tutorial-E1`的`SST2`数据集,将`bert-base-uncased`作为基础模型\n", "\n", " 在后续实现中,意图通过将连续的`prompt`与`model`拼接,解决`SST2`二分类任务" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n" ], "text/plain": [ "\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "4.18.0\n" ] } ], "source": [ "import torch\n", "import torch.nn as nn\n", "from torch.optim import AdamW\n", "from torch.utils.data import DataLoader, Dataset\n", "\n", "import transformers\n", "from transformers import AutoTokenizer\n", "from transformers import AutoModelForSequenceClassification\n", "\n", "import sys\n", "sys.path.append('..')\n", "\n", "import fastNLP\n", "from fastNLP import Trainer\n", "from fastNLP.core.metrics import Accuracy\n", "\n", "print(transformers.__version__)\n", "\n", "task = 'sst2'\n", "model_checkpoint = 'bert-base-uncased'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. 准备工作:P-Tuning v2 原理概述、P-Tuning v2 模型搭建\n", "\n", " 本示例使用`P-Tuning v2`作为`prompt-based tuning`与`fastNLP v0.8`结合的案例\n", "\n", " 以下首先简述`P-Tuning v2`的论文原理,并由此引出`fastNLP v0.8`的代码实践\n", "\n", "`P-Tuning v2`出自论文 [Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks](https://arxiv.org/pdf/2110.07602.pdf)\n", "\n", " 其主要贡献在于,在`PrefixTuning`等深度提示学习基础上,提升了其在分类标注等`NLU`任务的表现\n", "\n", " 并使之在中等规模模型,主要是参数量在`100M-1B`区间的模型上,获得与全参数微调相同的效果\n", "\n", " 其结构如图所示,\n", "\n", "