如何获取BERTopic模型中每个文档的全主题概率向量
如何获取BERTopic模型中每个文档的全主题概率向量
嗨,我来帮你搞定这个问题~
你现在拿到的probs只有单个值,是因为BERTopic默认只返回每个文档最匹配的那个主题的概率,而不是所有主题的完整概率分布。要获取N×K(N是文档数,K是主题数)的概率矩阵,有两种简单的方法:
方法一:训练时直接开启概率计算
在初始化BERTopic模型的时候,加上calculate_probabilities=True参数,这样训练完成后,fit_transform返回的probs就是每个文档对应所有主题的概率向量了:
from bertopic import BERTopic # 添加calculate_probabilities=True参数 topic_model = BERTopic(n_gram_range=(1, 1), nr_topics=20, calculate_probabilities=True) topics, probs = topic_model.fit_transform(docs)
这时候你再查看probs,就会得到一个形状为(len(docs), 20)的数组,每一行就是对应文档在20个主题上的概率分布。
方法二:对已训练好的模型补算概率
如果已经训练完模型不想重新跑一遍,可以用approximate_distribution方法来生成全概率向量:
# 基于已训练好的topic_model计算全概率分布 probs = topic_model.approximate_distribution(docs)
这个方法会利用已有的模型参数,快速估算每个文档在所有主题上的概率,返回的结果同样是N×K的矩阵。
小提醒:开启全概率计算会增加训练时间和内存消耗,如果你处理的是超大批量的文档,需要根据自己的硬件情况权衡一下性能哦~
备注:内容来源于stack exchange,提问作者coolhand
相关产品推荐
相关产品推荐

