Word2Vec Vocab приводит только к буквам и символам - PullRequest
0 голосов
/ 28 февраля 2019

Я новичок в Word2Vec и пытаюсь группировать слова по их сходству.Для начала я использую nltk для разделения предложений, а затем использую результирующий список предложений в качестве ввода в Word2Vec.Однако когда я печатаю вокаб, это просто набор букв, цифр и символов, а не слов.Чтобы быть конкретным, примером одной из букв является ", 'L':"

# imports needed and logging
import gensim
from gensim.models import word2vec
import logging

import nltk
#nltk.download('punkt')
#nltk.download('averaged_perceptron_tagger')
with open('C:\\Users\\Freddy\\Desktop\\Thesis\\Descriptions.txt','r') as f_open:
    text = f_open.read()
arr = []

sentences = nltk.sent_tokenize(text) # this gives a list of sentences

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s',level=logging.INFO)

model = word2vec.Word2Vec(sentences, size = 300)

print(model.wv.vocab)

1 Ответ

0 голосов
/ 28 февраля 2019

Как показывает учебник и документация для Word2Vec, для конструктора класса требуется список списков слов в качестве первого параметра (или итератор итераторов слов вобщее):

предложения (итерируемые итерируемые, необязательные) - итерируемые предложения могут быть просто списком токенов, но для больших корпусов ...

Я полагаю, что прежде чем вводить sentences в Word2Vec, необходимо использовать words_tokenize в каждом предложении, меняя критическую строку на:

sentences = [nltk.word_tokenize(sent) for sent in nltk.sent_tokenize(text)]

TL; DR

Вы получаете буквы как свои "слова", потому что Word2Vec рассматривает строки, соответствующие предложениям, как итерации, содержащие слова.Перебор строк приводит к последовательности букв.Эти буквы используются в качестве основы для обучения модели (вместо намеченных слов).

Как гласит древняя поговорка: мусор - мусор .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...