{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# task6:使用Transformer进行情感分析" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在本notebook中,我们将使用在 [Attention is all you need](https://arxiv.org/abs/1706.03762) 论文中首次引入的Transformer模型。 具体来说,我们将使用 [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805) 论文中的 BERT模型。\n", "\n", "Transformer 模型比本教程中涵盖的其他模型都要大得多。 因此,我们将使用 [transformers library](https://github.com/huggingface/transformers) 来获取预训练的Transformer并将它们用作我们的embedding层。 我们将固定(而不训练)transformer,只训练从transformer产生的表示中学习的模型的其余部分。 在这种情况下,我们将使用双向GRU继续提取从Bert embedding后的特征。最后在fc层上输出最终的结果。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.1 数据准备\n", "\n", "首先,像往常一样,我们导入库,然后设置随机种子" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import torch\n", "\n", "import random\n", "import numpy as np\n", "\n", "SEED = 1234\n", "\n", "random.seed(SEED)\n", "np.random.seed(SEED)\n", "torch.manual_seed(SEED)\n", "torch.backends.cudnn.deterministic = True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Transformer 已经用特定的词汇进行了训练,这意味着我们需要使用完全相同的词汇进行训练,并以与 Transformer 最初训练时相同的方式标记我们的数据。\n", "\n", "幸运的是,transformers 库为每个提供的transformer 模型都有分词器。 在这种情况下,我们使用忽略大小写的 BERT 模型(即每个单词都会小写)。 我们通过加载预训练的“bert-base-uncased”标记器来实现这一点。" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0351fea416c34e3ba33422cf8a9d241f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Downloading: 0%| | 0.00/232k [00:00