【问题标题】:Gensim: extract 100 most representative documents for each topicGensim:为每个主题提取 100 个最具代表性的文档
【发布时间】:2020-09-22 06:37:07
【问题描述】:

我有几个适合约 500 万个文档的 gensim 模型。我想从每个模型中为每个主题提取前 100 个最具代表性的文档,以帮助我选择最佳模型。

假设我有一个模型lda和语料库corpus,我可以得到以下形式的主题概率:

topic_probs = lda[corpus]

其中topic_probs 是元组列表:(topic_num, topic_prob)

如何按主题和概率对这个元组列表进行排序,然后从语料库中检索前 100 个文档?我猜答案看起来像method for assigning topics here,但我正在努力解决如何在维护文档索引的同时处理元组列表。

(这有点复杂,因为我不知道gensim.LdaModelminimum_probability 参数,因此概率

【问题讨论】:

    标签: python tuples gensim lda


    【解决方案1】:

    我已经设法解决了这个问题,尽管可能不是以最有效的方式,而且我没有时间让它完全便携。

    1. 我提取文档主题概率,并将其转储到 csv(我的语料库很大,需要很长时间才能处理,所以我想保存这些)。您可以轻松地在多个模型上循环。
    def lda_to_csv(model, outfile, corpus):
        '''This function takes a gensim lda model as input, and outputs a csv with topics probs by document'''
        topic_probs = model.get_document_topics(corpus) #get the list of topic probabilities by doc
        topic_dict = [dict(x) for x in topic_probs] #convert to dictionary to convert to data frame
        df = pd.DataFrame(topic_dict).fillna(0) #convert to data frame, fill topics < 0.01 as 0
        df.to_csv(outfile)
    
    1. 编写了一个函数,该函数为每个主题选择 n 个最大概率,然后提取并返回给定原始(非 BoW)文本的文档作为列表。这假设具有文档索引的列名为“docs”。数据框是由前一个函数创建的,从 csv 读回。
    def get_best_docs(df, n, k, texts):
        '''Return the index of the n most representative documents from a list of topic responsibilities for each topic'''
        '''n is the number of douments you want, k is the number of topics in the model, the texts are the FULL texts used to fit the model'''
        #create column list to iterate over
        k_cols = range(0, k)
    
        #intialize empty list to hold results
        n_rep_docs = []
    
        #loop to extract documents for each topic
        for i in k_cols:
            inds = df.nlargest(n = n, columns = str(i))['docs'].astype(int).tolist()
            #use list comprehension to extract documents
            n_rep_docs.append([texts[ind] for ind in inds])
    
        return n_rep_docs
    

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 2014-05-26
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      相关资源
      最近更新 更多