Понимание внедрения уровня символов в Keras LSTM

Я новичок в реализации языковых моделей в структурах Keras RNN. У меня есть набор данных дискретных слов (не из одного абзаца), которые имеют следующую статистику,

  1. Всего образцов слов: 1953
  2. Общее количество отличительных персонажей: 33 (включая START, END и *)
  3. Максимальная длина (количество символов) в слове – 10

Теперь я хочу построить модель, которая примет символ и предсказать следующий символ в слове. Я заполнил все слова так, чтобы они имели одинаковую длину. Итак, мой ввод – это Word_input с формой 1953 x 9, а цель – 1953 x 9 x 33 . Я также хочу использовать слой Embedding. Итак, моя сетевая архитектура,

self.wordmodel=Sequential() self.wordmodel.add(Embedding(33,embedding_size,input_length=9)) self.wordmodel.add(LSTM(128, return_sequences=True)) self.wordmodel.add(TimeDistributed(Dense(33))) self.wordmodel.compile(loss='mse',optimizer='rmsprop',metrics=['accuracy']) 

В качестве примера слово «CAT» с дополнением представляет

Вход в сеть – START CAT END * * * * (9 символов)

Цель этого же — CAT END * * * * * (9 символов)

Таким образом, с выходом TimeDistributed я TimeDistributed разницу в предсказании сети и цели. Я также установил batch_size 1. Таким образом, после прочтения каждого примерного слова сеть перезагружает свое состояние.

Мой вопрос заключается в том, что я делаю это концептуально правильно? Всякий раз, когда я выполняю свое обучение, точность застревает около 56%.

Пожалуйста, просветите меня. Благодарю.

    Насколько мне известно, структура является базовой и может в некоторой степени работать. У меня есть некоторые предложения

    1. В слое TimeDistributed вы должны добавить функцию активации softmax которая широко используется в multi-classification . И теперь в вашей структуре выход не ограничен, и он не интуитивно понятен, так как ваша цель просто горячая.

    2. С функцией softmax вы можете изменить потери на cross-entropy которые увеличивают вероятность правильного класса и уменьшают другие. Это более уместно.

    вы можете попробовать. Для более полезной модели вы можете попробовать следующую структуру, которая приведена в учебнике Pytorch . Благодарю.

    введите описание изображения здесь