NLP情感分析笔记(四):卷积情感分析

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介: 能够从局部输入图像块中提取特征,并能将表示模块化,同时可以高效第利用数据可以用于处理时序数据,时间可以被看作一个空间维度,就像二维图像的高度和宽度那么为什么要在文本上使用卷积神经网络呢?

卷积情感分析


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_000
TEXT.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 = 64
device = 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()
目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 PyTorch
从零开始构建nlp情感分析模型!
本教程介绍了如何使用PyTorch和Hugging Face的Transformers库构建一个情感分析模型。主要内容包括导入所需库、读取训练数据集、加载预训练的BERT模型和分词器、定义情感数据集类、划分训练集和验证集、创建数据加载器、设置训练参数、训练模型、评估模型性能以及定义和测试预测函数。通过这些步骤,可以实现一个简单而有效的情感分析模型。
109 2
|
28天前
|
机器学习/深度学习 自然语言处理 算法
自然语言处理中的情感分析技术
自然语言处理中的情感分析技术
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】自然语言处理(NLP)的突破,关注NLP在机器翻译、情感分析、聊天机器人等方面的最新研究成果和应用案例。
自然语言处理(NLP)作为人工智能的一个重要分支,近年来取得了显著的突破,特别在机器翻译、情感分析、聊天机器人等领域取得了显著的研究成果和广泛的应用。以下是对这些领域最新研究成果和应用案例的概述,并附带相应的代码实例。
114 1
|
4月前
|
机器学习/深度学习 存储 自然语言处理
自然语言处理中的情感分析技术:深入解析与应用前景
【8月更文挑战第4天】情感分析技术作为自然语言处理领域的重要分支,具有广泛的应用前景和重要的研究价值。通过不断的技术创新和应用实践,我们可以期待情感分析在未来发挥更大的作用,为我们的生活和工作带来更多便利和效益。
199 10
|
4月前
|
自然语言处理 算法 数据挖掘
自然语言处理 Paddle NLP - 情感分析技术及应用SKEP-实践
自然语言处理 Paddle NLP - 情感分析技术及应用SKEP-实践
45 0
|
4月前
|
机器学习/深度学习 自然语言处理 iOS开发
自然语言处理 Paddle NLP - 情感分析技术及应用-理论
自然语言处理 Paddle NLP - 情感分析技术及应用-理论
31 0
|
6月前
|
自然语言处理
【自然语言处理NLP】DPCNN模型论文精读笔记
【自然语言处理NLP】DPCNN模型论文精读笔记
75 2
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
Python自然语言处理实战:文本分类与情感分析
本文探讨了自然语言处理中的文本分类和情感分析技术,阐述了基本概念、流程,并通过Python示例展示了Scikit-learn和transformers库的应用。面对多义性理解等挑战,研究者正探索跨域适应、上下文理解和多模态融合等方法。随着深度学习的发展,这些技术将持续推动人机交互的进步。
290 1
|
6月前
|
自然语言处理 监控 数据挖掘
|
6月前
|
机器学习/深度学习 数据采集 人工智能
Python 高级实战:基于自然语言处理的情感分析系统
**摘要:** 本文介绍了基于Python的情感分析系统,涵盖了从数据准备到模型构建的全过程。首先,讲解了如何安装Python及必需的NLP库,如nltk、sklearn、pandas和matplotlib。接着,通过抓取IMDb电影评论数据并进行预处理,构建情感分析模型。文中使用了VADER库进行基本的情感分类,并展示了如何使用`LogisticRegression`构建机器学习模型以提高分析精度。最后,提到了如何将模型部署为实时Web服务。本文旨在帮助读者提升在NLP和情感分析领域的实践技能。
322 0