BERTopic `update_topics`如何重新计算或重新分配概率?

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

在获取主题后,我需要根据内部标签将它们拆分。这样做时,我需要使用 update_topics 并使用自定义主题列表。但是 update_topics 函数不再更新 probabilities_。以后我需要为我的管道中的每个文档分配一个概率。
虽然文档指出 update_topics 可以获得自定义主题,但它似乎并没有一致地改变所有状态。我是不是漏掉了什么?

kknvjkwl

kknvjkwl1#

了解概率计算是底层聚类算法的固有过程非常重要。使用 update_topics 时,您实际上只更新主题表示,而不更新底层聚类算法。因此,每当通过此方法通过自定义主题更新模型时,都不会与聚类算法一起计算概率。
稍后,我需要为管道中的每个文档分配一个概率。
您需要单个概率分数还是每个文档的主题-文档概率向量?如果是前者,那么您仍然可以使用 probabilities_,因为它们仍然可以准确地更新底层主题和分配。如果是后者,那是不可能的,因为自定义分配通常不遵循像 merge_topics 这样的合并过程。例如,您可能会将一些最初属于主题 0 的文档Map到主题 3,而另一些则Map到主题 2。这意味着没有明确的结构来合并主题-文档概率。

kcrjzv8t

kcrjzv8t2#

感谢您的回答,您认为在为模型分配自定义标签的最佳实践是什么?
您建议使用 update_topics 方法,然后在每个文档与底层主题的平均嵌入之间分配余弦距离吗?还是再次使用 fit_transform 方法,并使用 y 类(将它们分割为真实类别后的主题)?

bybem2ql

bybem2ql3#

感谢您的回答,您认为在为模型分配自定义标签的最佳实践是什么?
有几种方法可以获得概率:
首先,您确实可以使用文档和主题嵌入之间的余弦相似度来了解文档中的主题分布。正如 .approximate_distribution 中提到的其他方法一样。
其次,您可以使用 BERTopic 进行高效的主题建模。在这里,您可以使用之后创建的主题表示作为目标。完成此操作后,然后应用 .approximate_distribution 。这种方法的好处是所有内容都保存在内部,由于在训练后很少需要降维和聚类步骤,因此通常可以跳过它们。在实践中,它看起来是这样的:

from bertopic import BERTopic
from bertopic.cluster import BaseCluster
from bertopic.vectorizers import ClassTfidfTransformer
from bertopic.dimensionality import BaseDimensionalityReduction

# Prepare our empty sub-models and reduce frequent words while we are at it.
empty_dimensionality_model = BaseDimensionalityReduction()
empty_cluster_model = BaseCluster()

# Fit BERTopic without actually performing any clustering
topic_model= BERTopic(
        embedding_model=YOUR_EMBEDDING_MODEL,
        umap_model=empty_dimensionality_model,
        hdbscan_model=empty_cluster_model,
)
topics, probs = topic_model.fit_transform(docs, y=y)

我仍然建议使用嵌入模型或直接传递嵌入,因为这将创建结果主题嵌入。

kknvjkwl

kknvjkwl4#

谢谢你,这确实非常有帮助。

相关问题