Top.Mail.Ru
Ответы

Нейросеть для диалогов. Проблема чтения датасета

Многоуважаемые эксперты, мне в очередной раз требуется ваша помощь! Я опять в упор не понимаю в чем проблема. Подскажите, что мне делать? Вот код:

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": "Нейронные сети — это алгоритмы, вдохновленные работой человеческого мозга, которые используются для распознавания шаблонов."  
        } 
    ]  
}   

Помогите, пожалуйста.

По дате
По Рейтингу
Аватар пользователя
Оракул
3мес

У вас несоответствие между структурой датасета и кодом, который его читает.

В вашем коде вы пытаетесь извлечь поле '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. Проверьте формат файла.")