Doc2Vec Кластеризация с помощью kmeans для нового документа - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть корпус, обученный с Doc2Vec следующим образом:

d2vmodel = Doc2Vec(vector_size=100, min_count=5, epochs=10)
d2vmodel.build_vocab(train_corpus)
d2vmodel.train(train_corpus, total_examples=d2vmodel.corpus_count, epochs=d2vmodel.epochs)

Используя векторы, документы объединяются в группы с kmeans:

kmeans_model = KMeans(n_clusters=NUM_CLUSTERS, init='k-means++', random_state = 42)  
X = kmeans_model.fit(d2vmodel.docvecs.vectors_docs)
labels=kmeans_model.labels_.tolist()

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

from numpy import array
testdocument = gensim.utils.simple_preprocess('Microsoft excel')
cluster_label = kmeans_model.predict(array(testdocument))

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Ваш kmeans_model ожидает вектор признаков, аналогичный тому, который был предоставлен во время первоначальной кластеризации, а не токены списка строк, которые вы получите от gensim.simple_preprocess().

Фактически, вы хотите использовать модель Doc2Vec, чтобы взять такие списки токенов и превратить их в совместимые с моделью векторы с помощью метода infer_vector().Например:

testdoc_words = gensim.utils.simple_preprocess('Microsoft excel')
testdoc_vector = d2vmodel.infer_vector(testdoc_words)
cluster_label = kmeans_model.predict(array(testdoc_vector))

Обратите внимание, что как Doc2Vec, так и логический вывод лучше работают с документами длиной не менее десятков слов (а не крошечными 2-словосочетаниями, такими как ваш тест здесь), и этот вывод можеттакже часто полезно использовать необязательный параметр epochs больше, чем по умолчанию (особенно для коротких документов).

Обратите внимание, что ваш тестовый документ должен быть действительно предварительно обработан и токенизирован точно так же, как ваши данные обучения - поэтому, если для подготовки train_corpus использовался какой-то другой процесс, используйте тот же процесс для документов после обучения.(Слова, не распознаваемые моделью Doc2Vec, поскольку они не присутствовали во время обучения, будут игнорироваться, поэтому ошибка, такая как выполнение другого стиля выравнивания регистра во время вывода, значительно ослабит результаты.)

0 голосов
/ 07 декабря 2018

Прежде чем вы сможете сравнить его с кластерами KMeans, сначала нужно вектор doc2vec.

array и simple_preproces не делайте этого.

...