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

NLP聊天机器人训练报错:ValueError数组形状不均匀问题

报错原因分析

这个ValueError的核心原因是你试图将形状不均匀的列表转换为NumPy数组。具体来说,training列表中的每个元素是[bag, cikti_sira],但其中部分bag或cikti_sira的长度不一致,导致NumPy无法创建规整的二维数组(报错提示检测到形状为(20, 2) + 不均匀部分,说明前两维是20行2列,但内部元素长度不统一)。

大概率是bag的长度出现了不一致:bag通过遍历kelimeler生成,如果kelimeler在循环过程中被修改(比如动态添加/删除元素),或是本身是长度不固定的集合,就会导致不同belge生成的bag长度不一样。

解决方法

方法1:跳过将整个training转为NumPy数组的步骤(推荐)

你的后续代码仅需从training中拆分出train_x和train_y,完全不需要先把整个列表转成NumPy数组。直接在列表层面拆分即可,避免不均匀形状的问题:

修改代码如下:

random.shuffle(training)
# 移除 training = np.array(training) 这一行
train_x = [item[0] for item in training]
train_y = [item[1] for item in training]

后续的神经网络训练代码无需改动,model.fit会自动将列表处理为规整的NumPy数组。

方法2:确保所有bag和cikti_sira长度统一

如果你一定要保留将training转为NumPy数组的步骤,需先排查并修复长度不一致的问题:

  1. 检查kelimeler是否是固定长度的词汇表:确保它在循环开始前就已预处理完成,循环过程中不会被修改。
  2. 在循环中添加长度校验,定位异常数据:
for belge in belgeler:
    bag = []
    kelime_patternleri = belge[0]
    kelime_patternleri = [ayristirici.lemmatize(kelime.lower()) for kelime in kelime_patternleri]
    for kelime in kelimeler:
        bag.append(1) if kelime in kelime_patternleri else bag.append(0)

    cikti_sira = list(bos_cikti)
    cikti_sira[siniflar.index(belge[1])] = 1
    
    # 添加长度校验,定位异常数据
    assert len(bag) == len(kelimeler), f"Bag长度不匹配,问题数据:{belge}"
    assert len(cikti_sira) == len(siniflar), f"Cikti_sira长度不匹配,问题数据:{belge}"
    
    training.append([bag, cikti_sira])

运行后如果触发断言错误,就能定位到导致长度不一致的具体belge数据,进而修复数据或预处理逻辑。

内容的提问来源于stack exchange,提问作者Elvan Ersöz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:01:23