Недостающие слова при обучении модели word2vec - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь обучить модель word2vec, используя gensim.Это строка, которую я использую:

model = Word2Vec(training_texts, size=50, window=5, min_count=1, workers=4, max_vocab_size=20000)

Где training_texts - это список списков строк, представляющих слова.Корпус, который я использую, содержит 8924372 предложений с 141 985 244 словами и 1 531 477 уникальными словами.После обучения в модели присутствует только 15642 слова:

len(list(model.wv.vocab))
# returns 15642

Разве в модели не должно быть 20000 слов, как указано max_vocab_size?Почему он пропускает большинство обучающих слов?

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Слова, которые появляются в модели, в порядке, и они представляют некоторые обычные отношения (король - мальчик + девочка = королева. Но я определил слова, которые появляются в корпусе несколько раз, но отсутствуют в модели. I не думаю, что мне есть что посмотреть, как я передаю данные, но с каким-то параметром мне не хватает.

0 голосов
/ 22 января 2019

Вы можете посмотреть на уникальные слова, которые он обнаружил через model.wv.vocab.keys() или model.wv.vocab.index2entity.

Это те слова, которые вы ожидали? Можете ли вы перечислить слово, которое, как вы уверены, вы указали в training_texts, которого там нет?

Обратите внимание, что training_texts должна быть последовательностью списков строковых токенов. Если вы предоставляете только последовательность строк, она будет видеть каждую строку символ как слово и моделировать только эти односимвольные «слова». (Для текстов, использующих языки латинского алфавита, это обычно означает всего несколько десятков «слов», но если в ваших текстах есть символы других языков, я полагаю, вы могли бы подсчитать 15642 уникальных односимвольных слова.)

...