卷积情感分析

  • 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情感分析笔记(四):卷积情感分析相关推荐

  1. 数据驱动分析实践四 客户留存分析

    数据驱动分析 实践四 客户留存分析 在本系列前三篇文章中,我们已经定义了我们的指标.进行了客户分段并且建立机器学习模型来预测客户的LTV.由于我们通过客户分段和LTV预测知道了谁是我们最好的客户,我们 ...

  2. live555源码分析(四)RTSPServer分析

    live555源码分析系列 live555源码分析(一)live555初体验 live555源码分析(二)基本组件上 live555源码分析(三)基本组件下 live555源码分析(四)RTSPSer ...

  3. 微信逆向分析(四)——逆向分析的工具

    前言 老话,工欲善其事,必先利其器.这篇聊聊逆向分析用到的工具.不聊工具细节,自行百度学习.重要的是理清:使用工具,是为了解决什么问题. 工具 1.CE 找偏移的方法中聊到,最直接就是在内存里面搜索. ...

  4. 朴素贝叶斯情感分析评分python_Stanford NLP学习笔记:7. 情感分析(Sentiment)

    1. 什么是情感分析(别名:观点提取,主题分析,情感挖掘...) 应用: 1)正面VS负面的影评(影片分类问题) 2)产品/品牌评价: Google产品搜索 3)twitter情感预测股票市场行情/消 ...

  5. 【NLP】从整体视角了解情感分析、文本分类!

    作者:太子长琴,算法工程师,Datawhale成员 文本分类是自然语言处理(NLP)最基础核心的任务,或者换句话说,几乎所有NLP任务都是「分类」任务,或者涉及到「分类」概念.比如分词.词性标注.命名 ...

  6. 情感分析:基于卷积神经网络

    情感分析:基于卷积神经网络 Sentiment Analysis: Using Convolutional Neural Networks 探讨了如何用二维卷积神经网络来处理二维图像数据.在以往的语言 ...

  7. [方面级别情感分析]0x01方面级情感分析笔记

    0.什么是方面级情感分析 先介绍几个概念缩写 ABSA: Aspect-Based Sentiment Analysis方面级情感分析的缩写,下文用ABSA代替方面级情感分析这一概念,给定一个句子,比 ...

  8. NLP实战之–螺蛳粉评论情感分析和建模分类

    NLP实战之–螺蛳粉评论情感分析和建模分类 写在前面: 本文首发于我的微信公众号.新文章首发都会在微信公众号上. 自然语言处理(Natural Language Processing)是目前人工智能的 ...

  9. 自然语言处理(NLP)之使用LSTM进行文本情感分析

    情感分析简介 文本情感分析(Sentiment Analysis)是自然语言处理(NLP)方法中常见的应用,也是一个有趣的基本任务,尤其是以提炼文本情绪内容为目的的分类.它是对带有情感色彩的主观性文本 ...

最新文章

  1. [2018.12.18]BZOJ1013 [JSOI2008]球形空间产生器sphere
  2. pyqt 把控制台信息显示到_内网渗透初识—信息收集
  3. mysql 查询语句性能优化
  4. sass封装h5适配文件
  5. dw如何制作图片自动切换效果_什么是3D虚拟展厅,虚拟展厅如何在线3D漫游!
  6. 95-38-150-Buffer-CompositeByteBuf
  7. 【APIcould】连接手机,通过APPLoader在手机上实时展示项目效果
  8. 音阶频率对照表_八度音阶和频率的关
  9. 数据分析几大常见效应和定律。
  10. Android开机执行指定shell脚本
  11. 二行代码解决全部网页木马
  12. FLASH三维照片墙组件(源文件)
  13. 计算机开机慢的原因及解决方法,电脑启动慢什么原因?如何解决
  14. python-26-字典:当索引不好用时
  15. Win10和win11有什么区别?想重装win10系统怎么操作?
  16. 关于谷歌webrtc源码国内镜像的使用问题,以及Kurento媒体服务器
  17. 深入理解Android L新特性之 页面内容amp;共享元素过渡动画
  18. 如何将html模板资源转为vuecli项目
  19. python之旅六【第六篇】模块
  20. QT信号槽第五个参数

热门文章

  1. 数据库改名系列(数据库名,逻辑名,物理文件名)
  2. shell 模拟多进程(3)
  3. 程序员面试金典——7.6穿点最多的直线
  4. Java语言中几个常用的包
  5. Leetcode108. 有序数组转为二叉树
  6. 关于Matlab生成批量文件文件名统一数字位数方法
  7. fatal error: dynlink_nvcuvid.h: No such file or directory
  8. latex 字体加粗失效
  9. Format “jpeg” is not supported (supported formats: eps, pdf, pgf, png, ps, raw, rgba, svg, svgz)
  10. Day11 - 使用正则表达式