Как правило, вы хотите использовать только отрицательную выборку или иерархическую софтмакс, а не обе.
По умолчанию используется отрицательная выборка, эквивалентная, если вы явно указали 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
обрез, чтобы отбрасывать более редкие слова.