Для задачи обработки естественного языка (NLP) часто используют векторы word2vec в качестве вложения для слов. Тем не менее, может быть много неизвестных слов, которые не перехвачены векторами word2vec просто потому, что эти слова не видны достаточно часто в обучающих данных (многие реализации используют минимальное количество перед добавлением слова в словарь). Это может особенно иметь место с текстом, например, из Twitter, где слова часто пишутся с ошибками.
Как следует обрабатывать такие неизвестные слова при моделировании задачи NLP, такой как прогнозирование настроений, с использованием долгосрочной сети (LSTM)? Я вижу два варианта:
- Добавление токена «неизвестное слово» в словарь word2vec.
- Удаление этих неизвестных слов так, что LSTM даже не знает, что слово было в предложении.
Каков предпочтительный способ обработки этих слов?
Ответы:
Вариант 1 (добавление неизвестного токена слова) - это то, как большинство людей решают эту проблему.
Вариант 2 (удаление неизвестных слов) - плохая идея, потому что он преобразует предложение таким образом, который не согласуется с тем, как LSTM был обучен.
Другой вариант, который был недавно разработан, заключается в создании на лету встраивания слова для каждого слова с использованием сверточной нейронной сети или отдельного LSTM, который обрабатывает символы каждого слова по одному. Используя эту технику, ваша модель никогда не встретит слова, для которого она не может создать вложение.
источник
Отображение редких слов просто означает, что мы удаляем эти слова и заменяем их токеном в данных обучения. Таким образом, наша модель не знает ни одного редкого слова. Это грубая форма сглаживания, потому что модель предполагает, что токен никогда не появится в реальных данных или, что еще лучше, хотя она игнорирует эти n-граммы в целом.
источник