Фактически выходные векторы не вычисляются из входных данных с использованием какой-либо математической операции Вместо этого каждое входное целое число используется в качестве индекса для доступа к таблице, которая содержит все возможные векторы. По этой причине вам необходимо указать размер словаря в качестве первого аргумента (чтобы таблица могла быть инициализирована).
Наиболее распространенное применение этого слоя для обработки текста. Давайте посмотрим на простой пример. Наш тренировочный набор состоит только из двух фраз:
Надеюсь увидеть вас в ближайшее время
Рад видеть тебя снова
Таким образом, мы можем кодировать эти фразы, присваивая каждому слову уникальное целое число (например, по порядку появления в нашем учебном наборе данных). Тогда наши фразы можно переписать так:
[0, 1, 2, 3, 4]
[5, 1, 2, 3, 6]
Теперь представьте, что мы хотим обучить сеть, первый слой которой является внедряющим. В этом случае мы должны инициализировать его следующим образом:
Embedding(7, 2, input_length=5)
Первый аргумент (7) - это количество отдельных слов в обучающем наборе. Второй аргумент (2) указывает размер векторов вложения. Input_length argumet, конечно, определяет размер каждой входной последовательности.
После того, как сеть обучена, мы можем получить веса слоя внедрения, который в этом случае будет иметь размер (7, 2) и может рассматриваться как таблица, используемая для отображения целых чисел в векторы внедрения:
+------------+------------+
| index | Embedding |
+------------+------------+
| 0 | [1.2, 3.1] |
| 1 | [0.1, 4.2] |
| 2 | [1.0, 3.1] |
| 3 | [0.3, 2.1] |
| 4 | [2.2, 1.4] |
| 5 | [0.7, 1.7] |
| 6 | [4.1, 2.0] |
+------------+------------+
Таким образом, согласно этим вложениям, наша вторая обучающая фраза будет представлена как:
[[0.7, 1.7], [0.1, 4.2], [1.0, 3.1], [0.3, 2.1], [4.1, 2.0]]
Поначалу это может показаться нелогичным, но базовым механизмам автоматического дифференцирования (например, Tensorflow или Theano) удается оптимизировать эти векторы, связанные с каждым входным целым числом, точно так же, как и любой другой параметр вашей модели. Также интересно использовать вложения, изученные другими методами / людьми в разных доменах (см. Https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) как сделано в [1].
[1] Лопес-Санчес, Д., Эрреро, Дж. Р., Арриета, А.Г. и Корчадо, Дж.М. Прикладная разведка, 1-16.