В рамках своей диссертации я пытаюсь построить рекуррентную модель языка нейронной сети.
Из теории я знаю, что входной слой должен быть слоем с одним горячим вектором с числом нейронов, равным количеству слов нашего словаря, за которым следует слой 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
. В этом случае правильный подход заключается в следующем:
Установить mask_zero=True
, чтобы обрабатывать 0 по-разному, так как никогда не будет входного индекса 0 (целое число) в слое Embedding и сохранить размер словарного запаса совпадает с количеством словарных слов (n
)?
Установить mask_zero=True
, но увеличить словарный запас на единицу?
Не установлено mask_zero=True
и сохранить размер словарного запаса таким же, как и количество слов словарного запаса?