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

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

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

0. 前言

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

1. IMDB 数据集

使用 IMDB 数据集构建情感分析模型。IMDB 数据集包含了来自互联网电影数据库的 50,000 条电影评论文本,每条评论都标记为正面或负面。数据集中 25,000 条评论用于训练、25,000 条用于测试。

目标是构建一个分类器,能够根据文本预测评论是正面还是负面。可以通过 tf.keras 加载 IMDB 数据集,评论中的单词序列已经转换为整数序列,其中每个整数代表字典中的一个特定单词。此外,我们还需要将句子填充到最大长度 max_len,以便将所有句子(无论短长) 作为输入传递给具有固定大小输入向量的神经网络:

python 复制代码
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 激活函数的神经元组成,用于进行最终的二元分类:

python 复制代码
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

训练模型:

python 复制代码
(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%

shell 复制代码
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() 方法:

python 复制代码
predictions = model.predict(X)

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

相关链接

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

相关推荐
麻瓜生活睁不开眼6 小时前
Android16修改全局桌面视图边框四直角显示为弧边圆角
android·java·深度学习
workflower6 小时前
装备企业的 AI 路线图
人工智能·深度学习·机器学习·设计模式·机器人
西柚研究生1234569 小时前
创建自己的数据集(GoogLeNet)
深度学习·神经网络·cnn
逻辑君13 小时前
基于 PPO 的双足机器人行走控制
人工智能·深度学习·机器人
美狐美颜SDK开放平台15 小时前
直播APP开发,美颜SDK和相机SDK有什么区别?
android·深度学习·数码相机·ios·直播美颜sdk·视频美颜sdk
逻辑君16 小时前
基于 A2C 算法的双足机器人行走控制
人工智能·深度学习·算法·机器学习·机器人
罗西的思考17 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 — (14)— Teacher
人工智能·笔记·深度学习·算法·机器学习
薛定e的猫咪17 小时前
如何高效构建一个RAG知识库 dify实例与常见问题
人工智能·深度学习
手写码匠18 小时前
华为云Flexus+DeepSeek征文|DeepSeek+RAG知识库实战:基于Flexus X实例与Dify构建企业级智能问答系统
人工智能·深度学习·算法·aigc
bittersuite18 小时前
LeNet,AlexNet
人工智能·深度学习·机器学习