基于MPNET的三类情感分析:Embedding与质心生成报错及标签疑问
问题分析与解决办法
首先明确:用标签分组计算对应类别的质心是完全正确的思路,你遇到的KeyError不是因为不该用标签,而是代码里的索引匹配或数据类型出了问题,下面说具体原因和修复方案:
最常见的原因:
sentence_embeddings_mpnet(PyTorch张量)的索引是位置索引(0、1、2...),但train_df['label'] == label生成的布尔Series用的是train_df的原始索引(比如如果你的df是筛选过的,索引可能不是连续的0开始),两者索引体系不匹配,直接用布尔Series索引张量就会触发KeyError。修复代码很简单,把布尔Series转成numpy数组即可:
for label in [-1, 0, 1]: mask = train_df['label'] == label # 用.values提取numpy布尔数组,匹配张量的位置索引 centroid = sentence_embeddings_mpnet[mask.values].mean(dim=0)另一个可能:train_df里的标签数据类型和你遍历的整数
[-1,0,1]不匹配。比如df里的标签是字符串类型(比如"-1"、"0"),但你用整数去匹配,会导致mask全为False,后续操作也可能引发异常。这种情况下,先把df的标签转成整数:train_df['label'] = train_df['label'].astype(int)最后确认:train_df的行数必须和
sentence_embeddings_mpnet的样本数完全一致,保证每个文本对应一个embedding,顺序完全对应,否则筛选出来的embedding会和标签不匹配。
内容的提问来源于stack exchange,提问作者snaikkk
相关产品推荐
相关产品推荐

