Какое предпочтительное соотношение между размером словаря и размером вложения?
При использовании, например, gensim, word2vec или аналогичного метода для обучения ваших векторов встраивания, мне было интересно, каково хорошее соотношение или есть предпочтительное соотношение между размером встраивания и размером словаря? Кроме того, как это меняется с появлением большего количества данных?
Поскольку я все еще в теме, как выбрать хороший размер окна при обучении ваших векторов встраивания?
Я спрашиваю об этом, потому что я не тренирую свою сеть с помощью реального языкового словаря, а скорее предложения будут описывать отношения между процессами и файлами и другими процессами и так далее. Например, предложение в моем текстовом корпусе будет выглядеть так:
smss.exe irp_mj_create systemdrive windows system32 ntdll dll DesiredAccess: Выполнить / Переместить, Синхронизировать, Расположение: Открыть, Параметры:, Атрибуты: н / д, ShareMode: Читать, Размер размещения: н / д, OpenResult: Открыт "
Как вы можете себе представить, вариации многочисленны, но все еще остается вопрос, как я могу отрегулировать эти гиперпараметры наилучшим образом, чтобы пространство встраивания не перегружалось, но также имело достаточно значимых особенностей для каждого слова.
Спасибо,
Габриель
1 ответ
Соотношение не то, к чему вы стремитесь
Я не помню каких-либо конкретных работ по этой проблеме, но вопрос кажется немного странным - в общем, если бы у меня была отличная модель, но я хотел бы переключиться на словарный запас, который в два или десять раз больше, я бы не изменился размеры вложения.
ИМХО они довольно ортогональные, несвязанные параметры. Ключевые факторы для выбора оптимального измерения встраивания в основном связаны с доступностью вычислительных ресурсов (чем меньше, тем лучше, поэтому, если нет различий в результатах, и вы можете вдвое уменьшить размеры, сделайте это), задачи и (что наиболее важно) количество контролируемые обучающие примеры - выбор размеров встраивания будет определять, насколько сильно вы будете сжимать / намеренно ограничивать лексическую информацию; большая размерность позволит вашей модели различать больше лексических деталей, что хорошо, если и только если ваши контролируемые данные имеют достаточно информации для правильного использования этой лексической детали, но если ее там нет, то дополнительная лексическая информация переопределится, а меньшая размерность внедрения будет обобщать лучше. Таким образом, соотношение между размером словаря и размером вложения не является (ИМХО, я не могу предоставить доказательства, это просто практический опыт) чем-то, на что нужно смотреть, так как лучший размер для вложения измеряется тем, где вы используете вложения, а не данные, на которых вы обучаете вложения.
В любом случае, это похоже на ситуацию, в которой ваш пробег будет отличаться - любая теория и обсуждение будут интересны, но ваша задача и текстовая область весьма специфичны, выводы общего НЛП могут относиться или не относиться к вашему случаю, и это будет Лучше всего получить эмпирические доказательства того, что работает на ваших данных. Обучайте вложения с размерами 64/128/256 или 100/200/400 или любого другого размера, моделируйте поезда, используя каждый из них, и сравнивайте эффекты; это потребует меньше усилий (людей, а не графических процессоров), чем думать о том, какими должны быть последствия.
Это сообщение в блоге разработчиков Google гласит:
Итак, следующая "формула" дает общее правило о количестве встраиваемых измерений:
embedding_dimensions = number_of_categories**0.25
Таким образом, размерность вектора вложения должна быть четвертым корнем числа категорий.
Интересно, что в статье Word2vec Wikipedia говорится (выделено мое):
Тем не менее, для моделей с пропуском грамм, обученных в корпусах среднего размера, с 50 размерами, размер окна 15 и 10 отрицательных выборок представляется хорошим параметром.
Предполагая, что стандартный словарь размером в 1,5 миллиона слов, это практическое правило удивительно близко:
50 == 1,5e6 ** 0,2751