NLP情感分析笔记(四):卷积情感分析
卷积情感分析
- CNN:
- 能够从局部输入图像块中提取特征,并能将表示模块化,同时可以高效第利用数据
- 可以用于处理时序数据,时间可以被看作一个空间维度,就像二维图像的高度和宽度
- 那么为什么要在文本上使用卷积神经网络呢?
- 与3x3 filter可以查看图像块的方式相同,1x2 filter 可以查看一段文本中的两个连续单词,即双字符
- 本模型将使用多个不同大小的filter,这些filter将查看文本中的bi-grams(a 1x2 filter)、tri-grams(a 1x3 filter)and/or n-grams(a 1xn nn filter)。
- 与使用FastText模型的方法不同,本节不再需要刻意地创建bi-gram将它们附加到句子末尾。
一、数据预处理:
构建vocab并加载预训练好的此嵌入:
MAX_VOCAB_SIZE = 25_000TEXT.build_vocab(train_data, max_size = MAX_VOCAB_SIZE, vectors = "glove.6B.100d", unk_init = torch.Tensor.normal_)LABEL.build_vocab(train_data)
创建迭代器:
BATCH_SIZE = 64device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')train_iterator, valid_iterator, test_iterator = data.BucketIterator.splits((train_data, valid_data, test_data), batch_size = BATCH_SIZE, device = device)
二、构建模型:
将一段文本中的每个单词沿着一个轴展开,向量中的元素沿着另一个维度展开。
可以使用一个 [n x emb_dim] 的filter。可以完全覆盖 n nn 个words,因为它们的宽度为
emb_dim
尺寸。一般情况下,filter 的宽度等于"image" 的宽度,我们得到的输出是一个向量,其元素数等于图像的高度(或词的长度)减去 filter 的高度加上一。
实现:
- 我们借助
nn.Conv2d
实现卷积层 - 之后,我们通过卷积层和池化层传递张量,在卷积层之后使用’ReLU’激活函数。池化层的另一个很好的特性是它们可以处理不同长度的句子。而卷积层的输出大小取决于输入的大小,不同的批次包含不同长度的句子。如果没有最大池层,线性层的输入将取决于输入语句的长度,为了避免这种情况,我们将所有句子修剪/填充到相同的长度,但是线性层来说,线性层的输入一直都是filter的总数。
- 如果句子的长度小于实验设置的最大filter,那么必须将句子填充到最大filter的长度。在IMDb数据中不会存在这种情况,所以我们不必担心。
- 最后,我们对合并之后的filter输出执行dropout操作,然后将它们通过线性层进行预测。
class CNN(nn.Module):def __init__(self, vocab_size, embedding_dim, n_filters, filter_sizes, output_dim, dropout, pad_idx):super().__init__()self.embedding = nn.Embedding(vocab_size, embedding_dim, padding_idx = pad_idx)self.convs = nn.ModuleList([nn.Conv2d(in_channels = 1, out_channels = n_filters, kernel_size = (fs, embedding_dim)) for fs in filter_sizes])self.fc = nn.Linear(len(filter_sizes) * n_filters, output_dim)self.dropout = nn.Dropout(dropout)def forward(self, text):#text = [batch size, sent len]embedded = self.embedding(text)#embedded = [batch size, sent len, emb dim]embedded = embedded.unsqueeze(1)#embedded = [batch size, 1, sent len, emb dim]conved = [F.relu(conv(embedded)).squeeze(3) for conv in self.convs]#conved_n = [batch size, n_filters, sent len - filter_sizes[n] + 1]pooled = [F.max_pool1d(conv, conv.shape[2]).squeeze(2) for conv in conved]#pooled_n = [batch size, n_filters]cat = self.dropout(torch.cat(pooled, dim = 1))#cat = [batch size, n_filters * len(filter_sizes)]return self.fc(cat)
- 我们借助
三、训练模型:
四、验证模型:
import spacy
nlp = spacy.load('en_core_web_sm')def predict_sentiment(model, sentence, min_len = 5):model.eval()tokenized = [tok.text for tok in nlp.tokenizer(sentence)]if len(tokenized) < min_len:tokenized += ['<pad>'] * (min_len - len(tokenized))indexed = [TEXT.vocab.stoi[t] for t in tokenized]tensor = torch.LongTensor(indexed).to(device)tensor = tensor.unsqueeze(0)prediction = torch.sigmoid(model(tensor))return prediction.item()
本文参考:
情感分析案例
DataWhale开源资料
NLP情感分析笔记(四):卷积情感分析相关推荐
- 数据驱动分析实践四 客户留存分析
数据驱动分析 实践四 客户留存分析 在本系列前三篇文章中,我们已经定义了我们的指标.进行了客户分段并且建立机器学习模型来预测客户的LTV.由于我们通过客户分段和LTV预测知道了谁是我们最好的客户,我们 ...
- live555源码分析(四)RTSPServer分析
live555源码分析系列 live555源码分析(一)live555初体验 live555源码分析(二)基本组件上 live555源码分析(三)基本组件下 live555源码分析(四)RTSPSer ...
- 微信逆向分析(四)——逆向分析的工具
前言 老话,工欲善其事,必先利其器.这篇聊聊逆向分析用到的工具.不聊工具细节,自行百度学习.重要的是理清:使用工具,是为了解决什么问题. 工具 1.CE 找偏移的方法中聊到,最直接就是在内存里面搜索. ...
- 朴素贝叶斯情感分析评分python_Stanford NLP学习笔记:7. 情感分析(Sentiment)
1. 什么是情感分析(别名:观点提取,主题分析,情感挖掘...) 应用: 1)正面VS负面的影评(影片分类问题) 2)产品/品牌评价: Google产品搜索 3)twitter情感预测股票市场行情/消 ...
- 【NLP】从整体视角了解情感分析、文本分类!
作者:太子长琴,算法工程师,Datawhale成员 文本分类是自然语言处理(NLP)最基础核心的任务,或者换句话说,几乎所有NLP任务都是「分类」任务,或者涉及到「分类」概念.比如分词.词性标注.命名 ...
- 情感分析:基于卷积神经网络
情感分析:基于卷积神经网络 Sentiment Analysis: Using Convolutional Neural Networks 探讨了如何用二维卷积神经网络来处理二维图像数据.在以往的语言 ...
- [方面级别情感分析]0x01方面级情感分析笔记
0.什么是方面级情感分析 先介绍几个概念缩写 ABSA: Aspect-Based Sentiment Analysis方面级情感分析的缩写,下文用ABSA代替方面级情感分析这一概念,给定一个句子,比 ...
- NLP实战之–螺蛳粉评论情感分析和建模分类
NLP实战之–螺蛳粉评论情感分析和建模分类 写在前面: 本文首发于我的微信公众号.新文章首发都会在微信公众号上. 自然语言处理(Natural Language Processing)是目前人工智能的 ...
- 自然语言处理(NLP)之使用LSTM进行文本情感分析
情感分析简介 文本情感分析(Sentiment Analysis)是自然语言处理(NLP)方法中常见的应用,也是一个有趣的基本任务,尤其是以提炼文本情绪内容为目的的分类.它是对带有情感色彩的主观性文本 ...
最新文章
- [2018.12.18]BZOJ1013 [JSOI2008]球形空间产生器sphere
- pyqt 把控制台信息显示到_内网渗透初识—信息收集
- mysql 查询语句性能优化
- sass封装h5适配文件
- dw如何制作图片自动切换效果_什么是3D虚拟展厅,虚拟展厅如何在线3D漫游!
- 95-38-150-Buffer-CompositeByteBuf
- 【APIcould】连接手机,通过APPLoader在手机上实时展示项目效果
- 音阶频率对照表_八度音阶和频率的关
- 数据分析几大常见效应和定律。
- Android开机执行指定shell脚本
- 二行代码解决全部网页木马
- FLASH三维照片墙组件(源文件)
- 计算机开机慢的原因及解决方法,电脑启动慢什么原因?如何解决
- python-26-字典:当索引不好用时
- Win10和win11有什么区别?想重装win10系统怎么操作?
- 关于谷歌webrtc源码国内镜像的使用问题,以及Kurento媒体服务器
- 深入理解Android L新特性之 页面内容amp;共享元素过渡动画
- 如何将html模板资源转为vuecli项目
- python之旅六【第六篇】模块
- QT信号槽第五个参数
热门文章
- 数据库改名系列(数据库名,逻辑名,物理文件名)
- shell 模拟多进程(3)
- 程序员面试金典——7.6穿点最多的直线
- Java语言中几个常用的包
- Leetcode108. 有序数组转为二叉树
- 关于Matlab生成批量文件文件名统一数字位数方法
- fatal error: dynlink_nvcuvid.h: No such file or directory
- latex 字体加粗失效
- Format “jpeg” is not supported (supported formats: eps, pdf, pgf, png, ps, raw, rgba, svg, svgz)
- Day11 - 使用正则表达式