Размер входного и выходного слоев в реализации Keras языковой модели RNN - PullRequest
0 голосов
/ 04 мая 2020

В рамках своей диссертации я пытаюсь построить рекуррентную модель языка нейронной сети.

Из теории я знаю, что входной слой должен быть слоем с одним горячим вектором с числом нейронов, равным количеству слов нашего словаря, за которым следует слой Embedding, который в Керасе это по-видимому, переводится в один слой Embedded в последовательной модели. Я также знаю, что выходной слой также должен соответствовать размеру нашего словаря, чтобы каждое выходное значение отображало 1-1 на каждое словарное слово.

Однако в обеих документациях Keras для слоя Embedding ( https://keras.io/layers/embeddings/) и в этой статье (https://machinelearningmastery.com/how-to-develop-a-word-level-neural-language-model-in-keras/#comment -533252 ) размер словаря произвольно увеличивается на единицу для входного и выходного слоев! Джейсон объясняет, что это связано с реализацией слоя Embedding в Keras, но это не объясняет, почему мы также используем +1 нейрон в выходном слое. Я хочу упорядочить возможные последующие слова на основе их вероятностей, и у меня слишком много вероятностей, и я не знаю, к какому слову это тоже относится.

Кто-нибудь знает, что является правильным? способ достижения желаемого результата? Неужели Джейсон просто забыл вычесть одно из выходного слоя, а слою Внедрения просто необходим +1 для целей реализации (я имею в виду, что это указано в официальном API)?

Любая помощь по этому вопросу будет признательна (почему документация по Keras API такая лаконичная c?).

Редактировать:

Этот пост Keras встраивает маскирование слоя. Почему input_dim должен быть | словарь | + 2? заставил меня подумать, что Джейсон действительно ошибается и что размер Словаря не должен увеличиваться на единицу, когда наши индексы слова: 0, 1, ..., n-1.

Однако при использовании Токенизатор Keras. Наши индексы слова: 1, 2, ..., n. В этом случае правильный подход заключается в следующем:

  1. Установить mask_zero=True, чтобы обрабатывать 0 по-разному, так как никогда не будет входного индекса 0 (целое число) в слое Embedding и сохранить размер словарного запаса совпадает с количеством словарных слов (n)?

  2. Установить mask_zero=True, но увеличить словарный запас на единицу?

  3. Не установлено mask_zero=True и сохранить размер словарного запаса таким же, как и количество слов словарного запаса?

1 Ответ

1 голос
/ 04 мая 2020

причина, по которой мы добавляем +1, приводит к тому, что мы можем столкнуться с шансом увидеть невидимое слово (вне нашего словарного запаса) во время тестирования или в процессе производства. Обычно для таких терминов обычно используется общий c термин. НЕИЗВЕСТНО, и именно поэтому мы добавляем OOV слово впереди, которое напоминает все из словарных слов. Проверьте эту проблему на github, которая объясняет это подробно:

https://github.com/keras-team/keras/issues/3110#issuecomment -345153450

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...