Gensim Word2Vec «Вы должны сначала создать словарный запас перед тренировкой модели» - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь соответствовать модели Word2Vec.Согласно документации для Word2Vec от Gensim нам не нужно вызывать model.build_vocabulary перед его использованием.Но все же он просит меня сделать это.Я попытался вызвать эту функцию, и она не сработала.Я также установил модель Word2Vec раньше, не вызывая model.build_vocabulary.

Я что-то не так делаю?Вот мой код:

from gensim.models import Word2Vec
dataset = pd.read_table('genemap_copy.txt',delimiter='\t', lineterminator='\n')

def row_to_sentences(dataframe):
    columns = dataframe.columns.values
    corpus = []
    for index,row in dataframe.iterrows():
        if index == 1000:
            break
        sentence = ''
        for column in columns:
            sentence += ' '+str(row[column])
        corpus.append([sentence])
    return corpus

corpus = row_to_sentences(dataset)
clean_corpus = [[sentence[0].lower()] for sentence in corpus ]


# model = Word2Vec()
# model.build_vocab(clean_corpus)
model = Word2Vec(clean_corpus, size=100, window=5, min_count=5, workers=4)

Помощь с благодарностью!Также я использую macOS Sierra.В Интернете не так много поддержки для использования Gensim с Mac D:.

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Мне кажется, у меня проблема с параметром min_count=5, поэтому большинство моих слов не учитывалось, если они появлялись не более 5 раз.

0 голосов
/ 08 июня 2018

Это то, что вы каждый раз добавляете новый список, содержащий одно предложение?corpus.append([sentence]).Вам нужно подать Word2Vec серию предложений, но не обязательно предложения, собранные документом.Мне также не ясно, что находится в вашем df, но вы уже разбили предложения на токены?

Мой класс генератора, который я использовал ранее для Word2Vec ...

from nltk.tokenize import sent_tokenize
from gensim.utils import simple_preprocess

class MySentences(object):
    def __init__(self, docs):
        self.corpus = docs
    def __iter__(self):
        for doc in self.corpus:
            doc_sentences = sent_tokenize(doc)
            for sent in doc_sentences:
                yield simple_preprocess(sent) # yields a tokenized 

sentence ['like','this','one','.']

sentences = MySentences(df['text'].tolist())
model = gensim.models.Word2Vec(sentences, min_count=5, workers=8, size=300, sg=1)
0 голосов
/ 08 июня 2018

Попробуйте с LineSentence:

from gensim.models.word2vec import LineSentence

, а затем тренируйте свой корпус с

model = Word2Vec(LineSentence(clean_corpus), size=100, window=5, min_count=5, workers=4)
...