BERTopic on big data and probabilities

biswetbf  于 2个月前  发布在  其他
关注(0)|答案(5)|浏览(30)

你好,

我已经按照指南中的说明进行了操作 - 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)
lsmepo6l

lsmepo6l1#

如果你没有使用聚类模型对 hdbscan_model 进行处理,而是采用了手动主题建模,那么默认情况下不会返回任何概率。聚类是在之前的步骤中完成的,你可以在那里找到概率。
然而,如果你想在不使用 HDBSCAN 的情况下提取概率,只需运行 topic_model.transform(texts, embeddings=embeddings) ,它将给出概率。这些概率与 HDBSCAN 不同,因为它们计算输入嵌入和主题嵌入之间的余弦相似度。

zfciruhq

zfciruhq2#

谢谢你!
你会如何解读HDBSCAN返回的概率与主题建模中的概率?

5uzkadbs

5uzkadbs3#

它们都是对底层过程的近似。HDBSCAN在聚类后创建它们,因此它们不是内部分配过程的一部分。同样适用于余弦相似度技巧。在实践中,根据我的经验,两者之间存在显著的重叠,但它们的行为略有不同。例如,HDBSCAN基于降维嵌入进行计算,而余弦相似度技巧则在完整嵌入上进行计算。

bq8i3lrv

bq8i3lrv4#

我已经实施了您推荐的两种方法,并注意到结果矩阵中的差异:

  1. 使用HDBSCAN概率:结果矩阵的维度基于文档数量,具体为(n_docs)。
  • 这是通过hdbscan_model.probabilities_实现的*

根据您的解释,这个矩阵是否仅表示每个文档选择的主题的概率?

  1. 不使用HDBSCAN概率:在这里,矩阵维度为(n_docs, n_topics)。
  • 这是通过topic_model.transform实现的*

这是否意味着使用HDBSCAN无法获得每个文档和主题的概率?

sbtkgmzw

sbtkgmzw5#

您的Using Probabilities with HDBSCAN是通过topic_model.probabilities_提取的,而不是通过hdbscan_model.probabilities_。前者确实是所选主题的概率,而后者是所有主题的概率。
这是否意味着使用HDBSCAN无法获得每个文档和主题的概率?
不,如果您使用calculate_probabilities=True与HDBSCAN,那么topic_model.probabilities_将包含每个文档和主题的概率。

相关问题