我正在使用Gensim进行矢量空间模型。在从Gensim创建字典和语料库后,我使用以下行计算了(Term frequency * Inverse document Frequency)TFIDF
Term_IDF = TfidfModel(corpus)
corpus_tfidf = Term_IDF[corpus]
corpus_tfidf包含具有术语ID和相应TFIDF的列表。然后我使用以下行将TFIDF与ids分开:
for doc in corpus_tfidf:
for ids,tfidf in doc:
IDS.append(ids)
tfidfmtx.append(tfidf)
IDS=[]
现在我想使用k-means聚类,所以我想执行tfidf矩阵的余弦相似性问题是Gensim不生成方阵,所以当我运行跟随行时它会产生错误。我想知道如何从Gensim得到方阵以计算向量空间模型中所有文档的相似性。另外,如何将tfidf矩阵(在本例中是列表列表)转换为2D NumPy数组。任何评论都非常感谢。
dumydist = 1 - cosine_similarity(tfidfmtx)
语料库 - 列表(Gensim Corpus)
from scipy.sparse import csc_matrix
scipy_csc_matrix =genism.matutils.corpus2csc(corpus)
full_matrix=csc_matrix(scipy_csc_matrix).toarray()
如果您的语料库大小非常大,您可能希望使用scipy稀疏格式。
当您将语料库安装到Gensim词典时,请获取词典中的数字或文档和标记:
from gensim.corpora.dictionary import Dictionary
dictionary = Dictionary(corpus_lists)
num_docs = dictionary.num_docs
num_terms = len(dictionary.keys())
变成弓:
corpus_bow = [dictionary.doc2bow(doc) for doc in corpus_lists]
转换为tf-idf:
from gensim.models.tfidfmodel import TfidfModel
tfidf = TfidfModel(corpus_bow)
corpus_tfidf = tfidf[corpus_bow]
现在你可以转换为稀疏/密集矩阵:
from gensim.matutils import corpus2dense, corpus2csc
corpus_tfidf_dense = corpus2dense(corpus_tfidf, num_terms, num_docs)
corpus_tfidf_sparse = corpus2csc(corpus_tfidf, num_terms, num_docs)
现在使用稀疏/密集矩阵(转置后)适合您的模型:
model = KMeans(n_clusters=7)
clusters = model.fit_predict(corpus_bow_dense.T)