没有合适的资源?快使用搜索试试~ 我知道了~
2. 掌握卷积神经网络处理文本的各项技术 3. 掌握文本分类模型Text-CNN的架构和原理 2. 实现对中文电影评论的情感分类,实现测试准确率在83%以上 3
资源推荐
资源详情
资源评论
实验四 电影评论情感分类
一、 实验目的
1. 进一步加深对卷积神经网络基本原理的理解。
2. 掌握卷积神经网络处理文本的各项技术。
3. 掌握文本分类模型 Text-CNN 的架构和原理。
二、 实验要求
1. 任选一个深度学习框架建立 Text-CNN 模型(本实验指导书以 TensorFlow 为
例)。
2. 实现对中文电影评论的情感分类,实现测试准确率在 83%以上。
3. 也可采用 LSTM 实现,实现测试准确率高于卷积神经网络。
4. 按规定时间在课程网站提交实验报告、代码以及 PPT。
三、 实验原理
Text-CNN 和传统的 CNN 结构类似,具有词嵌入层、卷积层、池化层和全连
接层的四层结构,如图 1 所示。
图 1 Text-CNN 网络结构
如图 1 中所示,Text-CNN 的词嵌入层(Word embedding)使用二维矩阵来
表示长文本。词嵌入将输入文本的每个词语通过空间映射,将独热表示(One-Hot
Representation)转换成分布式表示(Distributed Representation),进而可以使用
低维的词向量来表示每一个词语。经过词嵌入,每个单词具有相同长度的词向量
表示。将各个词语的向量表示连起来便可以得到二维矩阵。得到词向量的方式有
多种,常用的是 Word2vec 方法。若使用预训练好的词向量,在训练模型的时候
可以选择更新或不更新词向量,分别对应嵌入层状态为 Non-static 和 Static。
Text-CNN 的卷积层是主要部分,卷积核的宽度等于词向量的维度,经卷积
后可以提取文本的特征向量。与在图像领域应用类似,Text-CNN 可以设置多个
卷积核以提取文本的多层特征,长度为 N 的卷积核可以提取文本中的 N-gram 特
征。
Text-CNN 的池化层一般采取 Max-over-time pooling,输出最大值,从而判断
词嵌入中是否含 N-gram。
Text-CNN 的全连接层采用了 Dropout 算法防止过拟合,并使用 Softmax 函数
输出各个类别的概率。
算法具体原理可阅读:Kim Y .2014--《Convolutional Neural Networks for
Sentence Classification》一文。
四、 实验所用工具及数据集(以 PyTorch 为例)
1. 主要工具
Python 3.6.9、PyTorch 1.4.0、numpy-1.16.6、gensim-4.0.1
2. 数据集
1) 训练集。包含 19998 条中文电影评论,其中正负向评论各 9999 条。
2) 验证集。包含 5629 条中文电影评论,其中正负向评论各 2812,2817 条。
3) 测试集。包含 369 条中文电影评论,其中正负向评论各 187,182 条。
4) 预训练词向量。中文维基百科词向量 word2vec:wiki_word2vec_50.bin。
五、 实验步骤与方法
1. 加载本实验所有函数库
import gensim
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
from collections import Counter
from torch.utils.data import TensorDataset, DataLoader
2. 数据预处理
① 设置分类类别以及类别对应词典{pos:0, neg:1};
② 从 train.txt, validation.txt 构建词汇表并存储,形如{word: id};
def build_word2id(save_to_path=None):
"""
:param save_to_path: path to save word2id
:return: word2id dictionary {word: id}
"""
word2id = {'_PAD_': 0}
path = ['./Dataset/train.txt', './Dataset/validation.txt']
# write the index to word2id[word]
for _path in path:
with open(_path, encoding='utf-8') as f:
for line in f.readlines():
sp = line.strip().split()
for word in sp[1:]:
if word not in word2id.keys():
word2id[word] = len(word2id)
if save_to_path:
with open(save_to_path, 'w', encoding='utf-8') as f:
for w in word2id:
f.write(w+'\t')
f.write(str(word2id[w]))
f.write('\n')
return word2id
③ 加载上述构建的词汇表;
word2id = build_word2id('./Dataset/word2id.txt')
print(type(word2id), len(word2id))
输出:
<class 'dict'> 58954
④ 基于预训练好的 word2vec: wiki_word2vec_50.bin 构建训练语料中所含词语
剩余11页未读,继续阅读
资源评论
江水流春去
- 粉丝: 43
- 资源: 352
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功