Doc2Vec 使用 kmeans 对新文档进行聚类
Doc2Vec Clustering with kmeans for a new document
我有一个使用 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-means 对一个新文档进行聚类,并知道它属于哪个聚类。我尝试了以下方法,但我认为 predict 的输入不正确。
from numpy import array
testdocument = gensim.utils.simple_preprocess('Microsoft excel')
cluster_label = kmeans_model.predict(array(testdocument))
感谢任何帮助!
您的 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
,请对 post 使用相同的过程-培训文件。 (Doc2Vec
模型无法识别的词,因为它们在训练期间不存在,将被默默地忽略——因此在推理时进行不同风格的案例扁平化等错误会大大削弱结果。)
我有一个使用 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-means 对一个新文档进行聚类,并知道它属于哪个聚类。我尝试了以下方法,但我认为 predict 的输入不正确。
from numpy import array
testdocument = gensim.utils.simple_preprocess('Microsoft excel')
cluster_label = kmeans_model.predict(array(testdocument))
感谢任何帮助!
您的 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
,请对 post 使用相同的过程-培训文件。 (Doc2Vec
模型无法识别的词,因为它们在训练期间不存在,将被默默地忽略——因此在推理时进行不同风格的案例扁平化等错误会大大削弱结果。)