你好,
我已经按照指南中的说明进行了操作 - https://colab.research.google.com/drive/1W7aEdDPxC29jP99GGZphUlqjMFFVKtBC?usp=sharing#scrollTo=oGQnu6lO9SrE
特别是关于手动实现BERTopic的部分。在执行过程中,我为BERTopic指定了calculate_probabilities=True。然而,在使用以下代码片段进行模型拟合后,预期的概率没有返回。
请问您能否提供一些见解或解决方案,以修改代码,使其成功返回hdbscan_model输出中的概率矩阵?
感谢您的帮助。
from cuml.cluster import HDBSCAN
from sentence_transformers import SentenceTransformer
from bertopic import BERTopic
from bertopic.cluster import BaseCluster
from bertopic.representation import KeyBERTInspired
class Dimensionality:
""" Use this for pre-calculated reduced embeddings """
def __init__(self, reduced_embeddings):
self.reduced_embeddings = reduced_embeddings
def fit(self, X):
return self
def transform(self, X):
return self.reduced_embeddings
# Prepare sub-models
embedding_model = SentenceTransformer('all-MiniLM-L6-v2')
umap_model = Dimensionality(reduced_embeddings)
hdbscan_model = BaseCluster()
vectorizer_model = CountVectorizer(vocabulary=vocab, stop_words="english")
representation_model = KeyBERTInspired()
# Fit BERTopic without actually performing any clustering
topic_model= BERTopic(
embedding_model=embedding_model,
umap_model=umap_model,
hdbscan_model=hdbscan_model,
vectorizer_model=vectorizer_model,
representation_model=representation_model,
calculate_probabilities= True,
verbose=True
).fit(texts, embeddings=embeddings, y=clusters)
5条答案
按热度按时间lsmepo6l1#
如果你没有使用聚类模型对
hdbscan_model
进行处理,而是采用了手动主题建模,那么默认情况下不会返回任何概率。聚类是在之前的步骤中完成的,你可以在那里找到概率。然而,如果你想在不使用 HDBSCAN 的情况下提取概率,只需运行
topic_model.transform(texts, embeddings=embeddings)
,它将给出概率。这些概率与 HDBSCAN 不同,因为它们计算输入嵌入和主题嵌入之间的余弦相似度。zfciruhq2#
谢谢你!
你会如何解读HDBSCAN返回的概率与主题建模中的概率?
5uzkadbs3#
它们都是对底层过程的近似。HDBSCAN在聚类后创建它们,因此它们不是内部分配过程的一部分。同样适用于余弦相似度技巧。在实践中,根据我的经验,两者之间存在显著的重叠,但它们的行为略有不同。例如,HDBSCAN基于降维嵌入进行计算,而余弦相似度技巧则在完整嵌入上进行计算。
bq8i3lrv4#
我已经实施了您推荐的两种方法,并注意到结果矩阵中的差异:
hdbscan_model.probabilities_
实现的*根据您的解释,这个矩阵是否仅表示每个文档选择的主题的概率?
topic_model.transform
实现的*这是否意味着使用HDBSCAN无法获得每个文档和主题的概率?
sbtkgmzw5#
您的
Using Probabilities with HDBSCAN
是通过topic_model.probabilities_
提取的,而不是通过hdbscan_model.probabilities_
。前者确实是所选主题的概率,而后者是所有主题的概率。这是否意味着使用HDBSCAN无法获得每个文档和主题的概率?
不,如果您使用
calculate_probabilities=True
与HDBSCAN,那么topic_model.probabilities_
将包含每个文档和主题的概率。