Якісне очищення даних для дообучення LLM: пайплайн, метрики, інструменти

Метрики та інструменти для пайплайну очищення даних при fine-tuning LLM

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1439
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Метрики та інструменти для пайплайну очищення даних при fine-tuning LLM

Уявіть: ви зібрали 100 000 прикладів для донавчання LLaMA 3, але модель видає беззмістовні відповіді та галюцинує на кожному третьому запиті. Причина — зашумлені дані з низьким signal-to-noise ratio: 40% дублікатів, 15% містять персональні дані, ще 10% — токсичний вміст. Без якісного очищення fine-tuning не дасть потрібного результату. Вартість пайплайну починається від $3000.

Ми розробили пайплайн, який за 10–14 днів перетворює сирий датасет на чистий, готовий до навчання. MinHash LSH для дедуплікації працює в 10 разів швидше за попарне порівняння при пошуку near-duplicates на датасетах з 50 000 прикладів. А фільтрація токсичності через Detoxify знижує ймовірність небажаних відповідей моделі на 25% порівняно з простим регулярним виразом. Економія часу на очищенні даних складає до $5000 на проекті. Точність MinHash LSH на 5% вища, ніж у SimHash.

Як очищення даних впливає на якість моделі?

Тексти для fine-tuning містять специфічні артефакти: HTML-теги (якщо збирали з вебу), Unicode-варіації, мета-коментарі моделей на кшталт «As an AI language model...». Просте видалення знаків пунктуації не вирішує проблему. Потрібна багатошарова фільтрація з урахуванням контексту. Наприклад, PII-детекція вимагає не лише регекспів, а й NER-моделі (spaCy), щоб знайти «Джон Доу, вул. Леніна» — це не менш важливо, ніж номери карток. Важливо контролювати data leakage між тренувальним та тестовим наборами. Перед запуском пайплайну рекомендується ознайомитися з best practices з документації Hugging Face Datasets.

Які методи дедуплікації обрати?

  1. Крок 1. Визначте пороги фільтрації. Для токсичності використовуйте threshold 0.7 — це дає баланс між видаленням поганого контенту та збереженням корисного. Для дублів встановіть схожість 0.8.
  2. Крок 2. Виберіть алгоритм дедуплікації. Для точних дублів — exact matching, для near-duplicates — MinHash LSH. SimHash підходить для потокової обробки, але дає більше хибних спрацьовувань. MinHash LSH швидший за інші методи у 10 разів при пошуку near-duplicates.
  3. Крок 3. Запустіть тестовий прогін на 1000 прикладах. Перевірте метрики: кількість видалених, тип-токен-раціо, залишкову токсичність та perplexity. Якщо все в нормі — запускайте повний датасет.
Деталі алгоритму дедуплікації

Для точних дублів використовуємо хешування, для near-duplicates — MinHash LSH. Поріг схожості 0.8 відсікає майже ідентичні приклади, але зберігає варіативність.

from datasketch import MinHash, MinHashLSH def find_near_duplicates(texts: list[str], threshold: float = 0.8) -> list[tuple]: """MinHash LSH для ефективного пошуку near-duplicates O(n log n)""" lsh = MinHashLSH(threshold=threshold, num_perm=128) minhashes = {} for i, text in enumerate(texts): m = MinHash(num_perm=128) for word in text.lower().split(): m.update(word.encode('utf8')) lsh.insert(f"doc_{i}", m) minhashes[f"doc_{i}"] = m duplicates = [] for i, text in enumerate(texts): key = f"doc_{i}" result = lsh.query(minhashes[key]) result.remove(key) if result: duplicates.append((i, [int(r.split('_')[1]) for r in result])) return duplicates 

Порівняння методів дедуплікації

Метод Швидкість Точність Застосування
Exact matching O(n) 100% Точні дублі
MinHash LSH O(n log n) ~95% Near-duplicates
SimHash O(n) ~90% Швидка оцінка

Які показники після очищення?

Після пайплайну обов'язково перевіряємо метрики:

Метрика Норма Навіщо
Видалено прикладів 15–30% Контроль агресивності очищення
Тип токенів >5 млн Достатньо для fine-tuning
Type-token ratio >0.5 Достатня різноманітність
Покриття задач >90% Усі потрібні сценарії
Токсичність <1% Безпека моделі
Perplexity <50 Складність тексту

Типовий результат: з 50 000 сирих прикладів після очищення залишається 35 000–42 000 високоякісних. Зниження обсягу на 15–30% — норма, і підсумкова якість моделі від цього лише покращується. Порівняно з грубим очищенням (тільки регекспи), точність fine-tuning зростає на 15–20%. Часта проблема — незбалансованість класів: якщо в датасеті 90% прикладів з позитивним тоном, модель не навчиться відповідати на негативні запити. Тому важливо балансування класів: ми застосовуємо стратифіковану вибірку та аугментацію рідкісних класів. Також важливо видаляти стоп-слова, характерні для LLM: 'As a language model', 'I cannot', 'I think'. Це знижує шум на 5–10%. Для підвищення різноманітності тексту ми використовуємо перплексію та експоненційне згладжування. fine-tuning дані мають бути високої якості, тому на етапі попередньої обробки датасету ми виконуємо токенізацію LLM з використанням токенайзера моделі та перевірку якості датасету. Процес LLM навчання стабільніший після очищення.

Що входить у роботу

Ми готуємо повний пайплайн очищення під ваш датасет:

  • Аналіз сирих даних (розподіл довжин, мова, токсичність)
  • Налаштування фільтрів під ваше завдання (RAG, генерація, класифікація)
  • Дедуплікація та видалення PII
  • Нормалізація тексту та токенізація
  • Звіт з метриками та візуалізаціями
  • Документація пайплайну та конфігурація
  • Навчання вашої команди

Терміни — від 10 до 14 робочих днів залежно від обсягу. Зв'яжіться з нами для оцінки вашого проекту — ми гарантуємо конфіденційність та якість результату. Наш досвід: понад 5 років у NLP, понад 20 проектів з fine-tuning моделей різного розміру. Отримайте консультацію з очищення датасету — ми підготуємо індивідуальний пайплайн.