Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Збір та Попередня Обробка Даних | Створення та навчання генеративних моделей
Генеративний ШІ

bookЗбір та Попередня Обробка Даних

Навчання генеративних моделей вимагає не лише якісної архітектури та функцій втрат, а й чистих, добре структурованих і різноманітних даних. У цьому розділі представлено високоякісні набори даних для візуальних, текстових і аудіо модальностей, надано докладні методи попередньої обробки, адаптовані для сучасних генеративних пайплайнів, а також розглянуто надійні стратегії розподілу даних із практичними інструментами.

Збір даних

Збір даних для генеративного моделювання залежить від домену, доступності джерел, масштабу та ліцензування. Для текстових і візуальних даних поширеними джерелами є відкриті набори даних, зібраний контент і структуровані репозиторії (наприклад, академічні архіви, соціальні мережі або платформи електронної комерції).

Техніки веб-скрапінгу

Коли готові набори даних недоступні, дані можна збирати з вебу за допомогою інструментів скрапінгу. Веб-скрапінг дозволяє програмно витягувати інформацію з HTML-сторінок. Це потужний підхід до збору реальних, неструктурованих даних, коли API недоступні. Однак скрапінг супроводжується технічними та етичними обов'язками.

Методи скрапінгу зазвичай включають:

  • Відправлення HTTP-запитів для отримання веб-сторінок. Це забезпечує доступ до сирого HTML-вмісту сторінки;
  • Парсинг HTML-вмісту для витягання структурованих даних. Інструменти, такі як BeautifulSoup, перетворюють неструктурований HTML у доступні теги та елементи;
  • Навігація динамічними сторінками за допомогою автоматизації браузера. Для сайтів з великою кількістю JavaScript потрібні інструменти на кшталт Selenium для повного відображення вмісту;
  • Збереження витягнутих даних у зручних форматах, таких як CSV або JSON. Це забезпечує сумісність із подальшими етапами попередньої обробки та навчання моделей.

Нижче наведено дві поширені стратегії скрапінгу:

Скрапінг тексту за допомогою BeautifulSoup

BeautifulSoup — це бібліотека Python, яка використовується для парсингу статичних HTML-сторінок.

1234567891011
import requests from bs4 import BeautifulSoup url = "https://docs.python.org/3/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # Extract paragraphs paragraphs = [p.text for p in soup.find_all('p')] text = "\n".join(paragraphs) print(text)
copy

Збір зображень за допомогою Selenium

Selenium автоматизує браузер для збору контенту зі сторінок, що рендеряться за допомогою JavaScript.

123456789101112131415161718
# INSTALL SELENIUM # THIS CODE DOWNLOAD IMAGES (I NEED JUST VIZUALIZATION) from selenium import webdriver import time import urllib.request url = "https://example.com/gallery" driver = webdriver.Chrome() driver.get(url) time.sleep(2) images = driver.find_elements("tag name", "img") for idx, img in enumerate(images): src = img.get_attribute('src') if src: urllib.request.urlretrieve(src, f"image_{idx}.jpg") driver.quit()
copy
Note
Примітка

Завжди перевіряйте умови використання вебсайту перед збором даних. Використовуйте помірні частоти запитів і дотримуйтеся robots.txt. Неправильний збір даних може призвести до блокування IP або юридичних наслідків.

У контексті GenAI веб-скрапінг часто є підготовчим етапом для створення датасетів попереднього навчання, особливо для доменно-специфічних або малоресурсних мов. Інструменти на кшталт Scrapy, playwright або browserless API також часто використовуються для задач великого масштабу.

Техніки попередньої обробки

Попередня обробка даних повинна враховувати модальність, тип моделі та вимоги до якості. Для генеративного моделювання промислового рівня пайплайни часто містять доменно-орієнтовані трансформації, адаптацію роздільної здатності та фільтрацію на основі змісту.

Попередня обробка зображень

  • Зміна розміру: приведення роздільної здатності датасету у відповідність до вхідних даних моделі (наприклад, 64x64 для ранніх GAN, 512x512 для дифузійних моделей);
  • Нормалізація: масштабування значень пікселів до стандартного діапазону, зазвичай [−1, 1] або [0, 1];
  • Обробка колірного простору: забезпечення узгодженості кольорів — перетворення у RGB або відтінки сірого. Для умовної генерації зберігати альфа-канали, якщо вони присутні;
  • Аугментація даних: внесення варіацій під час навчання за допомогою трансформацій.

Попередня обробка тексту

  • Очищення: видалення спеціальних символів, зайвих пробілів і шуму;
12345
import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
copy
  1. r"[^\w\s]":

    • \w: відповідає будь-якому алфавітно-цифровому символу (літери A-Z, a-z, цифри 0-9) та підкресленню _;
    • \s: відповідає будь-якому пробільному символу (пробіли, табуляції, переведення рядка);
    • [^...]: заперечений клас символів — відповідає всьому, що не вказано всередині;
    • Значення: цей шаблон відповідає всім символам, окрім літер, цифр, підкреслення та пробілів. Тобто, він видаляє розділові знаки та символи (наприклад, , ! тощо).
  2. r"\s+":

    • \s: відповідає будь-якому пробільному символу;
    • +: відповідає одному або більше попередньому токену;
    • Значення: цей шаблон замінює декілька послідовних пробільних символів на один пробіл.
  3. .strip(): видаляє початкові та кінцеві пробіли з остаточно очищеного рядка.

Детальніше про синтаксис RegEx дивіться у документації.

  • Перетворення до нижнього регістру: уніфікація тексту до нижнього регістру для послідовності. Застосовується вибірково, оскільки моделі, такі як BERT, можуть бути чутливими/нечутливими до регістру;
12
text = "This Is A Sentence." print(text.lower())
copy
  • Токенізація: розділення тексту на токени або підслова для моделювання;
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
copy
  • Стемінг/лематизація: рідко використовується в пайплайнах глибокого навчання, але застосовується в традиційній обробці природної мови або фільтрах попереднього навчання;
1234
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
copy
  • Доповнення/Обрізання: див. приклад вище з max_length.
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
copy
Note
Примітка

Створення модульних конвеєрів попередньої обробки з урахуванням відтворюваності. Використання DVC, wandb artifacts або huggingface/datasets зі стрімінгом і кешуванням.

Стратегії розподілу даних

Ефективний розподіл даних є ключовим для узагальнення, особливо в генеративному моделюванні, де часто спостерігається перенавчання на модах або запам'ятовування.

Розподіл на навчальну, валідаційну та тестову вибірки

  • Звичайні пропорції: 80/10/10 або 70/15/15 залежно від розміру датасету;
  • Контент-орієнтований розподіл: стратифікація за класом (зображення), темою (текст).
  • Використання:
    • Навчання: забезпечує оптимізацію моделі;
    • Валідація: використовується для збереження чекпойнтів, ранньої зупинки та налаштування метрик (наприклад, FID);
    • Тест: повністю відкладений до фінального тестування моделі.

Приклад використання train_test_split:

Для наборів даних Hugging Face:

Крос-валідація та бутстрепінг

  • Для доменів з обмеженими або відсутніми ресурсами використовується K-кратна крос-валідація (наприклад, K=5 або 10);
  • У дифузійних моделях застосовується бутстрепінг FID/LPIPS для оцінки стабільності генерації;
  • Візуальна або перцептивна інспекція повинна супроводжувати числову валідацію.

Приклад налаштування K-кратної крос-валідації:

Поширені набори даних

Вибір відповідного набору даних залежить від модальності, масштабу даних, ліцензування та конкретної генеративної мети (наприклад, безумовна генерація, умовний синтез або перенесення стилю).

Набори даних для комп'ютерного зору

  • CIFAR-10: 60 000 низькороздільних 32×32 RGB-зображень у 10 класах. Легкий, ідеально підходить для швидкого прототипування, юніт-тестування та бенчмаркінгу тренувальних циклів для GAN зображень;
  • CelebA: понад 200 тис. вирівняних облич знаменитостей з анотаціями по 40 бінарних атрибутах. Часто використовується для генерації з урахуванням атрибутів, редагування облич із збереженням ідентичності та моделей енкодер-декодер;
  • LSUN: масштабний набір сцен із мільйонами зображень у категоріях, таких як спальні, церкви та їдальні. Необхідний для синтезу високої роздільної здатності та прогресивного навчання GAN;
  • ImageNet: понад 14 млн якісних зображень із мітками у 20 тис. класах. Використовується переважно для трансферного навчання, попереднього навчання дифузійних моделей та як базовий набір для генерації зі стилізацією.

Набори текстових даних

  • WikiText: чисті статті з Вікіпедії (WikiText-2: 2 млн токенів, WikiText-103: понад 100 млн). Цінний для оцінки мовного моделювання та донавчання моделей лише з декодером, таких як GPT;
  • BookCorpus: понад 11 000 безкоштовних романів. Критично важливий для генерації наративного стилю, трансформерів із довгим контекстом і попереднього навчання базових моделей (наприклад, BERT, GPT-2);
  • Common Crawl / C4: багатомовні веб-дані петабайтного масштабу. C4 — це дедуплікований, відфільтрований варіант, підготовлений для якісного навчання мовних моделей (наприклад, T5);
  • The Pile: 825 ГБ різноманітних даних (книги, ArXiv, StackExchange, GitHub тощо). Створений для навчання моделей GPT-рівня, конкурентних із LLM від OpenAI.

Підсумок

  • Вибір наборів даних на основі якості, ліцензування, масштабу та відповідності генеративним цілям;
  • Застосування конвеєрів попередньої обробки, адаптованих до кожної модальності, із використанням надійних, промислових інструментів;
  • Забезпечення суворих стратегій розподілу для підтримки відтворюваності, уникнення витоку та забезпечення справедливої оцінки.

1. Чому якість даних важливіша за кількість при навчанні генеративних моделей ШІ?

2. Яка одна з поширених проблем при зборі різноманітних даних для навчання генеративних моделей?

3. Яка основна мета аугментації даних у контексті навчання генеративного ШІ?

question mark

Чому якість даних важливіша за кількість при навчанні генеративних моделей ШІ?

Select the correct answer

question mark

Яка одна з поширених проблем при зборі різноманітних даних для навчання генеративних моделей?

Select the correct answer

question mark

Яка основна мета аугментації даних у контексті навчання генеративного ШІ?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

What are some best practices for web scraping in generative AI projects?

Can you explain more about data augmentation techniques for images?

How do I choose the right dataset for my generative model?

Awesome!

Completion rate improved to 4.76

bookЗбір та Попередня Обробка Даних

Свайпніть щоб показати меню

Навчання генеративних моделей вимагає не лише якісної архітектури та функцій втрат, а й чистих, добре структурованих і різноманітних даних. У цьому розділі представлено високоякісні набори даних для візуальних, текстових і аудіо модальностей, надано докладні методи попередньої обробки, адаптовані для сучасних генеративних пайплайнів, а також розглянуто надійні стратегії розподілу даних із практичними інструментами.

Збір даних

Збір даних для генеративного моделювання залежить від домену, доступності джерел, масштабу та ліцензування. Для текстових і візуальних даних поширеними джерелами є відкриті набори даних, зібраний контент і структуровані репозиторії (наприклад, академічні архіви, соціальні мережі або платформи електронної комерції).

Техніки веб-скрапінгу

Коли готові набори даних недоступні, дані можна збирати з вебу за допомогою інструментів скрапінгу. Веб-скрапінг дозволяє програмно витягувати інформацію з HTML-сторінок. Це потужний підхід до збору реальних, неструктурованих даних, коли API недоступні. Однак скрапінг супроводжується технічними та етичними обов'язками.

Методи скрапінгу зазвичай включають:

  • Відправлення HTTP-запитів для отримання веб-сторінок. Це забезпечує доступ до сирого HTML-вмісту сторінки;
  • Парсинг HTML-вмісту для витягання структурованих даних. Інструменти, такі як BeautifulSoup, перетворюють неструктурований HTML у доступні теги та елементи;
  • Навігація динамічними сторінками за допомогою автоматизації браузера. Для сайтів з великою кількістю JavaScript потрібні інструменти на кшталт Selenium для повного відображення вмісту;
  • Збереження витягнутих даних у зручних форматах, таких як CSV або JSON. Це забезпечує сумісність із подальшими етапами попередньої обробки та навчання моделей.

Нижче наведено дві поширені стратегії скрапінгу:

Скрапінг тексту за допомогою BeautifulSoup

BeautifulSoup — це бібліотека Python, яка використовується для парсингу статичних HTML-сторінок.

1234567891011
import requests from bs4 import BeautifulSoup url = "https://docs.python.org/3/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # Extract paragraphs paragraphs = [p.text for p in soup.find_all('p')] text = "\n".join(paragraphs) print(text)
copy

Збір зображень за допомогою Selenium

Selenium автоматизує браузер для збору контенту зі сторінок, що рендеряться за допомогою JavaScript.

123456789101112131415161718
# INSTALL SELENIUM # THIS CODE DOWNLOAD IMAGES (I NEED JUST VIZUALIZATION) from selenium import webdriver import time import urllib.request url = "https://example.com/gallery" driver = webdriver.Chrome() driver.get(url) time.sleep(2) images = driver.find_elements("tag name", "img") for idx, img in enumerate(images): src = img.get_attribute('src') if src: urllib.request.urlretrieve(src, f"image_{idx}.jpg") driver.quit()
copy
Note
Примітка

Завжди перевіряйте умови використання вебсайту перед збором даних. Використовуйте помірні частоти запитів і дотримуйтеся robots.txt. Неправильний збір даних може призвести до блокування IP або юридичних наслідків.

У контексті GenAI веб-скрапінг часто є підготовчим етапом для створення датасетів попереднього навчання, особливо для доменно-специфічних або малоресурсних мов. Інструменти на кшталт Scrapy, playwright або browserless API також часто використовуються для задач великого масштабу.

Техніки попередньої обробки

Попередня обробка даних повинна враховувати модальність, тип моделі та вимоги до якості. Для генеративного моделювання промислового рівня пайплайни часто містять доменно-орієнтовані трансформації, адаптацію роздільної здатності та фільтрацію на основі змісту.

Попередня обробка зображень

  • Зміна розміру: приведення роздільної здатності датасету у відповідність до вхідних даних моделі (наприклад, 64x64 для ранніх GAN, 512x512 для дифузійних моделей);
  • Нормалізація: масштабування значень пікселів до стандартного діапазону, зазвичай [−1, 1] або [0, 1];
  • Обробка колірного простору: забезпечення узгодженості кольорів — перетворення у RGB або відтінки сірого. Для умовної генерації зберігати альфа-канали, якщо вони присутні;
  • Аугментація даних: внесення варіацій під час навчання за допомогою трансформацій.

Попередня обробка тексту

  • Очищення: видалення спеціальних символів, зайвих пробілів і шуму;
12345
import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
copy
  1. r"[^\w\s]":

    • \w: відповідає будь-якому алфавітно-цифровому символу (літери A-Z, a-z, цифри 0-9) та підкресленню _;
    • \s: відповідає будь-якому пробільному символу (пробіли, табуляції, переведення рядка);
    • [^...]: заперечений клас символів — відповідає всьому, що не вказано всередині;
    • Значення: цей шаблон відповідає всім символам, окрім літер, цифр, підкреслення та пробілів. Тобто, він видаляє розділові знаки та символи (наприклад, , ! тощо).
  2. r"\s+":

    • \s: відповідає будь-якому пробільному символу;
    • +: відповідає одному або більше попередньому токену;
    • Значення: цей шаблон замінює декілька послідовних пробільних символів на один пробіл.
  3. .strip(): видаляє початкові та кінцеві пробіли з остаточно очищеного рядка.

Детальніше про синтаксис RegEx дивіться у документації.

  • Перетворення до нижнього регістру: уніфікація тексту до нижнього регістру для послідовності. Застосовується вибірково, оскільки моделі, такі як BERT, можуть бути чутливими/нечутливими до регістру;
12
text = "This Is A Sentence." print(text.lower())
copy
  • Токенізація: розділення тексту на токени або підслова для моделювання;
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
copy
  • Стемінг/лематизація: рідко використовується в пайплайнах глибокого навчання, але застосовується в традиційній обробці природної мови або фільтрах попереднього навчання;
1234
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
copy
  • Доповнення/Обрізання: див. приклад вище з max_length.
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
copy
Note
Примітка

Створення модульних конвеєрів попередньої обробки з урахуванням відтворюваності. Використання DVC, wandb artifacts або huggingface/datasets зі стрімінгом і кешуванням.

Стратегії розподілу даних

Ефективний розподіл даних є ключовим для узагальнення, особливо в генеративному моделюванні, де часто спостерігається перенавчання на модах або запам'ятовування.

Розподіл на навчальну, валідаційну та тестову вибірки

  • Звичайні пропорції: 80/10/10 або 70/15/15 залежно від розміру датасету;
  • Контент-орієнтований розподіл: стратифікація за класом (зображення), темою (текст).
  • Використання:
    • Навчання: забезпечує оптимізацію моделі;
    • Валідація: використовується для збереження чекпойнтів, ранньої зупинки та налаштування метрик (наприклад, FID);
    • Тест: повністю відкладений до фінального тестування моделі.

Приклад використання train_test_split:

Для наборів даних Hugging Face:

Крос-валідація та бутстрепінг

  • Для доменів з обмеженими або відсутніми ресурсами використовується K-кратна крос-валідація (наприклад, K=5 або 10);
  • У дифузійних моделях застосовується бутстрепінг FID/LPIPS для оцінки стабільності генерації;
  • Візуальна або перцептивна інспекція повинна супроводжувати числову валідацію.

Приклад налаштування K-кратної крос-валідації:

Поширені набори даних

Вибір відповідного набору даних залежить від модальності, масштабу даних, ліцензування та конкретної генеративної мети (наприклад, безумовна генерація, умовний синтез або перенесення стилю).

Набори даних для комп'ютерного зору

  • CIFAR-10: 60 000 низькороздільних 32×32 RGB-зображень у 10 класах. Легкий, ідеально підходить для швидкого прототипування, юніт-тестування та бенчмаркінгу тренувальних циклів для GAN зображень;
  • CelebA: понад 200 тис. вирівняних облич знаменитостей з анотаціями по 40 бінарних атрибутах. Часто використовується для генерації з урахуванням атрибутів, редагування облич із збереженням ідентичності та моделей енкодер-декодер;
  • LSUN: масштабний набір сцен із мільйонами зображень у категоріях, таких як спальні, церкви та їдальні. Необхідний для синтезу високої роздільної здатності та прогресивного навчання GAN;
  • ImageNet: понад 14 млн якісних зображень із мітками у 20 тис. класах. Використовується переважно для трансферного навчання, попереднього навчання дифузійних моделей та як базовий набір для генерації зі стилізацією.

Набори текстових даних

  • WikiText: чисті статті з Вікіпедії (WikiText-2: 2 млн токенів, WikiText-103: понад 100 млн). Цінний для оцінки мовного моделювання та донавчання моделей лише з декодером, таких як GPT;
  • BookCorpus: понад 11 000 безкоштовних романів. Критично важливий для генерації наративного стилю, трансформерів із довгим контекстом і попереднього навчання базових моделей (наприклад, BERT, GPT-2);
  • Common Crawl / C4: багатомовні веб-дані петабайтного масштабу. C4 — це дедуплікований, відфільтрований варіант, підготовлений для якісного навчання мовних моделей (наприклад, T5);
  • The Pile: 825 ГБ різноманітних даних (книги, ArXiv, StackExchange, GitHub тощо). Створений для навчання моделей GPT-рівня, конкурентних із LLM від OpenAI.

Підсумок

  • Вибір наборів даних на основі якості, ліцензування, масштабу та відповідності генеративним цілям;
  • Застосування конвеєрів попередньої обробки, адаптованих до кожної модальності, із використанням надійних, промислових інструментів;
  • Забезпечення суворих стратегій розподілу для підтримки відтворюваності, уникнення витоку та забезпечення справедливої оцінки.

1. Чому якість даних важливіша за кількість при навчанні генеративних моделей ШІ?

2. Яка одна з поширених проблем при зборі різноманітних даних для навчання генеративних моделей?

3. Яка основна мета аугментації даних у контексті навчання генеративного ШІ?

question mark

Чому якість даних важливіша за кількість при навчанні генеративних моделей ШІ?

Select the correct answer

question mark

Яка одна з поширених проблем при зборі різноманітних даних для навчання генеративних моделей?

Select the correct answer

question mark

Яка основна мета аугментації даних у контексті навчання генеративного ШІ?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1
some-alt