我目前正在开发一个使用 Python 构建 AI 聊天机器人的项目,但遇到了一个似乎无法解决的错误。当尝试将我的训练数据转换为 numpy 数组时,我收到以下错误:
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (29, 2) + inhomogeneous part.
这是我的代码的相关部分:
training = []
output_empty = [0] * len(classes)
for document in documents:
bag = []
word_patterns = document[0]
word_patterns = [lematizer.lemmatize(word.lower()) for word in word_patterns]
for word in words:
bag.append(1) if word in word_patterns else bag.append(0)
output_row = list(output_empty)
output_row[classes.index(document[1])] = 1
training.append([bag,output_row])
random.shuffle(training)
training = np.array(training)
train_x = list(training[:, 0])
train_y = list(training[:, 1])
我的训练变量是一个列表列表,其中每个内部列表包含一袋单词和一个输出行。我使用 np.shape(training) 检查了训练列表的维度,它返回 (29,),表明它是一个一维数组。但是,当我尝试将其转换为 numpy 数组时,我遇到了上述错误。
我已经仔细检查了我的培训列表的内容,它的格式似乎正确。每个内部列表包含一个词袋(整数列表)和一个输出行(整数列表),两者在所有条目中都具有一致的长度。
我不确定为什么会遇到此错误或如何解决它。任何见解或建议将不胜感激。谢谢!
代码文件:
https://github.com/GH0STH4CKER/AI_Chatbot/blob/main/training.py
https://github.com/GH0STH4CKER/AI_Chatbot/blob/main/intents.json
运行代码后,“训练”列表中似乎有两种不同形状的列表,一种形状为 29x55(基本上是 29 个长度为 55 的实例),另一种形状为 29x5(29 个长度为 5 的实例)。由于形状不均匀,这会在生成 numpy 数组时产生问题。您可以将这两个列表视为单独的实例,然后解决它。
尝试在代码中进行以下更正:
training_bag = []
training_output_row = []
output_empty = [0] * len(classes)
for document in documents:
bag = []
word_patterns = document[0]
word_patterns = [lematizer.lemmatize(word.lower()) for word in word_patterns]
for word in words:
bag.append(1) if word in word_patterns else bag.append(0)
output_row = list(output_empty)
output_row[classes.index(document[1])] = 1
training_bag.append(bag)
training_output_row.append(output_row)
training_bag = np.array(training_bag)
training_output_row = np.array(training_output_row)
from sklearn.utils import shuffle
train_x, train_y = shuffle(training_bag, training_output_row, random_state=0)