【问题标题】:How come probabilities returned by Gensim LSI method show_topics are negative?Gensim LSI 方法 show_topics 返回的概率为什么是负数?
【发布时间】:2020-09-09 15:41:49
【问题描述】:

(0, '0.707*"उत्तरपश्चिमी" + 0.707*"यूरोप" + -0.000"बुद्ध" + -0.000*" +' '0.000*"बेल्जियम" + 0.000*"किंगडम" + 0.000*"नेपाल" + 0.000*"ऑफ़" + ' '-0.000"युन" + -0.000"स्थली"*')]
正如文档所说
show_topics(num_topics=-1, num_words=10, log=False, formatted=True)
返回 num_topics 最重要的主题(默认返回全部)。 对于每个主题,显示 num_words 个最重要的词(默认为 10 个词)。

主题以列表形式返回 - 如果格式化为 True,则返回字符串列表;如果 False,则返回(单词、概率)2 元组列表。

如果 log 为 True,也将此结果输出到 log。

def preprocessing(corpus):
    for document in corpus:
        doc = strip_short(document,3)
        doc = strip_punctuation(doc)
        yield word_tokenize(doc)
texts = preprocessing(corpus)
dictionary = corpora.Dictionary(texts)
dictionary.filter_extremes(no_below=1, keep_n=25000)

doc_term_matrix = [dictionary.doc2bow(tokens) for tokens in preprocessing(corpus)]
tfidf = models.TfidfModel(doc_term_matrix)
corpus_tfidf = tfidf[doc_term_matrix]

lsi = models.LsiModel(corpus_tfidf, id2word=dictionary)
pprint(lsi.show_topics(num_topics=4, num_words=10))
[(0,
  '0.707*"उत्तरपश्चिमी" + 0.707*"यूरोप" + -0.000*"बुद्ध" + -0.000*"जन्म" + '
  '0.000*"बेल्जियम" + 0.000*"किंगडम" + 0.000*"नेपाल" + 0.000*"ऑफ़" + '
  '-0.000*"युन" + -0.000*"स्थली"'),
 (1,
  '0.577*"किंगडम" + 0.577*"बेल्जियम" + 0.577*"ऑफ़" + -0.000*"जन्म" + '
  '-0.000*"बुद्ध" + -0.000*"भगवान" + -0.000*"स्थित" + -0.000*"लुंबिनी" + '
  '-0.000*"उत्तरपश्चिमी" + -0.000*"यूरोप"'),
 (2,
  '0.354*"जन्म" + 0.354*"भगवान" + 0.354*"स्थित" + 0.354*"स्थली" + 0.354*"युन" '
  '+ 0.354*"बुद्ध" + 0.354*"लुंबिनी" + 0.354*"नेपाल" + 0.000*"उत्तरपश्चिमी" + '
  '0.000*"यूरोप"')]

【问题讨论】:

    标签: python nlp gensim


    【解决方案1】:

    感谢您使用 SO。

    show_topics 为您提供语料库中最重要的主题。您看到的概率是每个单词对主题的贡献。例如“उत्तरपश्चिमी”和“यूरोप”各贡献了 0.707,而“बेल्जियम”贡献了 0.000。

    在显示词的贡献时,模型显示最大的绝对值,但由于接近0的浮点数被截断(比如-0.0000008),它们显示为-0.00。

    参考:https://radimrehurek.com/gensim/models/lsimodel.html

    【讨论】:

    • 您可以进一步补充:这是底层“浮点”表示的产物,它在内部可以在0.0 上有一个正号或负号。因此,任何一个都可能显示为某些计算的结果,但两者都意味着相同的事物并被视为等效。例如,尝试a=0.0; b=-0.0print(a, b)print(a==b)print(a*b)
    • 能否请您详细说明负号表示什么
    • 没什么。它是内部表示的产物。尝试在 Python 解释器上运行我评论中的示例代码:您会看到 0.0-0.0 是等价的。忽略它是安全的,但如果您好奇,可以在以下位置进行更多讨论:stackoverflow.com/questions/4083401/negative-zero-in-python
    猜你喜欢
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2016-02-28
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    相关资源
    最近更新 更多