Слой Embedding является фундаментальным компонентом для работы с категориальными данными в нейронных сетях, особенно с текстовой информацией. Он преобразует дискретные целые индексы в плотные векторы фиксированной размерности, которые могут быть далее использованы в моделях глубокого обучения.
Слой Embedding реализует отображение вида:
[ ]
где каждый индекс представляет отдельное слово (или категорию), а вектор признаков является плотным, обучаемым представлением этого слова. Обучение векторов происходит совместно с обучением модели.
Преимущества использования Embedding:
В Keras.js слой Embedding создаётся аналогично Keras для Python, с основными параметрами:
const embeddingLayer = new KerasJS.layers.Embedding({
inputDim: 10000, // размер словаря
outputDim: 128, // размерность векторов
inputLength: 50 // длина входной последовательности
});
[batch_size, sequence_length].[batch_size, sequence_length, outputDim],
где каждый индекс заменяется на обучаемый вектор.Для обработки текстовых данных перед использованием Embedding необходимо:
inputLength.Пример подготовки входных данных:
// Словарь слов
const wordIndex = { 'привет': 1, 'мир': 2, 'машина': 3 };
// Последовательности
const sequences = [
[1, 2], // "привет мир"
[3, 1, 2] // "машина привет мир"
];
// Паддинг до длины 4
const paddedSequences = sequences.map(seq => {
while (seq.length < 4) seq.push(0);
return seq;
});
Keras.js позволяет загружать веса Embedding из предобученных моделей,
что ускоряет обучение и повышает качество распознавания семантики. Веса
должны быть представлены в формате .bin или
.json для Keras.js:
const embeddingLayer = new KerasJS.layers.Embedding({
inputDim: 10000,
outputDim: 128,
inputLength: 50,
weights: [pretrainedWeights], // массив весов
trainable: false // фиксируем веса при обучении
});
false позволяет
использовать слой только для извлечения признаков, что полезно при
работе с предобученными эмбеддингами.0 в последовательностях (важно при паддинге). В Keras.js
поддержка маскирования может требовать ручной обработки.const model = new KerasJS.models.Sequential();
model.add(new KerasJS.layers.Embedding({
inputDim: 5000,
outputDim: 128,
inputLength: 100
}));
model.add(new KerasJS.layers.LSTM({ units: 64 }));
model.add(new KerasJS.layers.Dense({ units: 1, activation: 'sigmoid' }));
model.add(new KerasJS.layers.Embedding({
inputDim: vocabSize,
outputDim: 256,
inputLength: seqLength
}));
model.add(new KerasJS.layers.GRU({ units: 512, returnSequences: true }));
model.add(new KerasJS.layers.TimeDistributed({
layer: new KerasJS.layers.Dense({ units: vocabSize, activation: 'softmax' })
}));
Слой Embedding обеспечивает мощный инструмент для работы с категориальными и текстовыми данными в браузере и Node.js. Его гибкость позволяет интегрировать предобученные векторы и строить глубокие последовательные модели без необходимости ручного кодирования сложных признаков.