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)——神经网络性能优化技术详解