Files
simple-llm/doc/get_data_documentation_ru.md
Sergey Penkovsky c56a3e80c9 Реализация класса GetData
- Добавлен класс GetData для работы с последовательными данными
- Реализован функционал:
  * Создание датасета из последовательности
  * Автоматическое формирование пар (input, target)
  * Поддержка CPU/GPU
  * Проверка корректности параметров
- Добавлены тесты для проверки функционала
- Создан пример использования в example/
- Добавлена документация с блок-схемой в doc/
- Обновлен README.md с информацией о новом классе
2025-07-22 17:10:28 +03:00

3.9 KiB
Raw Blame History

Документация по классу GetData

Назначение

Класс GetData предназначен для создания датасетов из последовательных данных для обучения языковых моделей и других задач, работающих с последовательностями.

Основные возможности

  • Преобразование последовательности данных в обучающие пары (input, target)
  • Поддержка различных типов данных (числа, токены)
  • Автоматический сдвиг целевой последовательности
  • Поддержка работы на CPU/GPU
  • Проверка корректности входных параметров

Алгоритм работы

  1. Принимает на вход последовательность данных и длину окна
  2. Скользящим окном проходит по последовательности
  3. Для каждой позиции создает пару:
    • Входная последовательность: data[pos:pos+seq_len]
    • Целевая последовательность: data[pos+1:pos+seq_len+1] (сдвиг на 1 элемент)
  4. Преобразует данные в тензоры PyTorch
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[Конец]

Пример использования

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): Возвращает пару тензоров по индексу

Ошибки

  • ValueError: Если seq_len <= 0 или >= длины данных

Применение

  1. Обучение языковых моделей
  2. Прогнозирование временных рядов
  3. Любые задачи, требующие работы с последовательностями

Рекомендации

  • Для текстовых данных предварительно токенизируйте текст
  • Для больших датасетов используйте GPU (device='cuda')
  • Подбирайте seq_len в зависимости от задачи

Пример с текстовыми данными

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]