【发布时间】:2020-02-02 03:34:14
【问题描述】:
我正在尝试训练一个用于情感分析的模型,它在将数据拆分为训练和测试时显示出 90% 的准确率!但是每当我在一个新短语上测试它时,结果几乎相同(通常在 0.86 - 0.95 范围内)! 代码如下:
sentences = data['text'].values.astype('U')
y = data['label'].values
sentences_train, sentences_test, y_train, y_test = train_test_split(sentences, y, test_size=0.2, random_state=1000)
tokenizer = Tokenizer(num_words=5000)
tokenizer.fit_on_texts(sentences_train)
X_train = tokenizer.texts_to_sequences(sentences_train)
X_test = tokenizer.texts_to_sequences(sentences_test)
vocab_size = len(tokenizer.word_index) + 1
maxlen = 100
X_train = pad_sequences(X_train, padding='post', maxlen=maxlen)
X_test = pad_sequences(X_test, padding='post', maxlen=maxlen)
embedding_dim = 50
model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=embedding_dim,input_length=maxlen))
model.add(layers.Flatten())
model.add(layers.Dense(10, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.summary()
history = model.fit(X_train, y_train,
epochs=5,
verbose=True,
validation_data=(X_test, y_test),
batch_size=10)
loss, accuracy = model.evaluate(X_train, y_train, verbose=False)
print("Training Accuracy: {:.4f}".format(accuracy))
loss, accuracy = model.evaluate(X_test, y_test, verbose=False)
print("Testing Accuracy: {:.4f}".format(accuracy))
训练数据是一个 CSV 文件,包含 3 个字段:(id, text, labels(0,1)),其中 0 为正数,1 为负数。
Training Accuracy: 0.9855
Testing Accuracy: 0.9013
在新句子上测试它,例如“这只是一个文本!”和“讨厌传教士!”将预测相同的结果 [0.85],[0.83]。
【问题讨论】:
-
你有多少训练样例?您是如何决定使用 5k 作为词汇量的?
标签: python tensorflow machine-learning keras