external-link
Fáza 2: Data Engineering

Zber dát: Kde brať slovenské texty?

Och, ani si neviete predstaviť, aké je to ťažké! Keď som začínal, myslel som si, že proste stiahnem internet a hotovo. Ale slovenčina je na webe ako šafran! Ak chceme natrénovať model, ktorý nerozpráva ako lámaný prekladač, potrebujeme tisíce a tisíce kvalitných viet. Kde ich ale vziať a nezblázniť sa z toho?

Zber dát pre AI

Často kladené otázky (moje vlastné!)

Je legálne sťahovať weby?

Predstavte si, že som nad tým sedel celú noc! V podstate, ak sú dáta verejné a nepoužívam ich na komerčný predaj samotnej databázy, malo by to byť v poriadku. Ale vždy kontrolujem robots.txt. Ak tam je napísané "vstup zakázaný", tak tam proste neleziem. Nechcem dostať ban na celú IP adresu!

Stačí mi Wikipédia?

Kiežby! Slovenská Wikipédia má síce fajn články, ale je ich málo. Na poriadny fine-tuning potrebujeme oveľa širší záber – diskusie, správy, blogy. Wikipédia je super základ, ale model by potom znel príliš "encyklopedicky".

Nástroje, ktoré som objavil (a nezničili mi PC)

BeautifulSoup4 & Requests

Toto je klasika. Odkedy som si prečítal článok o inštalácii Pythonu, toto je môj denný chlieb. Je to rýchle, jednoduché, ale má to háčik – ak stránka používa JavaScript na načítanie obsahu, BeautifulSoup neuvidí nič! Skoro som si vytrhal vlasy, kým som na to prišiel.

  • • Ideálne pre statické HTML stránky
  • • Extrémne nízka spotreba RAM
  • • Jednoduchá syntax pre začiatočníkov

Playwright

Och, toto je iný level! Playwright v podstate spustí skutočný prehliadač a kliká za vás. Je to magické, ale žerie to pamäť ako šialené. Používam ho len vtedy, keď sa stránka bráni zubami-nechtami.

Scrapy

Toto je už pre profíkov. Je to celý framework. Priznám sa, zatiaľ sa v tom trochu strácam, ale ten výkon je neuveriteľný. Ak chcete stiahnuť celý portál za pár minút, toto je cesta.

JSON Dataset Structure

Predstavte si, že máte milión riadkov a neviete, čo je čo. Preto všetko ukladám do JSON formátu. Je to prehľadné a môj Llama model to miluje. Každý záznam má ID, zdroj, dátum a samotný text.

{ "id": "sk_001", "source": "blog_trebisov", "text": "Dnes je v Trebišove krásne...", "tokens": 42 }

Proces čistenia: Prečo je to dôležité?

Predstavte si, že do stroja na mäso hodíte aj s igelitom. Tak nejako vyzerá, keď do AI natlačíte surové HTML dáta. Všade sú reklamy, menu, pätičky a "Prihláste sa do newslettera". To náš model učiť nechceme! Čistenie dát je asi 80 % práce a úprimne, je to tá najnudnejšia časť. Ale bez nej to proste nejde.

Najprv musím odstrániť všetky HTML tagy. Potom prichádza na rad regulárne výrazy (Regex) – to je taká čudná matematika na texty. Pomocou nich odstraňujem duplicitné vety a nezmyselné znaky. Zistil som, že veľa slovenských webov má chyby v kódovaní, takže namiesto "č" vidíte nejaké štvorčeky. Ak to neopravím, model bude generovať štvorčeky tiež!

"Kvalita dát je dôležitejšia ako ich kvantita. Radšej 1 GB čistého textu ako 10 GB odpadu s reklamami na chudnutie." – Moje zistenie po týždni trápenia.

Nakoniec robím deduplikáciu. Zistil som, že tie isté správy sú na desiatich rôznych weboch. Ak by sa ich model učil desaťkrát, začal by ich považovať za jedinú pravdu vesmíru. A to nechceme. Chceme variabilitu! Preto používam knižnice ako `datasketch` na hľadanie podobných textov.

Optimalizácia úložiska

Keď už máte tie gigabajty textov, kam s nimi? Môj starý harddisk v Trebišove začal nebezpečne hučať. Musel som vymyslieť, ako to ukladať efektívne. Používam kompresiu Zstandard (zstd) – je to neskutočne rýchle a stlačí to text na zlomok pôvodnej veľkosti.

icon-b

Parquet formát

Namiesto tisícov malých súborov ukladám dáta do veľkých Parquet blokov. Je to stĺpcovo orientované a neskutočne rýchle pri načítaní do Pythonu.

Indexovanie

Používam jednoduchý SQLite index, aby som vedel, čo sa nachádza v ktorom súbore bez toho, aby som ich musel všetky otvárať.

Optimalizácia dát

Máte dáta? Poďme ich natrénovať!

Zber dát je len začiatok. Skutočná zábava začína, keď tieto texty nahodíme do modelu a on začne prvýkrát "rozprávať" po slovensky. Pozrite sa, ako som si vybral ten správny model pre náš jazyk.