使用种子主题列表训练BERTopic时触发ValueError形状不一致问题
BERTopic种子主题训练触发ValueError的解决思路
针对你遇到的ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.错误,结合Python 3.10.5和Numpy 1.24.3环境,提供以下解决思路:
降低Numpy版本至1.23.x系列
Numpy 1.24.x对非均匀形状数组的校验逻辑更严格,而BERTopic部分旧版本的代码逻辑未适配该变化。执行以下命令降级Numpy:pip install numpy==1.23.5降级后重新运行代码,大概率能解决该错误。
升级BERTopic到最新稳定版
BERTopic官方后续版本可能已修复与高版本Numpy的兼容问题,执行升级命令:pip install --upgrade bertopic升级后再尝试运行官方示例代码。
手动生成种子主题嵌入(备选方案)
如果上述两种方法无效,可以绕过模型自动生成种子主题嵌入的逻辑,手动计算每个种子主题的平均嵌入向量后传入模型:from bertopic import BERTopic from sklearn.datasets import fetch_20newsgroups from sentence_transformers import SentenceTransformer docs = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))["data"] seed_topic_list = [["drug", "cancer", "drugs", "doctor"], ["windows", "drive", "dos", "file"], ["space", "launch", "orbit", "lunar"]] # 初始化嵌入模型并手动生成种子主题的平均嵌入 embedding_model = SentenceTransformer("all-MiniLM-L6-v2") seed_topic_embeddings = [] for topic_terms in seed_topic_list: term_embeddings = embedding_model.encode(topic_terms) avg_topic_embedding = term_embeddings.mean(axis=0) seed_topic_embeddings.append(avg_topic_embedding) # 使用预生成的种子嵌入初始化模型 topic_model = BERTopic(seed_topic_embeddings=seed_topic_embeddings, verbose=True, calculate_probabilities=False) topics = topic_model.fit_transform(docs)
内容的提问来源于stack exchange,提问作者Helena
相关产品推荐
相关产品推荐

