当前位置: 首页 > article >正文

TensorFlow深度学习实战——情感分析模型

TensorFlow深度学习实战——情感分析模型

    • 0. 前言
    • 1. IMDB 数据集
    • 2. 构建情感分析模型
    • 3. 预测输出
    • 相关链接

0. 前言

情感分析 (Sentiment Analysis) 是一种自然语言处理 (Natural Language Processing, NLP) 技术,旨在分析和识别文本中的情感倾向,情感分析模型能够根据情感倾向对文本进行分类。在本节中,我们将实现基于全连接神经网络的情感分析模型,以进一步熟悉神经网络构建流程。

1. IMDB 数据集

使用 IMDB 数据集构建情感分析模型。IMDB 数据集包含了来自互联网电影数据库的 50,000 条电影评论文本,每条评论都标记为正面或负面。数据集中 25,000 条评论用于训练、25,000 条用于测试。
目标是构建一个分类器,能够根据文本预测评论是正面还是负面。可以通过 tf.keras 加载 IMDB 数据集,评论中的单词序列已经转换为整数序列,其中每个整数代表字典中的一个特定单词。此外,我们还需要将句子填充到最大长度 max_len,以便将所有句子(无论短长) 作为输入传递给具有固定大小输入向量的神经网络:

import tensorflow as tf
from tensorflow.keras import datasets, layers, models, preprocessing

max_len = 200
n_words = 10000
dim_embedding = 256
EPOCHS = 20
BATCH_SIZE =500

def load_data():
    #load data
    (X_train, y_train), (X_test, y_test) = datasets.imdb.load_data(num_words=n_words)
    # Pad sequences with max_len
    X_train = preprocessing.sequence.pad_sequences(X_train, maxlen=max_len)
    X_test = preprocessing.sequence.pad_sequences(X_test, maxlen=max_len)
    return (X_train, y_train), (X_test, y_test)

2. 构建情感分析模型

构建模型。使用 Embedding() 层将评论中的稀疏单词空间映射到更密集的空间中,使计算更容易,使用 GlobalMaxPooling1D() 层从特征向量中提取最大值;另外,还包含两个 Dense() 层,最后一层由一个具有 sigmoid 激活函数的神经元组成,用于进行最终的二元分类:

def build_model():
    model = models.Sequential()
    #Input - Emedding Layer
    model.add(layers.Embedding(n_words, 
              dim_embedding, input_length=max_len))

    model.add(layers.Dropout(0.3))

    #takes the maximum value of either feature vector from each of the n_words features
    model.add(layers.GlobalMaxPooling1D())
    model.add(layers.Dense(128, activation='relu'))
    model.add(layers.Dropout(0.5))
    model.add(layers.Dense(1, activation='sigmoid'))

    return model

训练模型:

(X_train, y_train), (X_test, y_test) = load_data()
model=build_model()
model.summary()

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

score = model.fit(X_train, y_train,
                  epochs = EPOCHS, batch_size = BATCH_SIZE,
                  validation_data = (X_test, y_test),
                  verbose=2)

score = model.evaluate(X_test, y_test, batch_size=BATCH_SIZE)
print("\nTest score:", score[0])
print('Test accuracy:', score[1])

观察网络迭代训练过程:

网络训练过程

模型准确率大约为 85%

Epoch 20/20
50/50 - 8s - loss: 0.0063 - accuracy: 0.9990 - val_loss: 0.4974 - val_accuracy: 0.8495 - 8s/epoch - 162ms/step

Test score: 0.49739953875541687
Test accuracy: 0.8494799733161926

3. 预测输出

模型训练完成后,就可以将其用于预测。在 TensorFlow 中,可以使用 predict() 方法:

predictions = model.predict(X)

对于给定的输入,可以计算多种类型的输出,例如使用 model.evaluate() 方法计算损失值,使用 model.predict_classes() 方法计算类别输出,使用 model.predict_proba() 方法计算类别概率。

相关链接

TensorFlow深度学习实战(1)——神经网络与模型训练过程详解
TensorFlow深度学习实战(2)——使用TensorFlow构建神经网络
TensorFlow深度学习实战(3)——深度学习中常用激活函数详解
TensorFlow深度学习实战(4)——正则化技术详解
TensorFlow深度学习实战(5)——神经网络性能优化技术详解


http://www.kler.cn/a/511703.html

相关文章:

  • SSM课设-学生管理系统
  • Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)
  • AI时代下 | 通义灵码冲刺备战求职季
  • Python制作简易PDF查看工具PDFViewerV1.0
  • 聚铭网络6款产品入选CCIA《网络安全专用产品指南》
  • CT重建笔记(三)——共轭梯度法
  • SpringCloud系列教程:微服务的未来(十四)网关登录校验、自定义过滤器GlobalFilter、GatawayFilter
  • 应急管理大数据指挥中心解决方案
  • HUDI-0.11.0 BUCKET index on Flink 特性试用
  • C语言数组与字符串操作全解析:从基础到进阶,深入掌握数组和字符串处理技巧
  • 数智化转型 | 星环科技Defensor 助力某银行数据分类分级
  • 在k8s中部署一个可外部访问的Redis Sentinel
  • Pix2Pix :用于图像到图像转换的条件生成对抗网络
  • 第八篇:监视`ref`定义的【基本类型】数据
  • qt for android 报错解决记录
  • 嵌入式Linux驱动开发之platform
  • 深度学习学习笔记(第30周)
  • C语言之斗地主游戏
  • 简述1个业务过程:从客户端调用接口,再到调用中间件(nacos、redis、kafka、feign),数据库的过程
  • 【HarmonyOS NAPI 深度探索11】搭建 NAPI 开发环境:HarmonyOS DevEco Studio 全指南
  • PortSwigger NoSQL 注入
  • mybatis保存数据库类型为json类型数据报错
  • JAVA使用自定义注解,在项目中实现EXCEL文件的导出
  • 微服务学习:基础理论
  • 【STM32-学习笔记-11-】RTC实时时钟
  • SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——主目录(持续更新)