Как использовать doc2vec с фразами?

я хочу иметь фразы в doc2vec, и я использую gensim.phrases. в doc2vec нам нужен помеченный документ для обучения модели, и я не могу пометить фразы. как я могу это сделать?

вот мой код

text = phrases.Phrases(text)
for i in range(len(text)):
    string1 = "SENT_" + str(i)

    sentence = doc2vec.LabeledSentence(tags=string1, words=text[i])
    text[i]=sentence

print "Training model..."
model = Doc2Vec(text, workers=num_workers, \
            size=num_features, min_count = min_word_count, \
            window = context, sample = downsampling)

person Majid    schedule 16.08.2016    source источник


Ответы (1)


Вызов Phrases() тренирует модель создания фраз. Позже вы используете эту модель для текста, чтобы получить текст, объединенный фразами.

Не заменяйте исходный text обученной моделью, как в первой строке вашего кода. Кроме того, не пытайтесь присваивать модели Phrases, как это происходит в вашем текущем цикле, или обращаться к модели Phrases с помощью целых чисел.

В документах gensim для класса Phrases есть примеры правильного использования класса Phrases; если вы будете следовать этому образцу, у вас все получится.

Кроме того, обратите внимание, что LabeledSentence заменено на TaggedDocument, а его аргумент tags должен быть списком тегов. Если вы укажете строку, она увидит это как список односимвольных тегов (вместо одного тега, который вы намереваетесь).

person gojomo    schedule 16.08.2016
comment
спасибо за ваш ответ. в этом случае использование LabeledSentence вместо TaggedDocument не имеет значения. моя проблема в том, где и как использовать фразы с doc2vec? - person Majid; 17.08.2016
comment
Нет ничего особенного в использовании фраз с Doc2Vec; это просто шаг предварительной обработки, чтобы преобразовать некоторые пары слов в объединенные word_pairs. Поэтому я рекомендую вам игнорировать аспект Doc2Vec, избегать конкретных ошибок, которые я указал в вашем существующем коде, и соответствовать тому, как это делается в примерах в документации gensim. - person gojomo; 17.08.2016
comment
Я решаю указанную вами ошибку, но основная проблема заключается в том, что вывод LabeledSententces не работает с вводом Phrases. поэтому я не могу построить фразу с LabeledSentenses. обратный этому процессу тоже не может быть выполнен, потому что LabeledSentences не может тегировать фразы ! - person Majid; 17.08.2016
comment
Верно, вы должны создавать экземпляры TaggedDocument, используя выходные данные модели Phrases, а не наоборот. Заставьте часть Phrases работать, следуя примеру в документации gensim. Только после того, как вы подтвердите, что все работает должным образом, возьмите полученные списки токенов и используйте их как words из TaggedDocument экземпляров. - person gojomo; 17.08.2016