gensim 的 get_document_topics 方法返回的概率加起来不等于 1

2024-02-29

有时它返回所有主题的概率并且一切都很好,但有时它只返回几个主题的概率并且它们加起来不等于一,似乎这取决于文档。一般来说,当它返回很少的主题时,概率加起来大约为 80%,那么它只返回最相关的主题吗?有没有办法强制它返回所有概率?

也许我遗漏了一些东西,但我找不到该方法参数的任何文档。


我遇到了同样的问题并通过包含参数解决了它minimum_probability=0当呼叫get_document_topics的方法gensim.models.ldamodel.LdaModel对象。

    topic_assignments = lda.get_document_topics(corpus,minimum_probability=0)

默认情况下,gensim 不输出低于 0.01 的概率,因此对于任何特定文档,如果有任何主题分配的概率低于此阈值,则该文档的主题概率之和将不等于 1。

这是一个例子:

from gensim.test.utils import common_texts
from gensim.corpora.dictionary import Dictionary
from gensim.models.ldamodel import LdaModel

# Create a corpus from a list of texts
common_dictionary = Dictionary(common_texts)
common_corpus = [common_dictionary.doc2bow(text) for text in common_texts]

# Train the model on the corpus.
lda = LdaModel(common_corpus, num_topics=100)

# Try values of minimum_probability argument of None (default) and 0
for minimum_probability in (None, 0):
    # Get topic probabilites for each document
    topic_assignments = lda.get_document_topics(common_corpus,minimum_probability=minimum_probability)
    probabilities = [ [entry[1] for entry in doc] for doc in topic_assignments ]
    # Print output
    print(f"Calculating topic probabilities with minimum_probability argument = {str(minimum_probability)}")
    print(f"Sum of probabilites:")
    for i, P in enumerate(probabilities):
        sum_P = sum(P)
        print(f"\tdoc {i} = {sum_P}")

输出将是:

Calculating topic probabilities with minimum_probability argument = None
Sum of probabilities:
    doc 0 = 0.6733324527740479
    doc 1 = 0.8585712909698486
    doc 2 = 0.7549994885921478
    doc 3 = 0.8019999265670776
    doc 4 = 0.7524996995925903
    doc 5 = 0
    doc 6 = 0
    doc 7 = 0
    doc 8 = 0.5049992203712463
Calculating topic probabilities with minimum_probability argument = 0
Sum of probabilites:
    doc 0 = 1.0000000400468707
    doc 1 = 1.0000000337604433
    doc 2 = 1.0000000079162419
    doc 3 = 1.0000000284053385
    doc 4 = 0.9999999937135726
    doc 5 = 0.9999999776482582
    doc 6 = 0.9999999776482582
    doc 7 = 0.9999999776482582
    doc 8 = 0.9999999930150807

文档中没有非常清楚地说明这种默认行为。默认值为minimum_probability为了get_document_topics方法是None,但这并不会将概率设置为零。相反的价值minimum_probability设置为值minimum_probability of the gensim.models.ldamodel.LdaModel对象,默认值为 0.01,如您在源代码 https://github.com/RaRe-Technologies/gensim/blob/996801bb3fb8c4e10a84eefa70f5e2ac738dd47b/gensim/models/ldamodel.py#L347:

def __init__(self, corpus=None, num_topics=100, id2word=None,
             distributed=False, chunksize=2000, passes=1, update_every=1,
             alpha='symmetric', eta=None, decay=0.5, offset=1.0, eval_every=10,
             iterations=50, gamma_threshold=0.001, minimum_probability=0.01,
             random_state=None, ns_conf=None, minimum_phi_value=0.01,
             per_word_topics=False, callbacks=None, dtype=np.float32):
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gensim 的 get_document_topics 方法返回的概率加起来不等于 1 的相关文章

随机推荐

  • 如何使用“concurrent.futures.ProcessPoolExecutor”取消长时间运行的子进程?

    你可以看到完整的here https github com traverseda rratbot blob master main py L35 我的代码的简化版本如下 executor ProcessPoolExecutor 10 try
  • 如何在 pl/sql 中的另一个游标的 select 语句中使用游标中的变量

    我想运行一个查询 获取结果 然后使用第二个语句 光标 中第一个语句的值与另一个 select 语句迭代该查询的结果 我的数据库中有 40 个用户 所有用户都具有相同的数据库模式结构 我想通过以下方式获取用户名 SELECT distinct
  • 在 PowerShell 中使用 StreamWriter 附加到文件

    我创建了一个 PowerShell 脚本 该脚本使用 StreamWriter 将 Windows 中文件夹的权限结果写入 CSV 文件 目前 该脚本为每个文件夹创建一个新文件 我的问题是 StreamWriter 是否可以附加到文件而不是
  • FirebaseCore 词法或预处理器问题

    所以我在使用 firebase 编译我的项目时遇到了问题 这个问题是在我更新所有 firebase pod 后开始的 自从我更新了 pod 后 我就一直收到此错误 词法或预处理器问题 然后当我转到错误是什么时 它说这个 找不到 Google
  • 对 kafka 消费者进行负载测试

    我试图弄清楚如何对卡夫卡消费者进行负载测试 在我的应用程序中 消费者从 kafka 读取消息并做了很多工作 其中大部分是在数据库中写入内容 由于这对我的团队来说是一个重要的过程 因此我希望能够对消费者进行负载测试 并能够获得一些有关消费情况
  • 将多行合并为一行以替换列中的空值

    如何将多行合并为一行 以便一行中的某些列替换要合并的另一行中相同列中的空值 这是我所拥有的和我想要实现的目标的一个例子 查询是 SELECT Drug Name DefaultVendor Name Drug Strength Catalo
  • AndroidrelativeLayoutalignTop不起作用

    我正在尝试在RelativeLayout 中使用alignTop 属性 以便将文本设置在个人资料图片的右侧 与图片的顶部对齐 这是我的布局
  • 将文本添加到 DataGridView 行标题

    C 是否允许将字符串添加到 DataGridView 中的 RowHeader 如果是的话 是如何实现的呢 我正在编写一个 Windows 窗体来显示今年迄今为止的客户付款数据 ColumnHeaders 显示一月 二月 三月等 而不是有一
  • 如何避免 JavaScript 中的短路求值?

    我需要执行两边 声明 但如果第一部分返回 则不会发生这种情况false 例子 function doSomething x console log x function checkSomething x var not1 x 1 if no
  • 如何保护客户端/服务器套接字通信的安全

    假设客户端和服务器应用程序在不同的计算机上运行 Today Server will receive the request and cast it as needed ProxyResponse message ProxyResponse
  • docker buildx“执行用户进程导致:执行格式错误”

    我正在尝试交叉编译一个 Rust 应用程序以在我的树莓派集群上运行 我看到 docker 的 buildx 应该能够使这成为可能 我现在有一个最小的 dockerfile 如下所示 FROM rust RUN apt get update
  • 在本地工作的 R 脚本不适用于shinyapp.io

    我正在尝试组装一个 R Shiny 应用程序 至少在最初 它可以绘制日期数据的直方图 我让它在 RStudio 的本地系统上工作得很好 但在闪亮的应用程序 io 中它不起作用 目前 该应用程序非常简单 用户界面实际上没有做任何事情 数据只是
  • Jupyter 上 Sparkcollect() 的 IllegalArgumentException

    我设置了 Jupyter 4 3 0 Python 3 6 3 Anaconda 和 PySpark 2 2 1 以下示例在通过 Jupyter 运行时将失败 sc SparkContext getOrCreate rdd sc paral
  • 如何获取两个列表之间的所有唯一分配

    我有两个列表 每个列表都可以包含重复的值 但任何值只能出现在这两个列表之一 或没有 中 A 0 1 B 2 3 我想获得这两个列表之间的所有唯一映射 assignment A B 0 2 1 3 0 3 1 2 我知道这可以例如使用 ite
  • 如何解决 MSCV 中 Boost 文件系统库的 LNK1104 错误?

    我无法将我的项目链接到 Microsoft Visual C 2008 Express Edition 中的 Boost 版本 1 37 0 文件系统 lib 文件 文件系统库是not仅标头库 我一直在关注Windows 入门 http w
  • 如何处理pygame中不同组件的时间

    我正在制作一个 pygame 游戏 人们可以从商店购买炸弹 玩家还可以投下购买的炸弹数量 我需要一种方法让每个炸弹在投下 3 秒后消失 在下面的代码中 我只能投下炸弹 但是我尝试了各种方法但失败了 import pygame import
  • 使用 .NET Core 的 Linux/Unix 上的文件权限

    我正在尝试学习如何使用 NET Core 在 Linux Unix 上设置文件权限 我已经在这里发现了一个问题 它指出了 System IO FileSystem 的方向 但我似乎找不到任何有关如何使用它的文档 简而言之 我想从仅在 Lin
  • 在 React Native 应用程序中发送应用程序邀请

    在 facebook iOS SDK 中 有一个名为 App Invites 的模块 允许将您的应用程序的邀请发送给您的朋友 https developers facebook com docs ios https developers f
  • sstream 重新声明并出现公共访问编译器错误

    我在使用 gcc5 4 0 在大型项目上运行 make 时遇到了此错误 usr include c 5 sstream 300 14 error xfer bufptrs redeclared with public access stru
  • gensim 的 get_document_topics 方法返回的概率加起来不等于 1

    有时它返回所有主题的概率并且一切都很好 但有时它只返回几个主题的概率并且它们加起来不等于一 似乎这取决于文档 一般来说 当它返回很少的主题时 概率加起来大约为 80 那么它只返回最相关的主题吗 有没有办法强制它返回所有概率 也许我遗漏了一些