问题概述
在使用 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")
3条答案
按热度按时间owfi6suc1#
这是正确的。cTFIDF表示无法合并,因为通常两个模型具有完全不同的词汇表。作为解决方案,检查我们是否可以使用嵌入可能是值得的。我还没有尝试过,但你可以试试这个:
topic_model.c_tf_idf_ = topic_model.topic_embeddings_
。这不是最干净的解决方案,但它可能在目前有效。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}$。
chhkpiq43#
我相信你得到这个错误的原因相同。相反,你可以从刚刚推送到主分支的 PR 中使用
use_ctfidf=True
参数。你可以这样使用它:另外,请注意,不建议运行以下代码,因为一个应该是稀疏矩阵,另一个不是,这可能导致一系列问题: