mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
- Добавлен класс GetData для работы с последовательными данными - Реализован функционал: * Создание датасета из последовательности * Автоматическое формирование пар (input, target) * Поддержка CPU/GPU * Проверка корректности параметров - Добавлены тесты для проверки функционала - Создан пример использования в example/ - Добавлена документация с блок-схемой в doc/ - Обновлен README.md с информацией о новом классе
3.9 KiB
3.9 KiB
Документация по классу GetData
Назначение
Класс GetData предназначен для создания датасетов из последовательных данных для обучения языковых моделей и других задач, работающих с последовательностями.
Основные возможности
- Преобразование последовательности данных в обучающие пары (input, target)
- Поддержка различных типов данных (числа, токены)
- Автоматический сдвиг целевой последовательности
- Поддержка работы на CPU/GPU
- Проверка корректности входных параметров
Алгоритм работы
- Принимает на вход последовательность данных и длину окна
- Скользящим окном проходит по последовательности
- Для каждой позиции создает пару:
- Входная последовательность:
data[pos:pos+seq_len] - Целевая последовательность:
data[pos+1:pos+seq_len+1](сдвиг на 1 элемент)
- Входная последовательность:
- Преобразует данные в тензоры 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 или >= длины данных
Применение
- Обучение языковых моделей
- Прогнозирование временных рядов
- Любые задачи, требующие работы с последовательностями
Рекомендации
- Для текстовых данных предварительно токенизируйте текст
- Для больших датасетов используйте 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]