BERTopic 合并多个拟合模型 - 查看分层主题时的误差

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

问题概述

在使用 merged_model = BERTopic.merge_models([topic_model_1, topic_model_2]) 命令时,生成的合并主题模型无法再像层次主题模型那样可视化,即使组成模型可以。

错误代码

hierarchical_topics = merged_model.hierarchical_topics(docs, linkage_function = linkage_function)
Traceback (most recent call last):

  Cell In[14], line 1
    hierarchical_topics = merged_model.hierarchical_topics(docs, linkage_function = linkage_function)

  File ~/anaconda3/envs/tf/lib/python3.9/site-packages/bertopic/_bertopic.py:975 in hierarchical_topics
    embeddings = self.c_tf_idf_[self._outliers:]

TypeError: 'NoneType' object is not subscriptable

最小工作示例

from umap import UMAP
from bertopic import BERTopic
from datasets import load_dataset
from sklearn.datasets import fetch_20newsgroups

docs = fetch_20newsgroups(subset='all',  remove=('headers', 'footers', 'quotes'))["data"]

# Create topic models
umap_model = UMAP(n_neighbors=15, n_components=5, min_dist=0.0, metric='cosine', random_state=42)
topic_model_1 = BERTopic(umap_model=umap_model, min_topic_size=20).fit(docs[0:1000])
topic_model_2 = BERTopic(umap_model=umap_model, min_topic_size=20).fit(docs[1000:2000])

# Combine all models into one
merged_model = BERTopic.merge_models([topic_model_1, topic_model_2])

# #Visualise Hierarchical Topic Model
linkage_function = lambda x: sch.linkage(x, 'ward', optimal_ordering=True)

#Use fitted model to extract hierarchies
hierarchical_topics = merged_model.hierarchical_topics(docs, linkage_function = linkage_function)

#Visualise Hierarchies
fig = merged_model.visualize_hierarchy(hierarchical_topics=hierarchical_topics)
fig.write_html("merged_model.html")
owfi6suc

owfi6suc1#

这是正确的。cTFIDF表示无法合并,因为通常两个模型具有完全不同的词汇表。作为解决方案,检查我们是否可以使用嵌入可能是值得的。我还没有尝试过,但你可以试试这个:topic_model.c_tf_idf_ = topic_model.topic_embeddings_。这不是最干净的解决方案,但它可能在目前有效。

hlswsv35

hlswsv352#

解:根据题意,我们可以得到以下方程组:

$\begin{cases}2a_{1}+b_{1}=3\ 2a_{2}+b_{2}=4\end{cases}$,

$\begin{cases}a_{1}+2b_{1}=5\ a_{2}+2b_{2}=6\end{cases}$,

解得$a_{1}=\dfrac{7}{3},b_{1}=\dfrac{2}{3}$,$a_{2}=\dfrac{8}{3},b_{2}=\dfrac{1}{3}$。

chhkpiq4

chhkpiq43#

我相信你得到这个错误的原因相同。相反,你可以从刚刚推送到主分支的 PR 中使用 use_ctfidf=True 参数。你可以这样使用它:

hierarchical_topics = merged_model.hierarchical_topics(docs, use_ctfidf=False)

另外,请注意,不建议运行以下代码,因为一个应该是稀疏矩阵,另一个不是,这可能导致一系列问题:

merged_model.c_tf_idf_ = merged_model.topic_embeddings_

相关问题