Нейросеть для диалогов. Проблема чтения датасета
Многоуважаемые эксперты, мне в очередной раз требуется ваша помощь! Я опять в упор не понимаю в чем проблема. Подскажите, что мне делать? Вот код:
123456789101112131415161718192021222324252627282930313233343536
def load_data(self):
try:
with open(self.dataset_path, 'r', encoding='utf-8') as file:
data = json.load(file)
print("Данные из файла:", data)
corpus = [item['text'] for item in data if 'text' in item and item['text'].strip()]
print(f"Загружено {len(corpus)} элементов из {self.dataset_path}.") # Количество загруженных элементов
if not corpus:
raise ValueError("Корпус данных пуст. Проверьте файл dataset.json.")
return corpus
except FileNotFoundError:
raise ValueError(f"Файл {self.dataset_path} не найден.")
except json.JSONDecodeError:
raise ValueError("Ошибка декодирования JSON. Проверьте формат файла.")
def prepare_data(self):
# Токенизация корпуса
self.tokenizer.fit_on_texts(self.corpus)
total_words = len(self.tokenizer.word_index) + 1
input_sequences = []
for line in self.corpus:
token_list = self.tokenizer.texts_to_sequences([line])[0]
for i in range(1, len(token_list)):
n_gram_sequence = token_list[:i + 1]
input_sequences.append(n_gram_sequence)
# Паддинг последовательностей
input_sequences = pad_sequences(input_sequences, maxlen=self.max_sequence_length, padding='pre')
self.X, self.y = input_sequences[:, :-1], input_sequences[:, -1]
self.y = np.eye(total_words)[self.y]
Вот мой написанный для теста системы датасет:
1234567891011121314151617181920
{
"dialogues": [
{
"question": "Привет, как дела?",
"answer": "Привет! У меня все хорошо, спасибо. А у тебя?"
},
{
"question": "Что ты знаешь о машинном обучении?",
"answer": "Машинное обучение — это область искусственного интеллекта, которая позволяет системам обучаться на данных."
},
{
"question": "Какой твой любимый язык программирования?",
"answer": "Мне нравится Python, так как он очень удобен для анализа данных и разработки алгоритмов."
},
{
"question": "Расскажи мне о нейронных сетях.",
"answer": "Нейронные сети — это алгоритмы, вдохновленные работой человеческого мозга, которые используются для распознавания шаблонов."
}
]
}
Помогите, пожалуйста.
По дате
По Рейтингу
У вас несоответствие между структурой датасета и кодом, который его читает.
В вашем коде вы пытаетесь извлечь поле 'text' из элементов JSON:
1
corpus = [item['text'] for item in data if 'text' in item and item['text'].strip()]
Но в вашем датасете нет поля 'text'. Вместо этого у вас есть структура:
123456789
{
"dialogues": [
{
"question": "...",
"answer": "..."
},
...
]
}
Вот исправленный вариант функции load_data:
12345678910111213141516171819202122232425
def load_data(self):
try:
with open(self.dataset_path, 'r', encoding='utf-8') as file:
data = json.load(file)
print("Данные из файла:", data)
corpus = []
# Извлекаем вопросы и ответы из структуры "dialogues"
if "dialogues" in data:
for item in data["dialogues"]:
if "question" in item and item["question"].strip():
corpus.append(item["question"])
if "answer" in item and item["answer"].strip():
corpus.append(item["answer"])
print(f"Загружено {len(corpus)} элементов из {self.dataset_path}.")
if not corpus:
raise ValueError("Корпус данных пуст. Проверьте файл dataset.json.")
return corpus
except FileNotFoundError:
raise ValueError(f"Файл {self.dataset_path} не найден.")
except json.JSONDecodeError:
raise ValueError("Ошибка декодирования JSON. Проверьте формат файла.")