我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Tensorflow2.1实现文本中情感分类实现解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Tensorflow2.1实现文本中情感分类实现解析

前言

本文主要是用 cpu 版本的 tensorflow 2.1 搭建深度学习模型,完成对电影评论的情感分类任务。 本次实践的数据来源于IMDB 数据集,里面的包含的是电影的影评,每条影评评论文本分为积极类型或消极类型。数据集总共包含 50000 条影评文本,取该数据集的 25000 条影评数据作为训练集,另外 25000 条作为测试集,训练集与测试集中包含相等数量的积极和消极影评,保证数据质量的平衡。

实现过程和思路解析

下载影评数据并进行 padding 处理

(1)这里主要是通过 tf 内置的接口从网络上下载 imdb 数据,该数据是已经经过处理的,每一条评论中的每个单词都是用对应的整数表示的,所以每一条评论都是一个整数列表。而对应的每条影评的标签是一个 0 或 1 的整数, 0 代表的是消极评论,1 代表的是积极评论。

(2)这里的 num_words=6000 表示我们只需要保留了训练数据中出现频率最高的 6000 个常用单词,低频词会被全部弃用,因为一方面这些低频词可能是些符号或者停用词,对影评情感分类没有意义,另一方面如果低频词太多,需要构造的词典太过庞大,严重影响计算效率,且消耗大量内存。

import tensorflow as tf
from tensorflow import keras
imdb = keras.datasets.imdb
num_words = 6000
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=num_words)

(3)这里主要是建立整数与单词之间的映射关系,并建立了一个函数 decode_review 可以将影评数据从数字序列转换回单词序列。

word_index = imdb.get_word_index()
word_index = {k:(v+3) for k,v in word_index.items()}
word_index["<PAD>"] = 0
word_index["<START>"] = 1
word_index["<UNK>"] = 2  # unknown
word_index["<UNUSED>"] = 3
index_word = dict([(value, key) for (key, value) in word_index.items()])
def decode_review(text):
    return ' '.join([index_word.get(i, '?') for i in text])

(4)这里主要是对影评数据进行填充,因为每条数据的长度(数字序列的长度)是不一致的,而要进行深度学习模型的输入必须要保证每条影评数据的长度相等,所以我们要进行填充操作,指定了最大的影评长度 maxlen 为 256 ,如果超过 256 则进行截断,如果不足 256 则用 0 (也就是<PAD>对应的整数)在末尾进行填充。这里的 maxlen 可以随意指定,但是其长度会影响模型的效果,需要在实践中不断调整折中。

train_data = keras.preprocessing.sequence.pad_sequences(train_data, value=word_index["<PAD>"], padding='post', maxlen=256)
val_data = keras.preprocessing.sequence.pad_sequences(val_data, value=word_index["<PAD>"], padding='post', maxlen=256)
test_data = keras.preprocessing.sequence.pad_sequences(test_data, value=word_index["<PAD>"], padding='post', maxlen=256)

创建验证集数据

这里主要是创建验证集,那么有了训练集为什么要创建验证集呢?首先我们要知道训练集数据是用来开发和调整模型的,而检查模型的准确率指标只能是用未见过的数据进行评测,所以我们从原始的训练数据中抽取出 10000 个样本来创建验证集,此时训练样本只有 15000 个,我们结合使用训练集和验证集共同调整和开发模型,当模型定型之后,最后需要使用一次测试集评估模型的实际使用效果即可。

val_data = train_data[:10000]
val_labels = train_labels[:10000]
train_data = train_data[10000:]
train_labels = train_labels[10000:]

搭建简单的深度学习模型

(1)第一层是 Embedding 层,它将输入的每一个单词转换为一个 32 维的向量,所以每一个样本输入就从一维的 (sequence) 变成了二维的 (sequence, 32)

(2)第二层主要是使用了平均池化操作 GlobalAveragePooling1D , 此操作可以将每个样本的二维维度向量 (sequence, 32) 又压缩成一维向量 (32) ,上一步中的 32 维向量表示的是每个单词向量,但是这里的 32 维向量表示的是一个影评样本向量。

(3)第三层是一个通过 relu 激活函数将输入转换成输出为 16 维度向量的全连接层操作

(4)第四层是一个通过 sigmoid 激活函数将输入转换成输出为 1 维度向量的全连接层操作,也就是最后输出一个介于 0 与 1 之间的浮点数,它表示了概率,常规情况下如果概率大于等于 0.5 则说明该样本预测类别为 1 ,否则说明该样本预测类别为 0

model = keras.Sequential()
model.add(keras.layers.Embedding(num_words, 32))
model.add(keras.layers.GlobalAveragePooling1D())
model.add(keras.layers.Dense(16 , activation='relu'))
model.add(keras.layers.Dense(1, activation='sigmoid'))
model.summary()

配置并编译模型

(1)我们选择了常用的 Adam 优化器,你也可以自行选择其他优化器。

(2)因为这是一个二分类问题且模型会输出一个概率值,我们选择了常见的 binary_crossentropy 损失函数。

(3)评估指标我们选择了最容易理解的准确率 accuracy 。

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

训练模型

这里主要是使用训练数据进行模型的训练,使用训练集反复进行 40 次模型训练,并且在训练过程中,使用验证集的 10000 个样本来评估模型上的损失值(loss)和准确率(accuracy)。

model.fit(train_data, train_labels, epochs=40, batch_size=512, validation_data=(val_data, val_labels), verbose=1)

输出如下所示:

Train on 15000 samples, validate on 10000 samples
Epoch 1/40
15000/15000 [==============================] - 3s 169us/sample - loss: 0.6913 - accuracy: 0.5465 - val_loss: 0.6881 - val_accuracy: 0.6872
Epoch 2/40
15000/15000 [==============================] - 1s 88us/sample - loss: 0.6815 - accuracy: 0.7043 - val_loss: 0.6732 - val_accuracy: 0.7427
Epoch 3/40
...
Epoch 38/40
15000/15000 [==============================] - 1s 79us/sample - loss: 0.1045 - accuracy: 0.9707 - val_loss: 0.3431 - val_accuracy: 0.8738
Epoch 39/40
15000/15000 [==============================] - 1s 76us/sample - loss: 0.1022 - accuracy: 0.9712 - val_loss: 0.3470 - val_accuracy: 0.8737
Epoch 40/40
15000/15000 [==============================] - 1s 77us/sample - loss: 0.0985 - accuracy: 0.9735 - val_loss: 0.3526 - val_accuracy: 0.8725

评估模型

这里主要是使用测试数据对模型进行评估,由于当前模型较为简单,如果使用复杂的模型和更好的训练方法,准确率应该能达到 98% 以上.

model.evaluate(test_data,  test_labels, verbose=2)

结果输出为,损失为 0.368 ,准确率为 0.86488 :

[0.368153291721344, 0.86488]

以上就是Tensorflow2.1实现文本中情感分类实现解析的详细内容,更多关于Tensorflow2.1文本情感分类的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Tensorflow2.1实现文本中情感分类实现解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Tensorflow2.1实现文本中情感分类实现解析

这篇文章主要为大家介绍了Tensorflow2.1实现文本中情感分类实现解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-21

PHP 开发中 Elasticsearch 实现文本挖掘与情感分析

近年来,随着互联网的快速发展,海量的文本数据被不断产生。这些文本数据蕴含着丰富的信息,对于企业来说,通过对文本数据的挖掘与分析,可以获取用户需求、产品意见、市场趋势等有价值的信息。而Elasticsearch作为一种分布式搜索引擎,具有擅长
2023-10-21

pytorch 实现情感分类问题小结

本文主要介绍了pytorch 实现情感分类问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-14

循环神经网络TextRNN实现情感短文本分类任务

这篇文章主要为大家介绍了循环神经网络TextRNN实现情感短文本分类任务详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

卷积神经网络CharCNN实现中文情感分类任务

这篇文章主要为大家介绍了卷积神经网络CharCNN实现中文情感分类任务详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

Python基于jieba分词实现snownlp情感分析

情感分析(sentimentanalysis)是2018年公布的计算机科学技术名词,它可以根据文本内容判断出所代表的含义是积极的还是负面的等。本文将通过jieba分词实现snownlp情感分析,感兴趣的可以了解一下
2023-01-30

自然语言处理NLPTextRNN实现情感分类

这篇文章主要为大家介绍了自然语言处理NLPTextRNN实现情感分类示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

python实现文本分类

一、中文文本分类流程:1. 预处理2. 中文分词3. 结构化表示-构建词向量空间4.权重策略-TF-IDF5. 分类器6. 评价二、具体细节1.预处理    1.1. 得到训练集语料库    本文采用复旦中文文本分类语料库,下载链接:htt
2023-01-31

如何利用python实现简单的情感分析

今天小编给大家分享一下如何利用python实现简单的情感分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1 数据导入及预处
2023-07-02

Python底层技术揭秘:如何实现情感分析

Python底层技术揭秘:如何实现情感分析,需要具体代码示例引言:随着社交媒体的普及和大数据时代的到来,情感分析成为了一个被广泛关注和应用的领域。情感分析可以帮助我们理解和分析用户的情感和意见,从而对产品、服务或市场做出更合理的决策。Pyt
Python底层技术揭秘:如何实现情感分析
2023-11-08

如何利用ChatGPT和Python实现情感分析功能

如何利用ChatGPT和Python实现情感分析功能介绍ChatGPTChatGPT是OpenAI于2021年发布的一种基于强化学习的生成式预训练模型,它采用了强大的语言模型来生成连贯的对话。ChatGPT可以用于各种任务,包括情感分析。导
2023-10-24

Python中怎么实现文本分析

这期内容当中小编将会给大家带来有关Python中怎么实现文本分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。任务(Task)人为判断同义词很简单,但用程序来判断就不简单了。小爱想到了两种方式:制作一个同
2023-06-16

Tensorflow中怎么实现CNN文本分类

今天就跟大家聊聊有关Tensorflow中怎么实现CNN文本分类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 数据和预处理我们将在这篇文章中使用的数据集是 Movie Revi
2023-06-19

如何利用ChatGPT和Python实现对话情感分析功能

如何利用ChatGPT和Python实现对话情感分析功能引言:随着人工智能和自然语言处理的快速发展,对话情感分析成为了一个备受关注的研究领域。ChatGPT作为一个先进的生成式对话模型,为我们提供了一个很好的工具来实现对话情感分析。本文将介
2023-10-24

Python中怎么实现一个感知器分类算法

Python中怎么实现一个感知器分类算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。感知器算法Perceptron算法是两类(二进制)分类机器学习算法。它是一种神经网络模
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录