task02:Updated情感分析
一、可优化的方面:
- 使用压缩填充序列
- 加载和使用预训练词嵌入
- 采用不同的优化器
- 选择不同的RNN体系结构(双向RNN,多向RNN)
二、准备数据:
-
注意:
-
RNN只能处理序列中的非padded元素(即非0数据),对于任何padded元素输出都是0,include_length设为True,以获得句子的实际长度
-
数据集使用的是IMDB影评数据集
-
三、词向量:
- GloVe(Global Vectors for Word Representation)
- 使用“glove.6B.100d”,6B表示词向量是在60亿规模的tokens上获得,100d:表示词向量是100维的
- TEXT.build_vocab表示从预训练的词向量中,将当前训练数据中的词汇的词向量抽取出来,构成当前训练集的 Vocab(词汇表)。对于当前词向量语料库中没有出现的单词(记为UNK,unknown),通过高斯分布随机初始化(unk_init = torch.Tensor.normal_)。
四、模型构建:
五、实例化模型+传入参数:
- 为了保证pre-trained 词向量可以加载到模型中,EMBEDDING_DIM 必须等于预训练的GloVe词向量的大小。
六、训练模型:
- 将’SGD’更改为’Adam’,我们只需将’optim.SGD’更改为’optim.Adam’,还要注意,我们不提供 Adam初始学习率,因为PyTorch提供了默认的初始学习率。
七、验证模型:
- 将模型切换为evaluate模式
- 对句子进行分词操作
- 将分词后的每个词,对应着词汇表,转换成对应的index索引,
- 获取句子的长度
- 将indexes,从list转化成tensor
- 通过unsqueezing 添加一个batch维度
- 将length转化成张量tensor
- 用sigmoid函数将预测值压缩到0-1之间
- 用item()方法,将只有一个值的张量tensor转化成整数
负面评论返回接近0的值,正面评论返回接近1的值。