# Документация по классу GetData > **Документ актуален для Simple-LLM v1.0 (июль 2025)** --- **Краткое summary:** Документ описывает класс GetData для создания датасетов из последовательных данных. Включает алгоритм, параметры, примеры, рекомендации и типовые ошибки. --- **Структура документа:** - Назначение - Основные возможности - Алгоритм работы - Пример использования - Параметры класса - Методы - Рекомендации - Типовые ошибки и их решения - Применение - Пример с текстовыми данными --- ## Назначение Класс `GetData` предназначен для создания датасетов из последовательных данных для обучения языковых моделей и других задач, работающих с последовательностями. ## Основные возможности - Преобразование последовательности данных в обучающие пары (input, target) - Поддержка различных типов данных (числа, токены) - Автоматический сдвиг целевой последовательности - Поддержка работы на CPU/GPU - Проверка корректности входных параметров ## Алгоритм работы 1. Принимает на вход последовательность данных и длину окна 2. Скользящим окном проходит по последовательности 3. Для каждой позиции создает пару: - Входная последовательность: `data[pos:pos+seq_len]` - Целевая последовательность: `data[pos+1:pos+seq_len+1]` (сдвиг на 1 элемент) 4. Преобразует данные в тензоры PyTorch ```mermaid flowchart TD A[Начало] --> B[Проверка параметров] B -->|seq_len <= 0| C[Ошибка: отрицательная длина] B -->|seq_len >= len(data)| D[Ошибка: слишком длинное окно] B -->|Параметры верны| E[Инициализация датасета] E --> F[Для каждого индекса i от 0 до len(data)-seq_len-1] F --> G[Входной тензор: data[i:i+seq_len]] G --> H[Целевой тензор: data[i+1:i+seq_len+1]] H --> I[Преобразование в тензоры PyTorch] I --> J[Возврат пары тензоров] J --> F F -->|Все индексы обработаны| K[Конец] ``` ## Пример использования ```python from simple_llm.data.get_data import GetData data = list(range(10)) # Последовательность 0-9 seq_len = 3 dataset = GetData(data=data, seq_len=seq_len) # Получение первого примера x, y = dataset[0] print(f"Вход: {x.tolist()} → Цель: {y.tolist()}") # Вывод: Вход: [0, 1, 2] → Цель: [1, 2, 3] ``` ## Параметры класса - `data` (list): Входная последовательность данных - `seq_len` (int): Длина окна последовательности - `device` (str): Устройство для тензоров ('cpu' или 'cuda') ## Методы - `__len__()`: Возвращает количество обучающих примеров - `__getitem__(idx)`: Возвращает пару тензоров по индексу ## Рекомендации - Для текстовых данных предварительно токенизируйте текст - Для больших датасетов используйте GPU (`device='cuda'`) - Подбирайте `seq_len` в зависимости от задачи --- ## Типовые ошибки и их решения ### Ошибка: ValueError при создании датасета **Возможные причины:** - `seq_len` <= 0 - `seq_len` >= длины данных **Решение:** - Задайте `seq_len` > 0 и < длины данных - Проверьте корректность входных параметров --- ## Применение 1. Обучение языковых моделей 2. Прогнозирование временных рядов 3. Любые задачи, требующие работы с последовательностями ## Пример с текстовыми данными ```python text_tokens = [10, 20, 30, 40] # Токенизированный текст dataset = GetData(text_tokens, seq_len=2) x, y = dataset[1] print(f"Вход: {x.tolist()} → Цель: {y.tolist()}") # Вывод: Вход: [20, 30] → Цель: [30, 40] ```