Короче
Концептуально, keras::layer_embedding()
принимает двумерную матрицу [samples, word_sequences]
, где значения являются целочисленными идентификаторами слова (словесный индекс), и заменяет указанное значение их вектором слов, чтобы оно стало трехмерной матрицей [samples, word_sequences, embeddings]
- другими словами, где значения - это векторы слов, а не идентификаторы слов. Склеенные векторы слов могут приходить откуда-то еще, как в вашем примере выше, или они могут быть случайным образом инициализированы и обновлены во время подготовка.
Меньше коротких
Вы передаете keras::layer_embedding()
последовательности слов. train_x
- это двумерная матрица, где строки - это образцы (документы), а столбцы - последовательности слов. Значения в train_x
представляют собой целочисленные идентификаторы (индекс слов) для каждого слова, соответствующие их позиции в вашем отдельно сохраненном списке слов (словарь). Мы можем стилизовать train_x
как:
![enter image description here](https://i.stack.imgur.com/5TRZ8.png)
Здесь значение 75 соответствует слову в 75-й позиции вашего словаря.
embedding_matrix
, который вы передаете keras::set_weights()
, - это двумерная матрица, в которой строки соответствуют словарному запасу. Например, значения в 75-й строке embedding_matrix
- это векторы слов для слова в 75-й позиции вашего словаря.
Так что, если вы приклеиваете к предварительно обученным встраиваниям, как в приведенном выше примере, тогда keras::layer_embedding()
просто заменяет индекс слова на векторы слов в этой строке embedding_matrix
. Мы можем стилизовать операцию как
for (x in 1:nrow(train_x)) {
for (y in 1:ncol(train_x)) {
train_x[x, y] <- embedding_matrix[train_x[x, y], ]
}
}
Поэтому мы заканчиваем трехмерной матрицей (кубом), которую мы можем стилизовать как:
![enter image description here](https://i.stack.imgur.com/WYdhC.png)