BERTopic find_topics对于任何关键词都返回相同的主题,

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

你好,
我使用CUML的HDBSCAN和UMAP对BERTopic模型进行了拟合。我在Huggingface上使用了microsoft/codebert-base作为嵌入模型,如下所示:

model = pipeline("feature-extraction", 
                         model="microsoft/codebert-base", 
                         device=0)
topic_model = BERTopic(embedding_model=model,
                              umap_model=umap_model,
                              hdbscan_model=hdbscan_model,
                              calculate_probabilities=True,
                              )
topic_model = topic_model.fit(docs)

topic_model.save("models/codebert", 
                serialization="safetensors", 
                save_ctfidf=True)

上面的代码运行没有任何问题。以下是我加载模型的方式:

embedding_model = 'microsoft/codebert-base'
model = pipeline('feature-extraction', embedding_model)
model = HFTransformerBackend(model)
topic_model = BERTopic.load("models/codebert",
                            embedding_model=model)

尽管从topic_model中调用get_topic_info方法会返回一个有意义的主题列表,但当我调用find_topics时,无论输入什么词,都会返回一组几乎相同概率的主题列表。当我使用另一个Huggingface模型时也发生了同样的事情。有没有潜在的解决方法?

cvxl0en2

cvxl0en21#

您似乎没有在保存和加载主题模型之间以相同的方式加载后端。您是否可以以相同的方式应用它并再次尝试?
此外,您能否展示一个关于您在使用find_topics时遇到的问题的例子?这将有助于理解问题。

rkttyhzu

rkttyhzu2#

我尝试以相同的方式加载它,但它仍然显示相同的行为:

embedding_model = 'microsoft/codebert-base'
hf_pipeline = pipeline('feature-extraction', embedding_model)
topic_model = BERTopic.load("models/codebert",
                            embedding_model=hf_pipeline)

下面是一个尝试使用不同关键词的例子:

输出结果存在两个问题:
1-主题相似度太高(根据我对句子转换器的实验,这不应该是这样)
2-尽管主题模型内部的主题是连贯的,但返回的主题与搜索查询无关。

a6b3iqyw

a6b3iqyw3#

1-主题相似度非常高(根据我对句子转换器的实验,这不应该是这样)
啊,现在我明白了!这是预期的行为,因为sentence-transformers中的模型是优化用于相似性任务的,而普通的BERT类模型则不是,通常会输出非常高的相似度分数。这也是BERTopic中使用sentence-transformers作为默认模型的原因,它们在性能上优于常规的BERT模型。可以在here找到BERTopic中使用的非常强大的模型概述。

c86crjj0

c86crjj04#

我明白了。感谢您的指导!
我应该查看提供的链接中的"聚类"部分进行比较吗?哪个选项卡包含了适当的比较?

xoshrz7s

xoshrz7s5#

你通常会查看聚类选项卡。

相关问题