Я не думаю, что для этого есть какая-то особая причина / необходимость, и, честно говоря, я сам не видел так много случаев, когда это так (например, использование LSTM
скрытых единиц == Embedding
размера). Единственный эффект, который это имеет, - это наличие единственной ячейки памяти для каждого элемента вектора встраивания (что я не считаю требованием или необходимостью).
Сказав это, я подумал, что мог бы упомянуть кое-что дополнительное. То есть есть причина для наличия слоя Embedding
в этой настройке. На самом деле очень веская причина (ы). Давайте рассмотрим два варианта:
- Использование одного горячего кодирования для представления слова
- Использование
Embeddings
для представления слов
Вариант 2 имеет несколько преимуществ по сравнению с Вариант 1.
- Размерность входов намного меньше, когда вы используете слой встраивания (например, 300 вместо 50000)
- Вы обеспечиваете гибкость к модели, чтобы узнать представление слова, которое в действительности подходит для решения вашей задачи. Другими словами, вы не ограничиваете представление слов, чтобы оно оставалось постоянным в процессе обучения.
- Если вы используете слой подготовки слов с предварительной подготовкой для инициализации слоя
Embedding
, еще лучше. Вы вносите семантику слов в задачу, которую решаете. Это всегда помогает лучше решить задачу. Это аналогично тому, чтобы попросить малыша, который не понимает значения слов, сделать что-то, связанное с текстом (например, слова в правильном грамматическом порядке), и попросить 3-летнего ребенка выполнить ту же задачу. Они оба могут в конечном итоге сделать это. Но каждый сделает это быстрее и лучше.