我有一堆大约 10K 字的 Twitter 文本(大约 70K)。有些更少,有些则更多。我创建了一个 Keras 架构来预测每个 Twitter 文本的 5 个值,并且我已经对那些 70K 进行了训练。然而,准确度(定义如下:当所有 5 个值的差异不超过 10 个时,pred1 和 pred2 匹配发生)为 21%(21% 的测试数据符合上述条件)。我不确定架构、tokenizer 和参数是否适合这个问题,但我会提供代码并寻求帮助。如果有人能帮我弄清楚为什么准确率这么低,我将不胜感激。这是模型:
class NeuralNetMulti(Regressor):
def __init__(self):
self.name = 'keras-sequential'
self.model = Sequential()
self.num_words = 35000
self.tokenizer = Tokenizer(num_words=self.num_words,lower=True)
# self.earlystopping = callbacks.EarlyStopping(monitor="mae",# mode="min",patience=5,# restore_best_weights=True)
def fit(self,X,y):
print('Fitting into the neural net...')
#n_inputs = X.shape[1]
n_outputs = y.shape[1]
self.tokenizer.fit_on_texts(X)
encoded_docs = self.tokenizer.texts_to_sequences(X)
max_length = max([len(s.split()) for s in X])
self.max_length = max_length
X_train = pad_sequences(encoded_docs,maxlen=max_length,padding='post')
vocab_size = len(self.tokenizer.word_index) + 1
print(max_length)
self.model.add(Embedding(self.num_words,512,input_length=max_length))
self.model.add(Conv1D(filters=32,kernel_size=8,activation='relu'))
self.model.add(MaxPooling1D(pool_size=2))
self.model.add(Conv1D(filters=16,kernel_size=4,activation='relu'))
self.model.add(MaxPooling1D(pool_size=2))
self.model.add(Conv1D(filters=8,activation='relu'))
self.model.add(MaxPooling1D(pool_size=2))
self.model.add(flatten())
self.model.add(Dense(1024,activation='relu'))
self.model.add(Dense(512,activation='relu'))
self.model.add(Dense(256,activation='relu'))
self.model.add(Dense(n_outputs))
self.model.summary()
self.model.compile(loss='mse',optimizer='adam',metrics=['mse','mae'])
history = self.model.fit(X_train,y,verbose=1,epochs=5,validation_split=0.1,batch_size=16)
def predict(self,X):
print('Predicting...')
encoded_docs = self.tokenizer.texts_to_sequences(X)
X_test = pad_sequences(encoded_docs,maxlen=self.max_length,padding='post')
predictions = self.model.predict(X_test,verbose=1)
print('Predicted!')
return predictions
在这种情况下,X 只是一个字符串数组(文本)。它们可能是 1000 个单词,但大多数都在 10K 个单词左右。 y
是我提到的具有 5 个值的数组数组。它们中的每一个都在 0 到 100 之间。这个模型达到了 21% 的准确率,但之前我使用了 TfIdf + PCA 和基本的 Dense 网络,我在相同的数据上达到了 62% 的准确率。我很感激任何在这个领域有经验的人提供专业的建议。提前致谢!