调用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
相关产品推荐
相关产品推荐

