Как выглядит слой внедрения для сети? - PullRequest
0 голосов
/ 13 декабря 2018

Я только начинаю с классификации текста, и я застрял в слое внедрения.Если у меня есть серия последовательностей, закодированных как целое число, соответствующее каждому слову, как выглядит слой внедрения?Есть ли нейроны, как нормальный нейронный слой?

Я видел keras.layers.Embedding, но после поиска документа я действительно запутался, как он работает.Я могу понять input_dim, но почему output_dim является 2D матрицей?Сколько весов у меня в этом слое встраивания?

Извините, если мой вопрос не объяснен четко, у меня нет опыта в NLP, если эта проблема с встраиванием слов является распространенной в NLP, пожалуйста,скажи мне, и я проверю это.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Уровень внедрения - это просто обучаемая справочная таблица: он принимает в качестве входных данных целочисленный индекс и возвращает в качестве выходных данных вложение слова, связанное с этим индексом:

index |                            word embeddings
=============================================================================
  0   |  word embedding for the word with index 0 (usually used for padding)
-----------------------------------------------------------------------------
  1   |  word embedding for the word with index 1
-----------------------------------------------------------------------------
  2   |  word embedding for the word with index 2
-----------------------------------------------------------------------------
  .   |
  .   |
  .   |
-----------------------------------------------------------------------------
  N   |  word embedding for the word with index N
-----------------------------------------------------------------------------

В этом смысле он является обучаемымзначения не обязательно фиксированы и могут быть изменены во время обучения.Аргумент input_dim на самом деле является количеством слов (или, в более общем смысле, количеством различных элементов в последовательностях).Аргумент output_dim указывает размерность каждого встраиваемого слова.Например, в случае использования output_dim=100 каждое вложение слова будет вектором размера 100. Кроме того, поскольку входной слой для встраивания представляет собой последовательность целых чисел (соответствующую словам в предложении), следовательно, его вывод будет иметь форму(num_sequences, len_sequence, output_dim), то есть для каждого целого числа в последовательности возвращается вектор внедрения размером output_dim.

Что касается количества весов в слое внедрения, то его очень легко вычислить: есть input_dim уникальные индексы, и каждый индекс связан с вложением слова размером output_dim.Следовательно, число весов в слое вложения равно input_dim x ouput_dim.

0 голосов
/ 13 декабря 2018

Подумайте о списке, из которого вы получаете объекты.

Вы делаете object = myList[index]

Слой внедрения похож на этот список.Но «объект» - это вектор обучаемых значений.

Итак, ваша последовательность содержит индексы для получения векторов от вложения.

Слово 1 в последовательности говорит: дайте мне вектор для слова 1
Слово 2 говорит: дайте мне вектор дляслово 2 и т. д.

На практике веса будут двухмерной матрицей.Вы получаете строки из этого на основе индексов слова, переданных в последовательности.

Последовательность, подобная [wordIndex1, wordIndex2, wordIndex3], станет [wordVector1, wordVector2, wordVector3].

...