2015-08-17 3 views
1

Я пытаюсь использовать Doc2Vec для чтения в файл, который представляет собой список предложений, как это:Использование Doc2Vec gensim для получения приговор векторов

The elephant flaps its large ears to cool the blood in them and its body. 

A house is a permanent building or structure for people or families to live in. 

... 

То, что я хочу сделать, это два файла, один с уникальные слова из этих предложений и другие, которые имеют один соответствующий вектор на строку (если нет векторного вывода, я хочу вывести вектор из 0)

Я получаю вокальный код с моим кодом, но я не могу показаться выяснить, как распечатать отдельные векторы предложения. Я просмотрел документацию и не нашел большой помощи. Вот как выглядит мой код до сих пор.

sentences = [] 
for uid, line in enumerate(open(filename)): 
    sentences.append(LabeledSentence(words=line.split(), labels=['SENT_%s' %  uid])) 

model = Doc2Vec(alpha=0.025, min_alpha=0.025) 
model.build_vocab(sentences) 
for epoch in range(10): 
    model.train(sentences) 
    model.alpha -= 0.002 
    model.min_alpha = model.alpha 
sent_reg = r'[SENT].*' 
for item in model.vocab.keys(): 
    sent = re.search(sent_reg, item) 
    if sent: 
     continue 
    else: 
     print item 

###I'm not sure how to produce the vectors from here and this doesn't work## 
sent_id = 0 
for item in model: 
    print model["SENT_"+str(sent_id)] 
    sent_id += 1 
+0

вы пробовали настройки min_count = 1? Doc2Vec (min_count = 1) – slizb

ответ

2

С последним gensim (0.12.1), вы можете попробовать:

печати model.docvecs [ "SENT _" + ул (sent_id)] ​​

+0

Да, векторы-документы теперь находятся в подэлементе 'model.docvecs'. – gojomo

+0

@gojomo @Nicholas почему это 'model.docvecs' не обязательно имеет такое же количество строк, сколько у меня число предложений? –

+0

Размер 'docvecs' будет числом уникальных доктринов, которые были видны во время первоначального сканирования примеров, с дополнительным предупреждением о том, что если вы используете plain-int как doctags, он будет выделять пространство для всех ints до самого большого. Поэтому, если вы предоставите 10 примеров, но повторяется только 2 уникальных символа строки, в 'docvecs.doctag_syn0' будет всего 2 строки. Если вы укажете только 1 пример, но с int doctag '10', будет 11 строк (для ints 0-10). (В базовом случае каждого предложения, получающего свой собственный идентификатор int с 0, строки 'docvecs' будут точно соответствовать количеству приведенных примеров.) – gojomo

Смежные вопросы