mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 13:03:55 +00:00
5.0 KiB
5.0 KiB
Документация по классу GetData
Документ актуален для Simple-LLM v1.0 (июль 2025)
Краткое summary: Документ описывает класс 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): Возвращает пару тензоров по индексу
Рекомендации
- Для текстовых данных предварительно токенизируйте текст
- Для больших датасетов используйте GPU (
device='cuda') - Подбирайте
seq_lenв зависимости от задачи
Типовые ошибки и их решения
Ошибка: ValueError при создании датасета
Возможные причины:
seq_len<= 0seq_len>= длины данных
Решение:
- Задайте
seq_len> 0 и < длины данных - Проверьте корректность входных параметров
Применение
- Обучение языковых моделей
- Прогнозирование временных рядов
- Любые задачи, требующие работы с последовательностями
Пример с текстовыми данными
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]