You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用BERTopic.transform处理新文本时遭遇Embeddings ValueError的求助

问题解决方法

错误原因

你调用topic_model.transform时,传入的是训练数据集的embeddings(形状为(N, 384),N是训练文档总数),但该方法需要的是当前待处理新文本对应的embeddings(形状应为(1, 384),对应1个新句子),两者形状不匹配导致报错。

解决步骤

方法1:手动生成新文本的embedding

重新加载训练时用的SentenceTransformer模型,为新句子生成对应embedding后再传入transform方法:

from sentence_transformers import SentenceTransformer

# 加载训练时使用的SentenceTransformer模型
sentence_model = SentenceTransformer("all-MiniLM-L6-v2")
# 加载保存的BERTopic模型
topic_model = BERTopic.load('mybertopic')

sentence = 'I have found my car.'
# 生成新句子的embedding(注意传入列表格式,确保输出为二维数组)
new_embedding = sentence_model.encode([sentence], show_progress_bar=False)
# 传入新embedding执行预测
topics, probs = topic_model.transform(sentence, new_embedding)

方法2:让BERTopic自动生成embedding

如果训练BERTopic时没有替换或禁用内部的embedding生成逻辑,可直接传入新文本,无需手动生成embedding(BERTopic会自动调用训练时关联的SentenceTransformer模型处理):

topic_model = BERTopic.load('mybertopic')
sentence = 'I have found my car.'
# 直接传入文本,无需手动传递embeddings参数
topics, probs = topic_model.transform(sentence)

额外说明

  • 训练时保存的embeddings.pickle是训练数据集的向量,仅用于训练阶段,预测新文本时完全不需要用到它。
  • 确保加载的SentenceTransformer模型和训练时使用的完全一致(即all-MiniLM-L6-v2),否则生成的embedding维度或分布不匹配,会影响预测结果。

内容的提问来源于stack exchange,提问作者Vai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:16:26