Слой Embedding предназначен для преобразования дискретных категориальных данных, таких как слова или токены, в плотные векторные представления фиксированной размерности. Это особенно важно для задач обработки естественного языка, где каждое слово или символ необходимо представить численно для подачи на вход нейронной сети. В Keras.js слой Embedding реализует тот же принцип, что и в Keras на Python, с возможностью как предобученных весов, так и обучения с нуля.
Слой Embedding создается с помощью класса
Keras.layers.Embedding и принимает несколько ключевых
параметров:
inputDim — размер словаря (общее количество уникальных
токенов);outputDim — размерность векторного представления (число
признаков);inputLength — длина входной последовательности
(необязательный параметр);embeddingsInitializer — способ инициализации весов
(например, glorotUniform или
randomNormal);trainable — флаг, определяющий, можно ли обучать веса
слоя.Пример создания слоя Embedding с нуля:
const embeddingLayer = new Keras.layers.Embedding({
inputDim: 10000, // словарь из 10 000 слов
outputDim: 128, // векторная размерность 128
inputLength: 50, // последовательности длиной 50 токенов
embeddingsInitializer: 'randomUniform',
trainable: true
});
Инициализация весов
При обучении с нуля весовой тензор Embedding слоя создается случайным
образом. Размерность тензора определяется параметрами
inputDim и outputDim. Каждый токен словаря
получает уникальный вектор. На этапе обучения эти векторы постепенно
адаптируются к задаче, минимизируя функцию потерь сети.
Обработка входных последовательностей
Вход в слой Embedding представляет собой массив индексов слов (integer encoding). Например:
const inputSequence = [12, 45, 7, 102, 3];
const embeddedOutput = embeddingLayer.apply(inputSequence);
Результат embeddedOutput — тензор размерности
[sequenceLength, outputDim], где каждый индекс заменен
соответствующим вектором.
Обучение через градиенты
При прямом проходе слой Embedding просто извлекает векторы по
индексам. При обратном распространении ошибки вычисляются градиенты
относительно этих векторов, и веса обновляются с помощью выбранного
оптимизатора (например, adam или
sgd).
Embedding слой обычно используется как первый слой модели для обработки последовательностей:
const model = new Keras.models.Sequential();
model.add(embeddingLayer);
model.add(new Keras.layers.LSTM({ units: 64, returnSequences: false }));
model.add(new Keras.layers.Dense({ units: 1, activation: 'sigmoid' }));
model.compile({
optimizer: 'adam',
loss: 'binaryCrossentropy',
metrics: ['accuracy']
});
Здесь Embedding слой преобразует последовательность индексов в плотные векторы, LSTM обрабатывает последовательность, а Dense слой отвечает за финальный прогноз.
Обучение модели с Embedding слоем с нуля не требует внешних предобученных векторов:
const xTrain = [
[1, 5, 7, 9],
[2, 3, 4, 8]
];
const yTrain = [0, 1];
model.fit(xTrain, yTrain, {
epochs: 10,
batchSize: 2
}).then(history => {
console.log('Обучение завершено');
});
Важно контролировать следующие моменты:
true.padding) до одинаковой длины.Float32Array и
Int32Array для входных данных.Слой предоставляет стандартные методы Keras.js:
apply(input) — прямой проход, возвращает тензор
эмбеддингов;getWeights() — получение текущих весов слоя;setWeights(weights) — установка весов вручную;build(inputShape) — инициализация весов с учетом формы
входа.Использование этих методов позволяет гибко управлять обучением и интегрировать Embedding слой в сложные архитектуры.
adam, rmsprop).top-k частотных слов) для ускорения обучения и
экономии памяти.Слой Embedding в Keras.js обеспечивает мощный и гибкий инструмент для преобразования дискретных данных в плотные векторные представления, полностью совместимый с обучением с нуля, интеграцией в последовательные и функциональные модели, а также адаптацией к различным задачам NLP и последовательностям.