Необходимо понимать работу слоя «Встраивание» в библиотеке Keras. Я выполняю следующий код в Python
import numpy as np
from keras.models import Sequential
from keras.layers import Embedding
model = Sequential()
model.add(Embedding(5, 2, input_length=5))
input_array = np.random.randint(5, size=(1, 5))
model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)
который дает следующий вывод
input_array = [[4 1 3 3 3]]
output_array =
[[[ 0.03126476 0.00527241]
[-0.02369716 -0.02856163]
[ 0.0055749 0.01492429]
[ 0.0055749 0.01492429]
[ 0.0055749 0.01492429]]]
Я понимаю, что каждое значение в input_array отображается в 2 элемента вектора в output_array, поэтому вектор 1 X 4 дает 1 X 4 X 2 вектора. Но как рассчитываются сопоставленные значения?
text-mining
word-embeddings
keras
Prashanth
источник
источник
Ответы:
Фактически выходные векторы не вычисляются из входных данных с использованием какой-либо математической операции Вместо этого каждое входное целое число используется в качестве индекса для доступа к таблице, которая содержит все возможные векторы. По этой причине вам необходимо указать размер словаря в качестве первого аргумента (чтобы таблица могла быть инициализирована).
Наиболее распространенное применение этого слоя для обработки текста. Давайте посмотрим на простой пример. Наш тренировочный набор состоит только из двух фраз:
Надеюсь увидеть вас в ближайшее время
Рад видеть тебя снова
Таким образом, мы можем кодировать эти фразы, присваивая каждому слову уникальное целое число (например, по порядку появления в нашем учебном наборе данных). Тогда наши фразы можно переписать так:
Теперь представьте, что мы хотим обучить сеть, первый слой которой является внедряющим. В этом случае мы должны инициализировать его следующим образом:
Первый аргумент (7) - это количество отдельных слов в обучающем наборе. Второй аргумент (2) указывает размер векторов вложения. Input_length argumet, конечно, определяет размер каждой входной последовательности.
После того, как сеть обучена, мы можем получить веса слоя внедрения, который в этом случае будет иметь размер (7, 2) и может рассматриваться как таблица, используемая для отображения целых чисел в векторы внедрения:
Таким образом, согласно этим вложениям, наша вторая обучающая фраза будет представлена как:
Поначалу это может показаться нелогичным, но базовым механизмам автоматического дифференцирования (например, Tensorflow или Theano) удается оптимизировать эти векторы, связанные с каждым входным целым числом, точно так же, как и любой другой параметр вашей модели. Также интересно использовать вложения, изученные другими методами / людьми в разных доменах (см. Https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) как сделано в [1].
[1] Лопес-Санчес, Д., Эрреро, Дж. Р., Арриета, А.Г. и Корчадо, Дж.М. Прикладная разведка, 1-16.
источник
У меня также был тот же вопрос, и после прочтения нескольких постов и материалов, я думаю, я выяснил, какова роль слоя встраивания.
Я думаю, что этот пост также полезен для понимания, однако я действительно считаю, что ответ Даниэля удобен для восприятия. Но у меня также есть идея, лежащая в основе этого, в основном, путем понимания встраивания слов .
Я полагаю, что неточно сказать, что встраиваемые слои сокращают входные данные для горячего кодирования до меньшего количества входных данных. Ведь один горячий вектор - это одномерные данные, и он действительно превращается в 2 измерения в нашем случае. Лучше сказать, что
Будь то в 2-х измерениях или даже выше.
Я также обнаружил очень интересное сходство между встраиванием слов в анализ основных компонентов. Хотя название может показаться сложным, концепция проста. Что делает PCA, так это определяет набор данных на основе некоторых общих правил (так называемых основных компонентов). Так что это похоже на наличие данных, и вы хотите их описать, но используя только 2 компонента. Что в этом смысле очень похоже на вложение слов. Они оба выполняют одинаковую работу в разных контекстах. Вы можете узнать больше здесь . Я надеюсь, что понимание PCA поможет понять встраивание слоев по аналогии.
Чтобы подвести итог, ответ на оригинальный вопрос поста, который « как он вычисляет значение? » Будет:
источник