В вашем случае вы должны различаться между различными структурами. Я могу говорить за PyTorch , который является моей платформой goto при программировании нейронной сети.
Там горячее кодирование последовательностей обычно выполняется так, что ваша сеть будет ожидать последовательность индексов . Если взять в качестве примера 10 букв, это может быть последовательность ["a", "b", "c" , ...]
Слой встраивания будет инициализирован с «длиной словаря», т. Е. Количеством различных элементов (num_embeddings
), которые ваша сеть может получить - в вашем случае 26. Кроме того, вы можете указать embedding_dim
, т.е. выходное измерение один символ . Это уже прошло этап «горячих кодировок», поскольку вам, как правило, нужно, чтобы они знали, какое значение связать с этим элементом.
Затем вы должны передать кодированную версию приведенной выше строки в слой, который может выглядеть следующим образом: [0,1,2,3, ...]
. Предполагая, что последовательность имеет длину 10, он будет выдавать [10,embedding_dim]
, то есть двумерный тензор.
Подводя итог, PyTorch, по сути, позволяет вам пропустить этот довольно утомительный этап его кодирования как одноразового кодирования. Это в основном связано с тем, что ваш словарный запас в некоторых случаях может быть довольно большим: рассмотрим, например, системы машинного перевода, в которых в вашем словаре может быть более 10 000 слов. Вместо того, чтобы хранить каждое отдельное слово как 10 000-мерный вектор, удобнее использовать один индекс.
Если это не должно полностью ответить на ваш вопрос (поскольку я, по сути, говорю вам, как это обычно предпочитается): вместо создания 260-мерного вектора вы бы снова использовали [10,26]
Тензор, в котором каждая строка представляет другое письмо.