python - 如何使用 Keras imdb 数据集预测情绪分析?
问题描述
我正在使用 keras 来实现情感分析模型。我已经创建了模型并对其进行了训练。但现在我不确定如何预测新数据,因为 imdb 数据集已经在向量中([22,33,4, etc...])。
那么我如何对一个新句子进行预测,例如:“我喜欢这部电影”?
from keras.datasets import imdb
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM, Convolution1D, Flatten, Dropout
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
from keras.callbacks import TensorBoard
# Using keras to load the dataset with the top_words
top_words = 10000
(X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=top_words)
# Pad the sequence to the same length
max_review_length = 1600
X_train = sequence.pad_sequences(X_train, maxlen=max_review_length)
X_test = sequence.pad_sequences(X_test, maxlen=max_review_length)
# Using embedding from Keras
embedding_vecor_length = 300
model = Sequential()
model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length))
# Convolutional model (3x conv, flatten, 2x dense)
model.add(Convolution1D(64, 3, padding='same'))
model.add(Convolution1D(32, 3, padding='same'))
model.add(Convolution1D(16, 3, padding='same'))
model.add(Flatten())
model.add(Dropout(0.2))
model.add(Dense(180,activation='sigmoid'))
model.add(Dropout(0.2))
model.add(Dense(1,activation='sigmoid'))
# Log to tensorboard
tensorBoardCallback = TensorBoard(log_dir='./logs', write_graph=True)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=3, callbacks=[tensorBoardCallback], batch_size=64)
# Evaluation on the test set
scores = model.evaluate(X_test, y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
model.save("trained_demo.h5")
解决方案
您必须获取单词,索引对的字典。使用它,您可以将单词转换为索引,最后填充它。
from nltk import word_tokenize
from keras.preprocessing import sequence
word2index = imdb.get_word_index()
test=[]
for word in word_tokenize( "i love this movie"):
test.append(word2index[word])
test=sequence.pad_sequences([test],maxlen=max_review_length)
model.predict(test)
推荐阅读
- c - 避免使用 .data 段
- git - 在 Git 中,当源分支历史已更改时,如何从功能分支中变基?
- c# - 如何在不使用 C# 循环的情况下打印我的名字 100 次?
- django - 只有管理员可以访问的页面
- localization - 如何在 nuxt-i18n 文本中包含链接
- c# - 如何使我在 C# 中为 VSTO 应用程序创建的自定义按钮和功能区在 Outlook (MS Office 365 ProPlus) 中可见?
- python - 删除数值前的字符串,但不删除如果在熊猫数据框列中包含邮政信箱地址或套房号?
- c - 为什么我的结果在第一次迭代后不会更新(?)
- reporting-services - 我可以在 SSRS 表达式中使用 WHERE 子句吗?
- javascript - 仅考虑字母和数字在基本字符串中查找句子