Использование встраивания / встраивания слоя в глубокое обучение - PullRequest
1 голос
/ 28 мая 2019

Я изучаю методы глубокого обучения, особенно LSTM, чтобы предсказать следующее слово.Предположим, мой набор данных выглядит следующим образом: каждая точка данных состоит из 7 объектов (7 разных слов) (здесь AG) различной длины.

 Group1  Group2............ Group 38
   A        B                   F
   E        C                   A
   B        E                   G
   C        D                   G
   C        F                   F
   D        G                   G
   .        .                   .
   .        .                   . 

Я использовал одно горячее кодирование в качестве входного слоя.Здесь представлена ​​модель

main_input= Input(shape=(None,action_count),name='main_input')
lstm_out= LSTM(units=64,activation='tanh')(main_input)
lstm_out=Dropout(0.2)(lstm_out)
lstm_out=Dense(action_count)(lstm_out)
main_output=Activation('softmax')(lstm_out)
model=Model(inputs=[main_input],outputs=main_output)
print(model.summary())

Использование этой модели.Я получил точность около 60%.Мой вопрос - как я могу использовать слой внедрения для своей задачи.На самом деле, я не знаю много о встраивании (почему, когда и как это работает) [Я знаю только один горячий вектор, который не несет много информации].Мне интересно, может ли embedding улучшить точность.Если кто-то может дать мне руководство по этим вопросам, это будет очень полезно для меня.(По крайней мере, является ли использование встраивания логичным или нет для моего случая)

1 Ответ

1 голос
/ 29 мая 2019

Что такое встраиваемые слои?

Это слои, которые преобразуют натуральные числа (возможно, количество слов) в плотные векторы фиксированного размера.Они изучают так называемые вложения для определенного набора текстовых данных (в задачах НЛП).

Почему они полезны?

Встраивание слоев медленно изучает отношения между словами.Следовательно, если у вас достаточно большой корпус (который, вероятно, содержит все возможные английские слова), то векторы для таких слов, как «король» и «королева», покажут некоторое сходство в многомерном пространстве вложения.

Как используются в Keras?

keras.layers.Embedding имеет следующие конфигурации:

keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None) 

Превращает натуральные числа (индексы)в плотные векторы фиксированного размера.например.[[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]] Этот слой можно использовать только в качестве первого слоя в модели.

Когдаinput_dim - размер словаря + 1. Словарь - это совокупность всех слов, используемых в наборе данных.input_length - это длина входных последовательностей, тогда как output_dim - это размерность выходных векторов (размерности для вектора конкретного слова).

Слой также можно использовать с встроенные слова , такие как Word2Vec или GloVE.

Подходят ли они для моего варианта использования?

Абсолютно, да.Для анализа настроений, если бы мы могли сгенерировать контекст (встраивание) для конкретного слова, то мы могли бы определенно повысить его эффективность.

Как я могу использовать их в моем случае использования?

Выполните следующие действия:

  1. Вам необходимо поставить токены в предложениях.Может быть, с помощью keras.preprocessing.text.Tokenizer.
  2. добавьте последовательности к фиксированной длине, используя keras.preprocessing.sequence.pad_sequences.Это будет параметр input_length для слоя Embedding.
  3. Инициализируйте модель со слоем Embedding в качестве первого слоя.

Надеюсь, это поможет.

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