Использование слоя Embedding/Embedding в глубоком обучении

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

 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%. Мой вопрос - это то, как я могу использовать слой встраивания для своей проблемы. На самом деле, я мало что знаю о встраивание (почему, когда и как это работает) [я знаю только один горячий вектор, не несущий много информации]. Мне интересно, может ли встраивание повысить точность. Если кто-то может дать мне руководство в этом отношении, это будет очень полезно для меня. (По крайней мере, является ли использование встраивания логичным или нет для моего случая)

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
858
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

What are Embedding layers?

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

Why are they useful?

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

How are used in 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.

Are they suitable for my use case?

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

How can I use them in my use case?

Следуйте шагам:

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

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

Спасибо за этот полезный ответ!

user14185615 01.07.2021 16:31

Другие вопросы по теме