Ошибка ValueError машинного обучения Python: » отсутствует в списке [closed]

Я пишу довольно простой чат-бот AI, который принимает жестко запрограммированные входные и выходные данные из файла JSON и определяет, какой выход использовать для данного входа. Однако я получаю ValueError, которое читает

ValueError: 'Greetings' is not in list

Greetings — это тег, который не является ни входом, ни выходом. Тег должен разделять каждую категорию, чтобы было легче узнать, где разместить новые входы и выходы. Код довольно длинный, но, надеюсь, кто-нибудь может сказать мне, где я ошибся (я предполагаю, что это в файле training.py, а не в файле JSON). Вот мой файл JSON:

{"intents": [
    {"tag": "Greetings",
    "inputs": ["hello", "hi", "good morning", "what's up", "greetings", "hey", "how's it going", "howdy", "Hiya", "yo",
    "what's going on", "how's life", "nice to see you", "hola", "hey there"],
    "outputs": ["Hello", "Hi", "Greetings", "Hi, how can I help you?", "Hello, how can I help you?"]
    },

    {"tag": "Goodbyes",
    "inputs": ["goodbye", "see you later", "I'm leaving", "bye", "cao", "see ya", "bye bye", "I've got to go",
    "take it easy", "I'm off", "have a nice day", "take care", "goodnight", "peace", "I gotta go", "cheers",
    "gotta go", "catch you later", "I've got to go", "toodeloo", "hasta la vista", ""],
    "outputs": ["It was nice talking to you!", "Nice chatting with you!", "Cheers!","Bye!","Have a nice day!"]
    }
]}

А это файл training.py:

import random
import json
import pickle
import numpy as np

import nltk
nltk.download('punkt')
from nltk.stem import WordNetLemmatizer

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Dropout

from tensorflow.keras.optimizers import SGD

lemmatizer = WordNetLemmatizer()

intents = json.loads(open('Hero_intents.json').read())

words = []
classes = []
documents = []
ignore_letters = ['?', '!', '.', ',']

for intent in intents['intents']:
    for input in intent['inputs']:
        word_list = nltk.word_tokenize(input)
        words.extend(word_list)
        documents.append((word_list, intent['tag']))
        if intent['tag'] not in classes:
            classes.append(intent['tag'])

words = [lemmatizer.lemmatize(word) for word in words if word not in ignore_letters]
words = sorted(set(words))

classes = sorted(set(words))

pickle.dump(words, open('words.pkl', 'wb'))
pickle.dump(words, open('classes.pkl', 'wb'))

training = []
output_empty = [0] * len(classes)

for document in documents:
    bag = []
    word_patterns = document[0]
    word_patterns = [lemmatizer.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])

model = Sequential()
model.add(Dense(128, input_shape=(len(train_x[0]),), activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(len(train_y[0]), activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss="categorical_crossentropy", optimizer=sgd, metrics=['accuracy'])

model.fit(np.array(train_x), np.array(train_y), epochs=200, batch_size=5, verbose=1)
model.save('Hero_model.model')

print("Done")

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *