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)
4条答案
按热度按时间kknvjkwl1#
了解概率计算是底层聚类算法的固有过程非常重要。使用
update_topics
时,您实际上只更新主题表示,而不更新底层聚类算法。因此,每当通过此方法通过自定义主题更新模型时,都不会与聚类算法一起计算概率。稍后,我需要为管道中的每个文档分配一个概率。
您需要单个概率分数还是每个文档的主题-文档概率向量?如果是前者,那么您仍然可以使用
probabilities_
,因为它们仍然可以准确地更新底层主题和分配。如果是后者,那是不可能的,因为自定义分配通常不遵循像merge_topics
这样的合并过程。例如,您可能会将一些最初属于主题 0 的文档Map到主题 3,而另一些则Map到主题 2。这意味着没有明确的结构来合并主题-文档概率。kcrjzv8t2#
感谢您的回答,您认为在为模型分配自定义标签的最佳实践是什么?
您建议使用
update_topics
方法,然后在每个文档与底层主题的平均嵌入之间分配余弦距离吗?还是再次使用fit_transform
方法,并使用y
类(将它们分割为真实类别后的主题)?bybem2ql3#
感谢您的回答,您认为在为模型分配自定义标签的最佳实践是什么?
有几种方法可以获得概率:
首先,您确实可以使用文档和主题嵌入之间的余弦相似度来了解文档中的主题分布。正如
.approximate_distribution
中提到的其他方法一样。其次,您可以使用 BERTopic 进行高效的主题建模。在这里,您可以使用之后创建的主题表示作为目标。完成此操作后,然后应用
.approximate_distribution
。这种方法的好处是所有内容都保存在内部,由于在训练后很少需要降维和聚类步骤,因此通常可以跳过它们。在实践中,它看起来是这样的:我仍然建议使用嵌入模型或直接传递嵌入,因为这将创建结果主题嵌入。
kknvjkwl4#
谢谢你,这确实非常有帮助。