用rnn实现情感分类的代码
时间: 2024-04-30 21:22:49 浏览: 9
以下是使用RNN实现情感分类的代码示例:
```
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Embedding, LSTM, SpatialDropout1D
from sklearn.model_selection import train_test_split
# 读取数据集
data = pd.read_csv('sentiment_analysis.csv')
data = data[['text', 'sentiment']]
data = data[data.sentiment != "Neutral"]
data['text'] = data['text'].apply(lambda x: x.lower())
data['text'] = data['text'].apply((lambda x: re.sub('[^a-zA-z0-9\s]', '', x)))
# 获取文本和标签
texts = data['text'].values
labels = pd.get_dummies(data['sentiment']).values
# 对文本进行分词,并将每个词转换为数字
tokenizer = Tokenizer(num_words=2000, split=' ')
tokenizer.fit_on_texts(texts)
X = tokenizer.texts_to_sequences(texts)
X = pad_sequences(X)
# 划分数据集
X_train, X_test, Y_train, Y_test = train_test_split(X, labels, test_size=0.33, random_state=42)
# 构建RNN模型
embed_dim = 128
lstm_out = 196
model = Sequential()
model.add(Embedding(2000, embed_dim, input_length=X.shape[1]))
model.add(SpatialDropout1D(0.4))
model.add(LSTM(lstm_out, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
batch_size = 32
model.fit(X_train, Y_train, epochs=10, batch_size=batch_size, verbose=2)
# 评估模型
score, acc = model.evaluate(X_test, Y_test, verbose=2, batch_size=batch_size)
print("score: %.2f" % (score))
print("acc: %.2f" % (acc))
```
在这个示例中,我们首先读取数据集并对文本进行预处理。然后,我们使用Tokenizer将文本转换为数字,并使用pad_sequences将每个序列填充到相同的长度。然后,我们将数据集划分为训练集和测试集。
接下来,我们构建RNN模型。我们使用Embedding层将每个数字转换为向量,然后添加SpatialDropout1D层和LSTM层。最后,我们添加一个Dense层,并使用softmax激活函数对输出进行分类。我们使用categorical_crossentropy作为损失函数,使用adam优化器进行训练,并使用accuracy作为评估指标。
最后,我们训练模型并评估其性能。