Py 机器基础及其实践 15_第1页
Py 机器基础及其实践 15_第2页
Py 机器基础及其实践 15_第3页
Py 机器基础及其实践 15_第4页
Py 机器基础及其实践 15_第5页
已阅读5页,还剩11页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15章综合案例分析:电影评论情感分析15.1问题描述与分析15.3构建卷积神经网络15.2数据探索与预处理15.4本章小结115.1问题描述与分析学习基础学习认知能力信息素养高电影评论的情感倾向判别就是一个典型的二分类问题。为了预测评论的情感极性(如积极或消极),需要根据评论文本的语义内容进行分析,包括词汇的情感色彩、句子的表达方式、评论的整体语境等文本特征。而在选择这些特征建立分类模型之前,还需要对原始评论文本进行深入分析和预处理。为了使这些文本特征成为建立分类模型可用的输入,需要进行诸如分词、去除停用词、处理特殊符号、文本向量化等数据预处理步骤。通常利用分类算法进行情感分析的流程如图15-1所示。15.2数据探索与预处理电影评论情感分析的数据来源于Imdb影评的数据集,共有25000条电影评论用来做训练,有25000条电影评论用于测试。训练样本和测试样本分别存储在train和test文件夹中。在test文件夹下面包含pos和neg两个文件夹,分别存储的是正向情感和福相情感的评论文件,存储的方式是txt格式。在train文件夹中除了上述的文件还有一个是未标记情感倾向的文件夹unsup。数据集的整体结构图如图15-2所示。train_dataset=IMDbDataset(train_pos_dir,train_neg_dir,transform=preprocess_text)test_dataset=IMDbDataset(test_pos_dir,test_neg_dir,transform=preprocess_text)train_data=[train_dataset[i][0]foriinrange(len(train_dataset))]train_labels=[train_dataset[i][1]foriinrange(len(train_dataset))]test_data=[test_dataset[i][0]foriinrange(len(test_dataset))]test_labels=[test_dataset[i][1]foriinrange(len(test_dataset))]save_to_excel(train_data,train_labels,train_excel_path)save_to_excel(test_data,test_labels,test_excel_path)15.2.2词汇表的构建和使用构建词汇表的目的是为了将文本数据转换为模型可以处理的数值形式。在自然语言处理中,模型无法直接处理原始文本字符串,因此需要将每个单词映射为一个唯一的整数索引。词汇表(vocab)提供了这种映射关系,使得文本可以通过查表的方式转化为词向量或索引序列,从而输入到神经网络模型中进行训练和预测。同时构建词汇表还具有以下作用:统一文本表示:确保所有文本数据使用相同的词索引,避免不同批次或数据集之间的不一致;控制词表规模:可以通过限制词汇表大小来过滤低频词,减少模型复杂度;处理未知词:通过添加特殊标记<unk>来表示训练集中未出现的词汇,增强模型的泛化能力。在这里我们演示如何根据评论的文本信息构建自己的词汇表。将构建的词汇表中的前十个元素打印出来结果如图15-3所示。print("词汇表中的前10个元素:")stoi=vocab.get_stoi()#按照单词插入顺序输出前10个元素fori,(token,index)inenumerate(stoi.items()):ifi<10:print(f"{token}:{index}")在填充之后打印train_texts的内容和形状如图15-5所示在将文本信息扩展填充之后,需要将标签信息(即评论情感的倾向)转换为张量。转换之后的形状如图15-6所示。15.3构建卷积网络15.3.1卷积网络结构针对于该电影评论情感分析案例我们构建了TextCNN模型,模型的整体结构如图15-7所示。classTextCNN(nn.Module):def__init__(self,vocab_size,embed_dim,num_classes):super(TextCNN,self).__init__()#嵌入层:将词汇索引映射为稠密向量

self.embedding=nn.Embedding(vocab_size,embed_dim)#卷积层1:使用3个词窗口进行卷积

self.conv1=nn.Conv2d(1,100,(3,embed_dim))#卷积层2:使用4个词窗口进行卷积

self.conv2=nn.Conv2d(1,100,(4,embed_dim))#卷积层3:使用5个词窗口进行卷积

self.conv3=nn.Conv2d(1,100,(5,embed_dim))#全连接层:将卷积结果映射到类别空间

self.fc=nn.Linear(300,num_classes)defforward(self,x):x=self.embedding(x).unsqueeze(1)x1=F.relu(self.conv1(x)).squeeze(3)x1=F.max_pool1d(x1,x1.size(2)).squeeze(2)x2=F.relu(self.conv2(x)).squeeze(3)x2=F.max_pool1d(x2,x2.size(2)).squeeze(2)x3=F.relu(self.conv3(x)).squeeze(3)x3=F.max_pool1d(x3,x3.size(2)).squeeze(2)x=torch.cat((x1,x2,x3),1)x=self.fc(x)returnx在构造函数__init__中,有三个参数,分别为vocab_size,embed_dim,num_classes。vocab_size:词汇表大小,用于嵌入层定义。embed_dim:词向量维度。num_classes:输出分类类别数量。其中vocab_size的大小是根据获取到的最长的评论长度所决定的,embed_dim我们在这里设置为64,由于我们的情感分析只有正向倾向和负向倾向两种情况,是一个二分类问题所以num_classes设置为2。因为不同大小的卷积核(如3、4、5)能够捕捉到不同粒度的n-gram信息,拼接这些信息后可获得更全面、更丰富的文本表示,从而提升模型的表达能力和分类性能。之后经过torch.cat方法,将3个[batch_size,100]的张量在特征维(dim=1)拼接。得到的张量形状为[batch_size,300]。15.3.2训练网络在模型训练开始之前我们需要获取到GPU设备,确保模型能够在训练时使用GPU进行加速,从而加快模型的训练速度,避免浪费大量的时间资源。device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")如果能够获取到GPU设备,就可以使用GPU进行加速,否则就使用CPU进行模型的训练。model=TextCNN(vocab_size,embed_dim,num_classes).to(device)将设置好的参数传入到模型中进行初始化,并使用GPU加速。之后定义模型在训练时使用到的损失函数和优化器,在这里我们使用交叉熵损失函数和Adam优化器。将模型的参数传入优化器中并设定学习率为0.03。criterion=nn.CrossEntropyLoss()optimizer=optim.Adam(model.parameters(),lr=0.003)deftrain(model,train_loader,criterion,optimizer,device):model.train()total_loss=0correct=0total=0print("Training...")fortexts,labelsintqdm(train_loader):texts,labels=texts.to(device),labels.to(device)optimizer.zero_grad()outputs=model(texts)loss=criterion(outputs,labels)loss.backward()optimizer.step()total_loss+=loss.item()_,predicted=torch.max(outputs.data,1)total+=labels.size(0)correct+=(predicted==labels).sum().item()returntotal_loss/len(train_loader),correct/total15.4本

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论