使用SentenceTransformer生成词向量报错RuntimeError: stack expects a non-empty TensorList
报错根因
RuntimeError: stack expects a non-empty TensorList报错的核心原因是 传入encode方法的fifteen_percent_list是空列表。sentence_transformers的encode方法处理空输入时,生成的嵌入张量列表为空,调用torch.stack拼接空列表就会触发该错误。
第二个embeddings2生成流程正常,是因为rest_of_queries_list取了前10000条有效数据,不存在空输入问题。
排查步骤
在调用encode前新增校验代码确认输入状态:
# 打印列表长度和前5个元素,确认是否有有效内容 print(len(fifteen_percent_list), fifteen_percent_list[:5])
如输出长度为0,重点检查两处问题:
- 上游
fifteen_percent(你的代码里拼写为fiften_percent,存在少写一个e的笔误,可能拿了未赋值的空变量)的筛选逻辑,是不是过滤条件过严导致无符合要求的数据 - 列表转换逻辑是否异常,比如源变量本身就是空迭代对象
修复方案
from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('distilbert-base-nli-stsb-mean-tokens') # 修正变量名拼写,同时增加非空校验 fifteen_percent_list = list(fifteen_percent) if not fifteen_percent_list: raise ValueError("fifteen_percent无有效数据,请检查上游筛选逻辑") embeddings1 = model.encode(fifteen_percent_list, convert_to_tensor=True) rest_of_queries_list = list(set(rest_of_queries))[:10000] embeddings2 = model.encode(rest_of_queries_list, convert_to_tensor=True)
内容的提问来源于stack exchange,提问作者theoseo
相关产品推荐
相关产品推荐

