Python深度学习零基础入门(二):电影评论情感分析

Python深度学习零基础入门(二):电影评论情感分析实战

一、情感分析任务解析

  1. 任务目标:判断电影评论的情感倾向(正面/负面)

  2. 数据特征:文本序列 → 数值向量转换

  3. 技术路线

    文本向量化 → 嵌入层学习 → 特征提取 → 二分类预测

二、实战准备与数据加载

  1. 环境配置(复用首篇环境)
python 复制代码
import tensorflow as tf
from tensorflow.keras import layers
import numpy as np
  1. 加载IMDB数据集
python 复制代码
# 保留出现频率最高的10000个单词
(train_data, train_labels), (test_data, test_labels) = tf.keras.datasets.imdb.load_data(num_words=10000)

# 查看第一条评论的数值表示
print(train_data[0])  # 输出整数序列
  1. 数据预处理技巧
python 复制代码
# 将整数序列转换为多热编码(Multi-hot Encoding)
def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.  # 出现单词的位置标记为1
    return results

x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)

# 标签向量化
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')

三、构建情感分析模型

  1. 网络架构设计
python 复制代码
model = tf.keras.Sequential([
    layers.Dense(16, activation='relu', input_shape=(10000,)),
    layers.Dropout(0.5),  # 随机丢弃50%神经元防止过拟合
    layers.Dense(16, activation='relu'),
    layers.Dense(1, activation='sigmoid')  # 二分类输出
])
  1. 模型编译配置
python 复制代码
model.compile(optimizer='adam',
              loss='binary_crossentropy',  # 二分类专用损失函数
              metrics=['accuracy'])
  1. 验证集划分
python 复制代码
x_val = x_train[:10000]
partial_x_train = x_train[10000:]
y_val = y_train[:10000]
partial_y_train = y_train[10000:]

四、模型训练与可视化

  1. 训练过程执行
python 复制代码
history = model.fit(partial_x_train,
                    partial_y_train,
                    epochs=20,
                    batch_size=512,
                    validation_data=(x_val, y_val))
  1. 训练过程可视化
python 复制代码
import matplotlib.pyplot as plt

history_dict = history.history

# 绘制损失曲线
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(history_dict['loss'], label='训练损失')
plt.plot(history_dict['val_loss'], label='验证损失')
plt.title('训练与验证损失')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

# 绘制准确率曲线
plt.subplot(1, 2, 2)
plt.plot(history_dict['accuracy'], label='训练准确率')
plt.plot(history_dict['val_accuracy'], label='验证准确率')
plt.title('训练与验证准确率')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

五、模型优化技巧

  1. 应对过拟合策略
  • 增加Dropout比例
  • 减少网络容量
  • 添加L2正则化
python 复制代码
from tensorflow.keras import regularizers

model.add(layers.Dense(16, 
                       kernel_regularizer=regularizers.l2(0.001),
                       activation='relu'))
  1. 学习率调整
python 复制代码
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0001),
              loss='binary_crossentropy',
              metrics=['accuracy'])
  1. 早停法(Early Stopping)
python 复制代码
from tensorflow.keras.callbacks import EarlyStopping

early_stop = EarlyStopping(monitor='val_loss', 
                           patience=3,
                           restore_best_weights=True)
history = model.fit(..., callbacks=[early_stop])

六、实践拓展方向

  1. 自然语言处理进阶
  • 尝试LSTM/GRU处理序列数据
  • 使用预训练词向量(Word2Vec/GloVe)
  • 探索Transformer模型
  1. 其他二分类场景
  • 垃圾邮件识别
  • 疾病诊断预测
  • 金融欺诈检测
  1. 部署实践
python 复制代码
# 保存训练好的模型
model.save('sentiment_analysis.h5')

# 加载模型进行预测
loaded_model = tf.keras.models.load_model('sentiment_analysis.h5')
test_pred = loaded_model.predict(x_test)

实战建议:建议在Colab或Kaggle平台实践时,尝试修改以下参数观察影响:

  • 调整隐藏层神经元数量(8/32/64)
  • 改变Dropout比例(0.2-0.6)
  • 测试不同优化器(RMSprop/SGD)
  • 增加/减少训练轮次

通过本案例可以掌握:

  • 文本数据的数值化处理方法
  • 二分类模型的构建技巧
  • 过拟合现象的识别与应对
  • 训练过程的监控与优化
相关推荐
Luminbox紫创测控1 小时前
汽车自动驾驶的太阳光模拟应用研究
人工智能·自动驾驶·汽车
吴佳浩6 小时前
大模型量化部署终极指南:让700亿参数的AI跑进你的显卡
人工智能·python·gpu
跨境卫士苏苏7 小时前
亚马逊AI广告革命:告别“猜心”,迎接“共创”时代
大数据·人工智能·算法·亚马逊·防关联
珠海西格电力7 小时前
零碳园区工业厂房光伏一体化(BIPV)基础规划
大数据·运维·人工智能·智慧城市·能源
diegoXie7 小时前
Python / R 向量顺序分割与跨步分割
开发语言·python·r语言
七牛云行业应用8 小时前
解决OSError: No space left... 给DeepSeek Agent装上无限云硬盘
python·架构设计·七牛云·deepseek·agent开发
土星云SaturnCloud8 小时前
不止是替代:从机械风扇的可靠性困局,看服务器散热技术新范式
服务器·网络·人工智能·ai
小马爱打代码8 小时前
Spring AI:搭建自定义 MCP Server:获取 QQ 信息
java·人工智能·spring
你们补药再卷啦8 小时前
ai(三)环境资源管理
人工智能·语言模型·电脑
BoBoZz198 小时前
CutWithScalars根据标量利用vtkContourFilter得到等值线
python·vtk·图形渲染·图形处理