Как обучается слой внедрения в слое Keras Embedding? (скажем, используя тензор потока бэкэнда, то есть он похож на word2vec, glove или fasttext)
Предположим, мы не используем предварительно обученное вложение.
Как обучается слой внедрения в слое Keras Embedding? (скажем, используя тензор потока бэкэнда, то есть он похож на word2vec, glove или fasttext)
Предположим, мы не используем предварительно обученное вложение.
Ответы:
Встраивание слоев в Keras обучается так же, как и любой другой уровень в вашей сетевой архитектуре: они настроены так, чтобы минимизировать функцию потерь с помощью выбранного метода оптимизации. Основное отличие от других слоев заключается в том, что их выходные данные не являются математической функцией входных данных. Вместо этого ввод в слой используется для индексации таблицы с векторами внедрения [1]. Однако базовый механизм автоматического дифференцирования не имеет проблем с оптимизацией этих векторов для минимизации функции потерь ...
Таким образом, вы не можете сказать, что слой Embedding в Keras делает то же самое, что и word2vec [2]. Помните, что word2vec относится к очень специфической настройке сети, которая пытается изучить вложение, которое фиксирует семантику слов. Со слоем встраивания Keras вы просто пытаетесь минимизировать функцию потерь, поэтому, если, например, вы работаете с проблемой классификации настроений, выученное встраивание, вероятно, не будет отражать полную семантику слов, а только их эмоциональную полярность ...
Например, следующее изображение, взятое из [3], показывает вложение трех предложений со слоем Keras Embedding, обученным с нуля, как часть контролируемой сети, предназначенной для обнаружения заголовков кликбейтов (слева) и предварительно обученных вложений word2vec (справа). Как видите, вложения word2vec отражают семантическое сходство фраз b) и c). И наоборот, вложения, генерируемые слоем Embedded Keras, могут быть полезны для классификации, но не отражают семантическое сходство b) и c).
Это объясняет, почему, когда у вас ограниченное количество обучающих сэмплов, было бы неплохо инициализировать слой Embedding с весами word2vec , поэтому, по крайней мере, ваша модель распознает, что «Альпы» и «Гималаи» являются похожими вещами, даже если они не не встречаются в предложениях вашего учебного набора данных.
[1] Как работает слой «Встраивание» Keras?
[2] https://www.tensorflow.org/tutorials/word2vec
[3] https://link.springer.com/article/10.1007/s10489-017-1109-7
ПРИМЕЧАНИЕ. На самом деле изображение показывает активацию слоя после слоя Embedding, но для целей этого примера это не имеет значения ... Подробнее см. В [3].
Слой вложения - это просто проекция из дискретного и разреженного 1-горячего вектора в непрерывное и плотное скрытое пространство. Это матрица (n, m), где n - размер вашего словаря, а n - желаемые размеры скрытого пространства. Только на практике нет необходимости выполнять матричное умножение, и вместо этого вы можете сэкономить на вычислениях, используя индекс. Таким образом, на практике это слой, который отображает натуральные числа (индексы, соответствующие словам) в плотные векторы фиксированного размера (векторы вложения).
Вы можете обучить его созданию встраивания Word2Vec с помощью Skip-Gram или CBOW. Или вы можете обучить его конкретной проблеме, чтобы получить вложение, подходящее для вашей конкретной задачи. Вы также можете загрузить предварительно обученные вложения (такие как Word2Vec, GloVe и т. Д.), А затем продолжить обучение по вашей конкретной проблеме (форма трансферного обучения).