Tworzenie zbioru danych do dostrajania z sieci: od URL-i do JSONL

Dobry zbiór do dostrajania to 90% danych. Oto proces od surowych URL-i do czystego JSONL — pozyskiwanie na dużą skalę, deduplikacja, filtry licencyjne i format czatu, którego oczekują trenerzy.

Dostrajanie jest tak dobre, jak dane, które mu dostarczasz, a najtrudniejszą częścią dostrajania prawie nigdy nie jest sam proces treningowy — to budowanie czystego zbioru danych. Sieć jest najbogatszym źródłem tych danych, ale surowe strony są nieuporządkowane, zduplikowane, nieoznakowane i prawnie nierówne. Ten przewodnik to proces od URL-i do gotowego do treningu JSONL: ile danych faktycznie potrzebujesz, jak je pozyskiwać na dużą skalę, jak je czyścić i deduplikować, jak radzić sobie z licencjonowaniem i jak formatować je w strukturze czatu, której oczekują trenerzy. Zakłada, że tworzysz instrukcję lub czat do dostrajania z publicznych treści internetowych.

Ile danych faktycznie potrzebujesz?

Zacznij od realistycznych celów, aby nie zbudować za dużo lub za mało. Praktyczne minimum dla dostrajania, które daje rozsądne wyniki, to około 100 wierszy; dla solidnej wydajności zazwyczaj chcesz mieć ponad 1 000. Więcej zwykle pomaga, ale tylko jeśli jest czyste — tysiąc dobrze oznakowanych przykładów jest lepsze niż dziesięć tysięcy hałaśliwych. Dla odniesienia, klasyczny zbiór danych Alpaca zawierał 52 000 par instrukcja/odpowiedź, wygenerowanych przez wywołanie silniejszego modelu. A jeśli używasz dużego modelu do generowania syntetycznych przykładów, zasil go co najmniej dziesięcioma ręcznie napisanymi przykładami, aby nauczył się dokładnej struktury i tonu, zanim wygeneruje więcej.

Pozyskiwanie: crawl do czystego markdown

Celem na etapie pozyskiwania jest czysty tekst, a nie surowy HTML. Wiersz do dostrajania potrzebuje istoty strony — artykułu, dokumentacji, Q&A — bez pasków nawigacyjnych, banerów cookie i znaczników reklam, które zanieczyszczają naiwny scraping. Dlatego przeszukuj docelowe strony i konwertuj je na markdown podczas wczytywania, co usuwa szablony, zachowując strukturę jak nagłówki i listy. Przy jakiejkolwiek realnej objętości napotkasz limity szybkości i blokady IP, więc kieruj crawl przez rotującą pulę. Scraper API, który zwraca bezpośrednio markdown, wykonuje oba zadania — czysty wynik i odporność na blokady — w jednym wywołaniu, dlatego omawiamy go w naszym przewodniku karmienia LLM świeżymi danymi z sieci.

# Sketch: crawl target URLs to clean markdown, ready for shaping into rows.
import requests

API = "https://api.quantumproxies.io/scrape"   # returns markdown, handles rotation

def fetch_markdown(url):
    r = requests.get(API, params={"url": url, "format": "markdown"},
                     headers={"Authorization": "Bearer YOUR_KEY"}, timeout=60)
    return r.json()["markdown"]

docs = [fetch_markdown(u) for u in seed_urls]   # clean text, no boilerplate
Schemat przepływu od URL-i do zbioru danych do dostrajania: źródło do czystego markdown, czyszczenie i deduplikacja, formatowanie jako wiadomości JSONL, następnie karta zbioru danych i podział na trening/ewaluację
Model widzi tylko twój zbiór danych, więc każdy etap usuwania śmieci bezpośrednio poprawia dostrajanie.

Format JSONL, którego oczekują trenerzy

Większość nowoczesnych narzędzi do dostrajania domyślnie używa konwersacyjnego formatu JSONL: jeden obiekt JSON na linię, każdy z tablicą messages par ról/treści, gdzie role to system, user i assistant, a zwroty użytkownika/asystenta się zmieniają. To format czatu, który przyjmują trenerzy w stylu Hugging Face i OpenAI. Starsze zbiory danych instrukcji używają formatu trzech pól (instruction, input, output) — dobry dla jednokrotnego nadzorowanego dostrajania — a formaty konwersacji wielokrotnej również istnieją, ale można je łatwo przekształcić w format wiadomości. Wybierz jeden docelowy format i standaryzuj wszystko do niego.

// One training example per line (.jsonl). Chat / messages format:
{"messages":[
  {"role":"system","content":"You classify support tickets by urgency."},
  {"role":"user","content":"My payment failed three times and the event is tomorrow."},
  {"role":"assistant","content":"high"}
]}
{"messages":[
  {"role":"system","content":"You classify support tickets by urgency."},
  {"role":"user","content":"How do I change my avatar?"},
  {"role":"assistant","content":"low"}
]}

Dopasuj format do celu treningowego: surowy tekst do dalszego pretreningu, instrukcja plus wynik lub czat wielokrotny do nadzorowanego dostrajania, uporządkowane odpowiedzi do metod opartych na preferencjach. Jeśli budujesz dostrajanie do rozumowania, zachowaj pytanie i odpowiedź, ale przepisz odpowiedź, aby zawierała kroki łańcucha myślowego, które chcesz, aby model się nauczył.

Czyszczenie: gdzie wygrywa się jakość

To etap, który decyduje o twoim wyniku, i jest to głównie nieefektowne filtrowanie. Nigdy nie zakładaj, że wiersze pozyskane z sieci lub wygenerowane przez model są poprawne — sprawdzaj je. Powtarzające się tryby awarii są specyficzne i warte sprawdzenia po nazwie:

Dobrym nawykiem jest zachowanie zarówno wersji przed czyszczeniem, jak i wyczyszczonego JSONL, aby móc zmierzyć, co usunięto. I zrównoważenie zestawu w różnych kategoriach — nadreprezentowana klasa uczy model nadmiernego przewidywania jej.

Deduplikacja i licencjonowanie

Dane z sieci są pełne powtórzeń — syndykowane artykuły, lustrzane dokumenty, szablonowe akapity — a duplikaty cicho szkodzą dostrajaniu przez nadmierne ważenie tego, co jest powtarzane. Wykonaj dwa przejścia: deduplikacja dokładnego dopasowania przez haszowanie znormalizowanego tekstu, aby wychwycić identyczne wiersze, a następnie wykrywanie prawie duplikatów (technika podobieństwa lub shinglingu jak MinHash), aby wychwycić przepisane kopie, które dokładny hasz pominął. Jeśli chodzi o licencjonowanie, bądź świadomy: nie wszystko, co publiczne, jest swobodnie używalne. Śledź źródło i licencję każdego dokumentu, odfiltrowuj treści, których warunki zabraniają użycia do treningu, i preferuj źródła z jasnymi pozwoleniami na ponowne użycie. Znacznie taniej jest rejestrować pochodzenie podczas przeszukiwania niż odtwarzać je po zmieszaniu wszystkiego razem.

Pozyskiwanie czystych danych z sieci dla LLM

Łączenie, karta i podział

Gdy pobierasz z kilku źródeł, standaryzuj je wszystkie do jednego formatu i scal w jeden zjednoczony zbiór danych przed treningiem — jedno czyste dostrajanie na połączonym zestawie bije sekwencyjne dostrajanie na każdym źródle, które ma tendencję do erozji tego, czego model nauczył się wcześniej. Następnie napisz kartę zbioru danych: krótki zapis, skąd pochodzą dane, jak zostały wyczyszczone, ich rozmiar i rozkład etykiet, ich licencjonowanie i wszelkie znane ograniczenia. To sprawia, że zbiór danych jest odtwarzalny i audytowalny miesiące później. Na koniec, wyodrębnij podział ewaluacyjny, na którym nigdy nie trenujesz, aby móc uczciwie zmierzyć dostrajanie zamiast oceniać je na danych, które zapamiętało. Jeśli zasilasz system wyszukiwania zamiast dostrajania, nasz przewodnik po pipeline RAG obejmuje stronę odświeżania tego samego problemu.

Panel statystyk pokazujący rozmiary zbiorów danych do dostrajania: minimum 100 wierszy, ponad 1000 dla optymalnego, 10 przykładów początkowych do generacji syntetycznej, 52000 wierszy Alpaca
Poniżej około 100 wierszy dostrajanie ledwo się uczy; powyżej 1 000 czystych wierszy jakość przewyższa ilość.

Często zadawane pytania

Ile wierszy potrzebuję do dostrajania LLM?

Około 100 wierszy to praktyczne minimum dla rozsądnych wyników, a ponad 1 000 to dobry cel dla solidnej wydajności. Więcej zazwyczaj pomaga, ale tylko jeśli dane pozostają czyste — mniejszy, dobrze oznakowany zestaw przewyższa duży hałaśliwy. Dla generacji syntetycznej, zasil generator co najmniej dziesięcioma ręcznie napisanymi przykładami, aby najpierw nauczył się twojego dokładnego formatu.

W jakim formacie powinny być dane do dostrajania?

JSONL — jeden obiekt JSON na linię. Większość nowoczesnych trenerów domyślnie używa formatu konwersacyjnego z tablicą messages par ról/treści system/użytkownik/asystent. Starsze zbiory danych instrukcji używają pól instruction/input/output. Wybierz jeden docelowy format na podstawie celu treningowego i standaryzuj każde źródło do niego przed treningiem.

Jak wyczyścić zeskrobany zbiór danych do dostrajania?

Konwertuj strony na markdown, aby usunąć szablony, a następnie ręcznie filtruj pod kątem typowych błędów: niespójnych etykiet, odpowiedzi nie na temat, źle oznakowanych wierszy i pozostałości tekstu nawigacyjnego lub ciasteczek. Deduplikuj za pomocą dokładnego hasza i przejścia prawie duplikatów, zrównoważ kategorie i zachowaj zarówno surowe, jak i wyczyszczone wersje, aby móc zmierzyć, co usunięto.

Czy mogę używać dowolnych treści z sieci do trenowania modelu?

Nie automatycznie — publiczne nie oznacza swobodnie używalne. Niektóre treści mają warunki, które zabraniają użycia do treningu, a dane osobowe mają swoje własne zasady. Śledź źródło i licencję każdego dokumentu podczas jego zbierania, odfiltrowuj wszystko, czego warunki zabraniają treningu, i preferuj źródła z jasnymi pozwoleniami. To ogólna informacja, nie porada prawna; skonsultuj się z prawnikiem w przypadku komercyjnych zbiorów danych.

Tworzenie zbioru danych do dostrajania z sieci to filtrujący pipeline: pozyskiwanie czystego markdown, kształtowanie go w format wiadomości, którego oczekuje twój trener, bezwzględna deduplikacja i sprawdzanie etykiet, filtrowanie licencji i karta wyniku. Uzyskaj około tysiąca czystych wierszy i wyodrębnij uczciwy podział ewaluacyjny, a wydasz budżet na trening na sygnał zamiast szumu.

Buduj swój zbiór danych z danymi z sieci QuantumProxies