Как показывает учебник и документация для Word2Vec
, для конструктора класса требуется список списков слов в качестве первого параметра (или итератор итераторов слов вобщее):
предложения (итерируемые итерируемые, необязательные) - итерируемые предложения могут быть просто списком токенов, но для больших корпусов ...
Я полагаю, что прежде чем вводить sentences
в Word2Vec
, необходимо использовать words_tokenize
в каждом предложении, меняя критическую строку на:
sentences = [nltk.word_tokenize(sent) for sent in nltk.sent_tokenize(text)]
TL; DR
Вы получаете буквы как свои "слова", потому что Word2Vec
рассматривает строки, соответствующие предложениям, как итерации, содержащие слова.Перебор строк приводит к последовательности букв.Эти буквы используются в качестве основы для обучения модели (вместо намеченных слов).
Как гласит древняя поговорка: мусор - мусор .