BERTopic Running Topics Over Time with just a subset of topics and documents

kqqjbcuj  于 3个月前  发布在  其他
关注(0)|答案(4)|浏览(51)

我想运行topic_model.topics_over_time()函数,但只针对特定文档和主题的子集。有时候在处理包含许多主题的大型语料库时,对所有文档和主题运行它会变得有些笨拙,尤其是如果我只对特定主题的时间变化感兴趣。目前,这似乎不可能,因为topics_over_time不允许手动选择主题,并在完整列表上运行(具体来说,它引用了“Topic”: self.topics_)。我认为可以通过更改函数来轻松解决这个问题,将topics作为参数,如下所示:

def topics_over_time(self,
                         docs: List[str],
                         timestamps: Union[List[str],
                                           List[int]],
                         topics: List[int] = None,
                         nr_bins: int = None,
                         datetime_format: str = None,
                         evolution_tuning: bool = True,
                         global_tuning: bool = True) -> pd.DataFrame:

然后将documents对象更改为以下内容:

documents = pd.DataFrame({"Document": docs, "Topic": topics, "Timestamps": timestamps})

我已经fork了仓库( https://github.com/yousufabdelfatah/BERTopic ),并已经测试过这个功能,因为我当时是在当地实现的,但我认为我应该将此问题作为反馈提出并寻求可能的合作。这有意义吗?还是我忽略了这可能导致下游问题的潜在问题?

xesrikrc

xesrikrc1#

感谢您的建议!
这里有几个可能会有点麻烦的地方。首先,当你只选择一个主题子集时,计算主题表示的方式是什么。通常,默认的c-TF-IDF表示在有足够多的主题时,更有可能省略高频词,如停用词。通过减少主题数量,它可能会降低主题表示的质量。其次,您是否检查过如果topics缺少一个完整的主题,这是否会抛出一个错误?我不确定,但该函数可能需要所有主题才能使global_tuning参数正常工作。

hiz5n14c

hiz5n14c2#

感谢您的回复!很有趣,因为主题表示是在每个时间戳计算的,所以限制主题数量可能会导致获得较低质量的主题表示?这是否通过足够的文档得到缓解,或者需要达到某种主题数量阈值?在测试中,仅使用6个主题运行似乎给我提供了与完整模型相当相似的表示,但我不清楚这是否仅仅是数据或文档数量的功能,还是其他具体原因。
对于第二个问题,如果文档和主题不匹配,它似乎会抛出错误,但是如果你将文档和主题进行子集划分,使得所有主题都有相应的文档,反之亦然,那么它似乎可以正常运行而不报错。

ckx4rj1h

ckx4rj1h3#

感谢回复!很有趣,因为主题表示是在每个时间戳计算的,所以限制主题数量可能会导致获得较低质量的主题表示?这是否通过足够的文档得到缓解,或者需要达到某个主题数量的阈值?在测试中,仅使用6个主题运行似乎给我与完整模型相当相似的表示,但我不确定这是否仅仅是数据或文档数量的功能,还是其他原因。

确实可能是这样。当只有几个主题创建时,它们可能有更多的停用词,我们通常希望避免这种情况。这可能会降低开箱即用的主题质量,因为大多数用户希望限制停用词的数量。如果创建更多主题,通常会更好。然而,对于其他表示模型(如KeyBERTInspired、MMR或任何LLMs)来说,这通常不是情况。

对于第二个问题,如果文档和主题不匹配,似乎会出现错误。但是,如果你将文档和主题进行子集划分,使得所有主题都有相应的文档,反之亦然,它似乎可以正常运行而不会出错。

如果选择了正确对齐的子集,但特定主题完全缺失,它是否可以无错误地运行?

vcudknz3

vcudknz34#

这确实可能是个问题。当只有少数几个主题被创建时,它们很可能会有更多的停用词,而我们通常希望避免这些停用词。这可能会降低开箱即用的主题质量,因为大多数用户都希望限制停用词的数量。如果创建更多主题,情况会更好。然而,对于其他表示模型(如KeyBERTInspired、MMR或任何LLMs)来说,这通常并不是一个问题。

我想知道在函数中,主题是否可以成为一个参数,它默认使用所有主题,但在像我这样的一些用例中,子集非常有用,你可以指定特定的主题和相应的文档。

如果选择了正确的对齐的子集,但特定主题完全缺失,它是否会运行而不出错?

只有在文档中存在主题的情况下才会抛出错误。但是只要文档和主题都被正确地子集化,似乎就不会出错。所以假设你有10个主题,想要为主题1-5运行这个程序,只要你将与这些主题对应的文档传递给docs参数,一切似乎都会正常运行。然而,如果在子集中存在与主题6对应的文档,但主题6没有在topics参数中指定(反之亦然),那么它将抛出一个错误。

相关问题