代码之家  ›  专栏  ›  技术社区  ›  Christopher

topic model:如何按主题模型topic查询文档?

  •  4
  • Christopher  · 技术社区  · 8 年前

    下面我创建了一个完全可复制的示例来计算给定数据帧的主题模型。

    import numpy as np  
    import pandas as pd
    
    data = pd.DataFrame({'Body': ['Here goes one example sentence that is generic',
                      'My car drives really fast and I have no brakes',
                      'Your car is slow and needs no brakes', 
                      'Your and my vehicle are both not as fast as the airplane']})
    
    from sklearn.decomposition import LatentDirichletAllocation
    from sklearn.feature_extraction.text import CountVectorizer
    
    vectorizer = CountVectorizer(lowercase = True, analyzer = 'word')
    
    data_vectorized = vectorizer.fit_transform(data.Body)
    lda_model = LatentDirichletAllocation(n_components=4, 
                                          learning_method='online', 
                                          random_state=0,
                                          verbose=1)
    lda_topic_matrix = lda_model.fit_transform(data_vectorized)
    

    问题: 如何按主题筛选文档?如果是,文档是否可以有多个主题标记,或者是否需要阈值?

    最后,我喜欢用“1”标记每个文档,这取决于它是否具有主题2和主题3的高负载,否则为“0”。

    1 回复  |  直到 8 年前
        1
  •  2
  •   doodhwala    8 年前

    lda_topic_matrix 包含文档属于特定主题/标记的概率分布在human中,这意味着每一行的总和为1,而每个索引处的值是该文档属于特定主题的概率。因此,每个文档都有不同程度的所有主题标记如果有4个主题,则所有标记都相等的文档将在 lda_主题矩阵 类似 [0.25, 0.25, 0.25, 0.25] . 只有一个主题(“0”)的文档行将变成 [0.97, 0.01, 0.01, 0.01] 包含两个主题(“1”和“2”)的文档将具有如下分布 [0.01, 0.54, 0.44, 0.01]

    因此,最简单的方法是选择概率最高的主题,并检查它是否 2 3 :

    main_topic_of_document = np.argmax(lda_topic_matrix, axis=1)
    tagged = ((main_topic_of_document==2) | (main_topic_of_document==3)).astype(np.int64)
    

    This article 很好地解释了LDA的内部机理。

    推荐文章