TF Keras Обработка текста - модель классификации - PullRequest
0 голосов
/ 30 марта 2020

Ранее я опубликовал вопрос о написанном мной сценарии TensorFlow, который не работал должным образом. Я сузил проблему и удалил старый комментарий, надеюсь, за ним легче следовать. Я в основном пытаюсь следовать классическому c примеру предсказания комментариев mov ie к IMDB, которые являются либо положительными, либо отрицательными. Я рассмотрел множество вариантов этого, и моя главная проблема в том, что моя модель возвращает одно и то же предсказание метки (метка - это настроение, положительное / отрицательное). Я на 99% уверен, что проблема в сборке / компиляции моей модели:

NUM_WORDS = 10000
SEQ_LEN = 512
EMBEDDING_SIZE = 300
BATCH_SIZE = 500
EPOCHS = 20

**model = tf.keras.Sequential([
        tf.keras.layers.Embedding(NUM_WORDS, 32, input_length = BATCH_SIZE),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(250, activation = 'relu'),
        tf.keras.layers.Dense(1, activation = 'sigmoid')])**

model.summary()

model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

es = tf.keras.callbacks.EarlyStopping(monitor = 'val_accuracy', mode = 'max')

callbacks = [es]
history = model.fit(train_seqs, train_df['adq'].values,
                    batch_size = BATCH_SIZE,
                    epochs = EPOCHS,
                    validation_split = 0.2,
                    callbacks = callbacks)

model.evaluate(test_seqs, test_df['adq'].values)


model.save('model.ps1')
with open('tokenizer.pickle', 'wb') as handle:
    pickle.dump(tokenizer, handle, protocol = pickle.HIGHEST_PROTOCOL)

del model
del tokenizer


loaded_model = tf.keras.models.load_model('model.ps1')

with open('tokenizer.pickle', 'rb') as f:
    loaded_tokenizer = pickle.load(f)

def prepare_predict_data(tokenizer, comments):
    seqs = tokenizer.texts_to_sequences(comments)
    seqs = tf.keras.preprocessing.sequence.pad_sequences(seqs, maxlen = SEQ_LEN, padding = 'post')
    return seqs

Моя предварительная обработка текста, токенизация и заполнение - все работает, и у меня есть около 38000 комментариев в моем обучающем наборе, каждый с длиной последовательности 512, опять же, заполнение выглядит хорошо. Можете ли вы дать мне знать, где я иду не так? Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 31 марта 2020

попробуйте

model = tf.keras.Sequential([
tf.keras.layers.Embedding(NUM_WORDS, 100, input_length = BATCH_SIZE),
tf.keras.layers.GlobalAveragePooling1D(),
tf.keras.layers.Dense(1, activation = 'sigmoid')]
...