我收集了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个术语"到底是什么意思?(但是,这里有一些可能有用的步骤,可以提供一些反映每个集群的看似有价值的术语。
CCD_ 1本身并不知道集群。对于单个doc向量,其模型可能会被诱骗对预测最多的单词进行排名,但这不是通常的操作。您可以在集群中所有文档的所有文档向量上重复这一点,并以某种方式组合每个文档的结果,以获得所有文档的前10个单词。但这可能不会给出每个聚类唯一的10个单词。
聚类本身,因为它只对密集的doc向量进行操作,所以不知道单词,所以不会直接建议相关的单词。
使用Gensim Python库训练Doc2Vec
的一些模式也会同时训练单词向量,并将其训练到与文档向量相同的坐标空间中。这些模式是默认的PV-DM模式(dm=1
(,如果添加了可选的额外单词训练(dm=0, dbow_words=1
(,则是PV-DBOW模式。在这样的模型中,最接近doc向量的词向量可以特别描述doc向量。因此,您可以考虑编译与集群中的M个文档向量中的每一个最接近的前N个单词,然后将在每个文档最多的前N列表中出现的最高前N个词视为与集群最相关。
您也可以将集群视为给定的,完全忽略帮助创建它们的Doc2Vec
建模,然后使用更基本的技术,如TFIDF术语加权,为每个集群选择一些最具代表性的术语。
例如,对于每个文档中的每个术语,计算其TF/IDF值。然后,尝试按集群计算这些值的不同方法。(也许,对于术语T,求所有集群内文档中T的TFIDF的平均值。或者,将术语T的所有TFIDF相加。或者,为每个集群合成一个单独的组合文档,包括该集群文档的所有单词,并为该伪文档中的每个术语计算TFIDF。(然后,查看每个集群中哪些术语的值最高。从粗略的意义上说,这可能会给你一个排名前十的术语。