Ошибка памяти при обучении word2vec: иерархический softmax - PullRequest
0 голосов
/ 17 мая 2019

Я обучаю встраиванию слов с помощью word2vec, и с некоторыми конфигурациями параметров я всегда получаю ошибку памяти. Я делаю это для всей английской Википедии и использую PathLineSentence для ввода (более 11 ГБ). Я на самом деле не знаю, какая настройка параметров является неправильной, но я вижу тенденцию: когда hierachical softmax установлен в 1, я получаю ошибку - так, каково значение по умолчанию hs - 0 или 1? Можно ли сделать hs и отрицательную выборку?

Было бы здорово, если бы вы помогли мне с моими Вопросами и что я могу сделать для решения моих проблем.

1 Ответ

0 голосов
/ 18 мая 2019

Как правило, вы хотите использовать только отрицательную выборку или иерархическую софтмакс, а не обе.

По умолчанию используется отрицательная выборка, эквивалентная, если вы явно указали negative=5, hs=0. Если вы включите иерархический софтмакс, вам следует отключить отрицательную выборку, например: hs=1, negative=0.

Если вы получаете ошибку памяти, наиболее распространенные причины (если у вас есть достаточный объем ОЗУ):

  • пытается загрузить в память целый, более чем практический корпус. Однако, если вы используете хороший корпусный итератор, такой как PathLineSentence, он будет правильно считывать данные только из файлов

  • пытается создать модель, которая слишком велика - наибольшим фактором, влияющим на размер модели, является размер известного словаря и выбранный размер вектора. Если я правильно помню, для чего-то вроде Википедии вы можете установить min_count=100 и все равно получить словарь около 1 миллиона слов. С 300-мерными векторами для этого потребовалось бы (1 миллион * 300 измерений * 4 байта на измерение =) 1,2 ГБ только для векторов слов, и примерно столько же для внутренних весов модели, а затем несколько меньших величин памяти для других структур.

Итак, чтобы решить проблемы с памятью, подумайте: (1) получить больше оперативной памяти; (2) убедиться, что корпус только течет; (3) уменьшить размер вектора; (4) уменьшить обучаемую лексику, чаще всего, используя больший min_count обрез, чтобы отбрасывать более редкие слова.

...