Я изучаю методы глубокого обучения, особенно 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%. Мой вопрос - это то, как я могу использовать слой встраивания для своей проблемы. На самом деле, я мало что знаю о встраивание (почему, когда и как это работает) [я знаю только один горячий вектор, не несущий много информации]. Мне интересно, может ли встраивание повысить точность. Если кто-то может дать мне руководство в этом отношении, это будет очень полезно для меня. (По крайней мере, является ли использование встраивания логичным или нет для моего случая)
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?
Следуйте шагам:
keras.preprocessing.text.Tokenizer
.keras.preprocessing.sequence.pad_sequences
. Это будет параметр input_length
для слоя Embedding.Надеюсь это поможет.
Спасибо за этот полезный ответ!