自然语言处理实战项目3-利用CNN做语义分析任务

news2024/11/16 11:41:55

大家好,我是微学AI,今天给大家带来自然语言处理实战项目3-利用CNN做语义分析任务,深度学习在自然语言处理领域中的应用越来越广泛,其中语义分析是其中一个重要的应用。本文将为读者介绍语义分析的任务以及如何用深度学习方法实现该任务。同时,我们也将提供代码示例来帮助读者更好地理解和实践。

一、语义分析任务

语义分析,又称为情感分析或观点挖掘,是指对文本的情感、观点等主观性信息进行分析和判断的任务。通常情况下,语义分析任务可以分为两类:

情感分类任务:将文本划分为正面、负面或中性三个类别中的一个,也称为极性分类任务。
观点提取任务:从文本中提取出与某一主题相关的观点和意见。
语义分析在社交媒体监控、产品评论分析、品牌声誉管理等领域中具有重要的应用。下面,我们将介绍如何用深度学习方法实现情感分类任务。

传统的情感分析是利用专家系统,规则定义,甚至是人为定义复杂的规则进行情感分析,提炼程度副词、正面词,否定词等信息规则,这样做的弊端是需要穷举大量的规则,对于新的语句适应性较差。

二、基于深度学习的情感分类

情感分类任务是将文本划分为正面、负面或中性三个类别中的一个。其核心是将文本转化为向量表示,并使用分类器将其划分到对应的类别中。本文将介绍如何使用卷积神经网络(Convolutional Neural Networks,CNN)实现情感分类任务。

数据集
我们将使用IMDB电影评论数据集来进行情感分类任务。该数据集包含50,000条电影评论,其中25,000条用于训练,25,000条用于测试。每条评论已经被标注为正面或负面两种情感之一。

数据预处理

在进行情感分类任务之前,我们需要对文本进行预处理。具体来说,我们需要将文本转化为数字向量的形式,以便于神经网络对其进行处理。在本文中,我们将使用词袋模型(Bag of Words,BoW)来将文本转化为向量表示。

首先,我们需要对文本进行分词,并去除停用词等无用信息。然后,我们将对所有评论中出现的单词进行统计,并将其编号。最后,我们将每条评论表示为一个向量,其中每个元素表示对应单词在该评论中出现的次数。

模型设计

本文将使用卷积神经网络来实现情感分类任务。具体来说,我们将使用一个由卷积层、池化层和全连接层组成的神经网络。其中,卷积层和池化层用于从文本中提取特征,全连接层用于将提取出的特征映射到不同的情感类别中。

卷积层是卷积神经网络的核心组件,用于从输入数据中提取特征。在本文中,我们将使用多个不同大小的卷积核来提取文本中的不同特征。具体来说,我们将使用大小为3、4和5的三个卷积核。每个卷积核的深度为128。

池化层用于对卷积层输出的特征图进行降维。在本文中,我们将使用最大池化(Max Pooling)来实现。具体来说,我们将对每个特征图取最大值,然后将这些最大值拼接在一起作为全连接层的输入。

全连接层用于将提取出的特征映射到不同的情感类别中。具体来说,我们将使用一个包含两个输出节点的全连接层,分别对应正面和负面两种情感。

模型训练

在模型训练之前,我们需要将数据集分为训练集和验证集。在本文中,我们将使用80%的数据用于训练,20%的数据用于验证。

在训练过程中,我们将使用交叉熵损失函数和随机梯度下降(Stochastic Gradient Descent,SGD)优化器。训练过程中,我们将使用批量梯度下降(Batch Gradient Descent)来更新模型参数。

三、代码实现

下面我用Keras框架实现情感分类任务:

import numpy as np
from keras.datasets import imdb
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Conv1D, MaxPooling1D, GlobalMaxPooling1D, Embedding
from tensorflow.keras.preprocessing import sequence

# 设定参数
max_features = 5000
maxlen = 400
batch_size = 32
embedding_dims = 50
filters = 250
kernel_size = 3
hidden_dims = 250
epochs = 10

# 加载数据集
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)

# 将序列填充或截断为固定长度
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)

# 构建模型
model = Sequential()

# 嵌入层
model.add(Embedding(max_features, embedding_dims, input_length=maxlen))

# 一维卷积层
model.add(Conv1D(filters,
                 kernel_size,
                 padding='valid',
                 activation='relu',
                 strides=1))

# 最大池化层
model.add(GlobalMaxPooling1D())

# 全连接层
model.add(Dense(hidden_dims))
model.add(Dropout(0.2))
model.add(Activation('relu'))

# 输出层
model.add(Dense(1))
model.add(Activation('sigmoid'))

# 编译模型
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          validation_data=(x_test, y_test))

# 评估模型
score, acc = model.evaluate(x_test, y_test, batch_size=batch_size)
print('Test score:', score)
print('Test accuracy:', acc)

运行结果:

Epoch 1/10
782/782 [==============================] - 14s 12ms/step - loss: 0.3867 - accuracy: 0.8082 - val_loss: 0.2688 - val_accuracy: 0.8882
Epoch 2/10
782/782 [==============================] - 9s 12ms/step - loss: 0.1998 - accuracy: 0.9224 - val_loss: 0.2710 - val_accuracy: 0.8870
Epoch 3/10
782/782 [==============================] - 9s 12ms/step - loss: 0.1088 - accuracy: 0.9620 - val_loss: 0.3278 - val_accuracy: 0.8772
Epoch 4/10
782/782 [==============================] - 9s 12ms/step - loss: 0.0453 - accuracy: 0.9856 - val_loss: 0.3632 - val_accuracy: 0.8859
Epoch 5/10
782/782 [==============================] - 9s 12ms/step - loss: 0.0190 - accuracy: 0.9939 - val_loss: 0.5028 - val_accuracy: 0.8844
Epoch 6/10
782/782 [==============================] - 9s 12ms/step - loss: 0.0159 - accuracy: 0.9949 - val_loss: 0.5761 - val_accuracy: 0.8767
Epoch 7/10
782/782 [==============================] - 9s 12ms/step - loss: 0.0248 - accuracy: 0.9905 - val_loss: 0.6028 - val_accuracy: 0.8718
Epoch 8/10
782/782 [==============================] - 9s 12ms/step - loss: 0.0200 - accuracy: 0.9924 - val_loss: 0.5844 - val_accuracy: 0.8788
Epoch 9/10
782/782 [==============================] - 10s 12ms/step - loss: 0.0129 - accuracy: 0.9957 - val_loss: 0.7424 - val_accuracy: 0.8718
Epoch 10/10
782/782 [==============================] - 10s 12ms/step - loss: 0.0130 - accuracy: 0.9952 - val_loss: 0.6867 - val_accuracy: 0.8797
782/782 [==============================] - 3s 3ms/step - loss: 0.6867 - accuracy: 0.8797
Test score: 0.6867138147354126
Test accuracy: 0.8796799778938293

Process finished with exit code 0

本文利用卷积神经网络对IMDB电影评论进行二元分类的示例代码。过程是从Keras中导入了相关库和模块,然后设定了一些超参数,包括最大特征数、序列最大长度、批次大小、嵌入层维度、过滤器数量、卷积核大小、隐藏层维度和训练时的迭代次数等。用了IMDB数据集并将数据集划分为训练集和测试集。然后,它使用pad_sequences()函数将序列填充或截断为固定长度,并且构建了一个序列模型。该模型包含一个嵌入层、一个一维卷积层、一个最大池化层、一个全连接层和一个输出层。模型使用ReLU激活函数和Sigmoid激活函数来实现非线性转换,并使用binary_crossentropy损失函数和adam优化器来进行训练和评估。希望大家一看就懂哦,过程清晰明了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​​2021遥感应用组二等奖:基于机器学习回归算法的鄱阳湖水质遥感定量反演及时序变化监测研究

作品介绍 一、作品背景 鄱阳湖是中国第一大淡水湖,也是中国第二大湖,它在调节长江水位、涵养水源、改善当地气候等方面起着重大的作用。但近年来受围垦、环境污染等人类活动影响,鄱阳湖湿地退化严重,同时使鄱阳湖的容量减少&…

JdbcTemplate总结

JdbcTemplate总结 JdbcTemplate技术是 Spring技术里面提供的一种数据库访问技术。之前学习的数据库技术是 JdbcUtils类完成的,现在用JdbcTemplate新技术了。 使用JdbcTemplate技术的本质就是:通过 IOC容器配置一个 JdbcTemplate对象,使用它来…

choco-slover安装

一. 基础知识 1. 起步资料 choco-slover github源代码以及工具下载网址:https://github.com/chocoteam/choco-solverchoco-slover 官网文档:https://choco-solver.org/choco-slover安装eclipse视频:https://www.youtube.com/watch?v=qz6ATkEI_F8视频所采用的资源网址:htt…

C learning_5

数组相关问题 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int arr[] { 1,2,3 };//数组如果初始化的话&#xff0c;可以不指定大小&#xff0c;会根据初始化的内容自动确定大小/*c99标准之前数组的大小不能是变量的但是在c99标准之后引入了变长数…

( “树” 之 BST) 235. 二叉搜索树的最近公共祖先 ——【Leetcode每日一题】

二叉查找树&#xff08;BST&#xff09;&#xff1a;根节点大于等于左子树所有节点&#xff0c;小于等于右子树所有节点。 二叉查找树中序遍历有序。 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定…

考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

来&#xff0c;猜猜看&#xff0c;这里的执行结果是什么&#xff1f; 这是今天课上的一道理解题&#xff0c;给大家一点点思考时间。 &#xff08;心里有答案了再往下滑哦&#xff09; 5 4 3 2 1 . 答案是&#xff0c;报warning&#xff01;因为%d不是用来输出指针的哈…

ntlm hash加密方式学习

文章目录 一、ntlm hash二、LM hash加密三 、NTLM Hash 加密 一、ntlm hash 什么是ntlm hash&#xff0c;当windows进行本地用户密码认证时不是以用户输入的明文密码与系统密码直接比较&#xff0c;而是经过某种方式加密之后进行比较。所以windows中的用户密码凭证不是以明文的…

哪个洗脱一体机好用?好用的洗拖一体机推荐

洗地机是一款使用非常方便的清洁工具&#xff0c;通常可以实现吸、拖、洗三个功能&#xff0c;对于各类家庭污渍都有着不错的处理能力&#xff0c;无论是干燥垃圾还是潮湿垃圾一律可以有效清理。不过很多新手朋友在选购洗地机时会因为看不懂参数而频繁踩雷。本文为大家整理了洗…

图像分割(Segmentation)

文章目录 图像分割FCNU-NetSegNetDeepLab图像分割常用数据集 图像分割 图像分割是预测图像中每一个像素所属的类别或者物体。基于深度学习的图像分割算法主要分为两类&#xff1a; 语义分割&#xff08;Semantic Segmentation&#xff09; 为图像中的每个像素分配一个类别。 …

基于Bert的知识库智能问答系统

项目完整地址&#xff1a; 可以先看一下Bert的介绍。 Bert简单介绍 一.系统流程介绍。 知识库是指存储大量有组织、有结构的知识和信息的仓库。这些知识和信息被存储为实体和实体关系的形式&#xff0c;通常用于支持智能问答系统。在一个知识库中&#xff0c;每个句子通常来说…

用Morss获取全文RSS摘要

什么是 Morss &#xff1f; Morss 工具的目标是从互联网上常见的 RSS 摘要中获取全文 RSS 摘要。Morss 能打开来自 RSS的链接&#xff0c;然后从网站下载整篇文章并将其放回 RSS 摘要中&#xff0c;还可以将摘要导出为 RSS/JSON/CSV/HTML。 Morss 需配合其他 RSS 阅读器使用&am…

人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)

图像风格迁移&#xff08;Style Transfer&#xff09;是一种计算机视觉技术&#xff0c;旨在将一幅图像的风格应用到另一幅图像上&#xff0c;从而生成一幅新图像&#xff0c;该新图像结合了两幅原始图像的特点&#xff0c;目的是达到一种风格化叠加的效果&#xff0c;本次我们…

神经影像分析的统计学方法

线性模型概述 模型是对现实的一种数学近似&#xff0c;其中给定输入变量集的某个函数旨在重建一个输出变量。以fMRI范式为例&#xff0c;在这个范式中&#xff0c;给受试者呈现面孔和房屋的图像。该模型的目标是利用体素对面孔和房屋反应时的预期时间进程&#xff0c;并产生与…

基于html+css的图片展示20

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Mybatis(十)级联映射与懒加载

一、Mybatis的级联映射 使用Mybatis的级联映射&#xff0c;我们可以轻松的实现一对一、一对多或者多对多关联查询&#xff0c;甚至可以利用级联映射实现懒加载。 所谓的懒加载&#xff0c;就是我们在一个实体对象中关联了其他对象&#xff0c;如果不需要获取被关联的对象&…

什么样的测试才是优秀的测试

什么样的测试才是优秀的测试 优秀的测试应该包括以下要素&#xff1a; 测试代码的可读性和可维护性 代码在项目中及特定源代码中的组织方式 测试所检查的内容 测试的可靠性及可重复性 测试对测试替身的使用 可读的代码才是可维护的代码 代码较差的可读性与缺陷密度密切相…

GB 35114-2017 学习笔记

GB 35114-2017 学习笔记 第四章 公共安全视频监控联网信息安全系统互联结构 公共安全视频监控信息安全系统 公共安全视频监控信息安全系统由四部分组成&#xff1a; 具有安全功能的前端设备 FDWSF(安全前端设备:Front-end Device With Safety Function)具有安全功能的用户终…

Ubuntu18.04环境下安装igH EtherCAT Master

一、安装步骤 下载安装包 EtherCAT安装包&#xff1a;igH EtherCAT安装包&#xff08;目前最新的稳定版&#xff09; 安装依赖包 sudo apt install autoconf automake libtool net-tools解压EtherCAT安装包&#xff0c;进入解压出的文件夹&#xff0c;右键打开终端输入 ./b…

Spring IoC容器、IoC与DI

目录 Spring是什么&#xff1f; 理解容器 什么是IoC(Inversion of Control) 传统的new创建对象的方式中类与类的耦合程度很大。 IoC的优势&#xff1a; Spring IoC容器最核心的功能 什么是DI (Dependency Injection) IoC和DI的区别 Spring是什么&#xff1f; Spr…

145. 二叉树的后序遍历【34】

难度等级&#xff1a;容易 上一篇算法&#xff1a; 102. 二叉树的层序遍历【206】 力扣此题地址&#xff1a; 145. 二叉树的后序遍历 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;145. 二叉树的后序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 后…