python-将EM群集与doc2vec输入文件一起使用后,如何获得每个群集的热门词汇?

问题描述

我收集了300个文档。 我将doc2vec用作EM集群的输入文件。向量大小= 30 我使用WEKA进行聚类。结果在arff文件中。

样本:

id,v1,v2,v3,v4,v5,v6,v7,v8.....,v30,cluster

1,2,1.663037,-1.773337,-8.800881,1.97047,-0.780625,4.85496,-3.119555,1.741365,-2.2641,-2.748193,1.39931,-0.174281,-4.877526,-0.40956,9.486185,3.560057,-1.522864,2.737845,2.681551,5.065698,4.56268,-4.083866,2.201541,-0.238072,-2.4043,1.099682,1.626528,1.093984,2.694377,-2.866608,cluster2

2,3,-3.772286,-5.115312,-11.506609,1.920562,-0.989224,-4.508823,1.921191,2.002067,-0.593291,2.785795,5.848867,0.081726,-6.277032,0.37599,11.993948,11.18893,-2.237655,-1.269672,6.688845,6.66756,9.476783,-2.536132,-1.408344,2.012941,4.015103,-5.578879,9.856035,-3.341312,5.27576,-1.708805,cluster3

现在,从这些结果中,如何获得每个群集中的前10个字词?

解决方法

没有明确,通用,“正确”的方法来报告您隐隐要求的内容。 (确切地说,“排名前10位的术语”是什么意思?)但是,这里有一些可能有用的步骤,它们提供了一些可能有价值的术语来反映每个类。

Doc2Vec本身不了解集群。对于单个文档向量,其模型可能会被诱使对最容易预测的单词进行排名,但这不是通常的操作。您大概可以在集群中所有文档的所有文档向量上重复该操作,并以某种方式组合每个文档的结果以在所有文档中获得前10个字。但这可能不会给每个群集一个唯一的10个单词。

由于聚类本身仅在密集的文档向量上运行,因此不了解单词,因此不会直接建议相关的单词。

使用Gensim Python库训练的某些Doc2Vec模式也将同时训练单词向量,并将其训练到与文档向量相同的坐标空间中。这些模式是默认的PV-DM模式(dm=1),如果添加了可选的额外单词训练(dm=0,dbow_words=1),则是PV-DBOW模式。在这样的模型中,最接近文档向量的词向量可以特别地描述文档向量。因此,您可以考虑编译与群集中M个文档向量中的每一个最接近的前N个词,然后将在每个文档的前N个列表中出现最高的前N个词与文档最相关。集群。

您还可以将群集视为给定对象,完全忽略有助于创建群集的Doc2Vec模型,然后使用TFIDF术语加权等更基础的技术为每个群集选择一些最具代表性的术语

例如,对于每个文档中的每个术语,计算其TF / IDF值。然后,尝试每个群集计算这些值的不同方法。 (也许,对于术语T,在所有集群内文档中对T的TFIDF取平均值。或者为术语T添加所有TFIDF。或者,为每个群集合成一个合并的文档,包括该群集中所有文档的单词,然后计算TFIDF然后,查看每个群集中哪些术语的值最高。大致来说,这可能会给您排名前十名的排名。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...