Как я могу получить баллы по темам, относящиеся к документу Gensim LSI? - PullRequest
0 голосов
/ 08 октября 2019

Я новичок в питоне и ML. Я нашел хороший сценарий (https://www.machinelearningplus.com/nlp/topic-modeling-visualization-how-to-present-results-lda-models/) о том, как получить атрибутированные темы для каждого документа для LDA, и я изменил его, чтобы можно было использовать его и с LSI. Оригинальный код:

def format_topics_sentences(ldamodel=None, corpus=corpus, texts=data):
    # Init output
    sent_topics_df = pd.DataFrame()
    # Get main topic in each document
    for i, row_list in enumerate(ldamodel[corpus]):
        row = row_list[0] if ldamodel.per_word_topics else row_list            
        # print(row)
        row = sorted(row, key=lambda x: (x[1]), reverse=True)
        # Get the Dominant topic, Perc Contribution and Keywords for each document
        for j, (topic_num, prop_topic) in enumerate(row):
            if j == 0:  # => dominant topic
                wp = ldamodel.show_topic(topic_num)
                topic_keywords = ", ".join([word for word, prop in wp])
                sent_topics_df = sent_topics_df.append(pd.Series([int(topic_num), round(prop_topic,4), topic_keywords]), ignore_index=True)
            else:
                break
    sent_topics_df.columns = ['Dominant_Topic', 'Perc_Contribution', 'Topic_Keywords']

Чтобы использовать его для LSI, я изменил его на:

def format_topics_sentences_lsi(LsiModel=None, corpus=corpus, texts=data):
    """
    Extract all the information needed such as most predominant topic assigned to document and percentage of contribution
    LsiModel= model to be used
    corpus = corpus to be used
    texts = original text to be classify (for topic assignment)
    """
    # Init output
    sent_topics_df = pd.DataFrame()

    # Get main topic in each document
    for i, row in enumerate(LsiModel[corpus]):
        row = sorted(row, key=lambda x: (x[1]), reverse=True)
        # Get the Dominant topic, Perc Contribution and Keywords for each document
        for j, (topic_num, prop_topic) in enumerate(row):
            if j == 0:  # => dominant topic
                wp = LsiModel.show_topic(topic_num)
                topic_keywords = ", ".join([word for word, prop in wp])
                sent_topics_df = sent_topics_df.append(pd.Series([int(topic_num), round(prop_topic,4), topic_keywords]), ignore_index=True)
            else:
                break
    sent_topics_df.columns = ['Dominant_Topic', 'Perc_Contribution', 'Topic_Keywords']
  • Это правильный путь?
  • Поскольку LSI не основан на вероятностях, «Perc_Contrib»выше 100%. Как мне интерпретировать это число?
  • Помимо приведенного выше сценария, поскольку в LSI нет get_document_topics, какую функцию я могу использовать для просмотра темы с наибольшим количеством баллов?
...