Javni naslov projekta često je loš opis onoga što je na kraju isporučeno.
Ovaj angažman je javno bio naveden kao detekcija dobi iz Instagram biografija. Tehnička isporuka govori širu i korisniju priču: TensorFlow notebook koji fino podešava BERT kako bi kratkim objavama s društvenih mreža dodijelio više tema.
Ciljne oznake bile su is_personal, is_healthy_lifestyle i is_medical. Nisu se međusobno isključivale. Jedna objava je opravdano mogla aktivirati nijednu, jednu, dvije ili sve tri oznake.
To je multilabel problem.
Jedan ulaz nema uvijek samo jednu tačnu klasu
Kod uobičajene multiclass klasifikacije klase se međusobno takmiče. Ulaz dobija jednu kategoriju: ovu ili onu.
Multilabel klasifikacija za svaku oznaku postavlja zasebno pitanje: pripada li ova oznaka tekstu ili ne?
Zamislimo ilustrativnu objavu o povratku trčanju nakon medicinskog tretmana. Istovremeno može biti lična, povezana sa zdravim životnim stilom i medicinska. Kada bismo model prisilili da izabere samo jednu temu, odbacili bismo ispravnu informaciju prije nego što trening uopće počne.
Ta razlika utiče na izlazni sloj, loss funkciju, pretvaranje rezultata u vjerovatnoće, pragove odluke i način evaluacije.
Šta je notebook implementirao
Isporuka je učitala 31.982 označene objave iz CSV fajla i tokenizirala tekst pomoću modela bert-base-uncased. Kreirani su token ID-jevi i attention maske, sekvence su dopunjene ili skraćene, a podaci podijeljeni u omjeru 80/20.
Korišten je TFBertForSequenceClassification s tri izlazne oznake. Model je kompajliran pomoću binary cross-entropy loss funkcije nad logitima i Adam optimizatora, a zatim fino podešen u Google Colabu. Trenirani model i tokenizer sačuvani su za kasniju inferenciju.
Notebook je sadržavao i:
- predikciju oznaka na osnovu vjerovatnoća;
- podesive pragove odluke;
- ukupni accuracy, ponderisani F1, precision i recall;
- zajedničke matrice zabune za moguće kombinacije oznaka;
- zasebne klasifikacijske izvještaje i matrice zabune za svaku temu.
To je potpun eksperimentalni put od označenog CSV-a do ponovo upotrebljivog modela i osnove za evaluaciju.
Detalj evaluacije koji mijenja značenje
Notebook sadrži dva načina pretvaranja logita u vjerovatnoće. Prvi ispravno primjenjuje sigmoid nezavisno na svaki izlazni logit. Kasniji blok za validaciju koristi softmax, a zatim postavlja prag nad dobijenim vrijednostima.
Te operacije nemaju isto značenje.
Softmax prisiljava izlaze da se takmiče i da zbir njihovih vjerovatnoća bude jedan. To odgovara problemu u kojem tačno jedna klasa treba pobijediti. Sigmoid svaki izlaz tretira nezavisno, što odgovara multilabel cilju u kojem više tema može istovremeno biti tačno.
Za produkcijski spremnu evaluaciju zato bih dosljedno koristio sigmoid kroz cijelu inferenciju, prag validirao umjesto da ga biram proizvoljno i razmotrio zaseban prag za svaku oznaku kada se njihova zastupljenost ili cijena greške razlikuju.
To nije kozmetički detalj implementacije. On mijenja značenje rezultata.
Podjela podataka je dio modela
Notebook pravi holdout skup tako što prvih 80% redova koristi za trening, a preostalih 20% za testiranje. To je sigurno samo ako je izvorni fajl već bio prikladno nasumično raspoređen.
Ako su redovi poredani prema vremenu, izvoru, autoru ili oznaci, jednostavno rezanje može napraviti obmanjujući testni skup. Danas bih tu pretpostavku učinio eksplicitnom i koristio reproducibilnu nasumičnu ili multilabel-stratificiranu podjelu. Za tekstove istih autora ili izvora provjerio bih i treba li grupisanje radi sprečavanja curenja podataka.
Isti oprez vrijedi za trajanje treninga. Više epoha nije automatski bolje. Validacijske krive, early stopping i analiza grešaka po oznakama korisniji su od unaprijed izabranog velikog broja epoha.
Šta mogu, a šta ne mogu tvrditi
Sačuvani notebook sadrži kod za izračun metrika, ali ne sadrži sačuvane rezultate tih metrika. Zato za ovaj angažman ne objavljujem tvrdnje o accuracyju, F1 rezultatu niti produkcijskom uticaju.
Materijal ipak demonstrira konkretno: pripremu podataka, BERT tokenizaciju, TensorFlow fine-tuning, multilabel predikciju, čuvanje modela i evaluacijski kod u workflowu prilagođenom Google Colabu. Klijent je ostavio i javnu ocjenu 5,0 kojom je potvrdio zadovoljstvo isporukom i komunikacijom.
Šira lekcija
„Koristi BERT“ nije potpuno rješenje. Model može naučiti samo cilj koji definišemo, a evaluacija može odgovoriti samo na pitanje zapisano u oznakama i metrikama.
Prije podešavanja tekstualnog klasifikatora danas pitam:
- Može li više oznaka istovremeno biti tačno?
- Ko je definisao oznake i jesu li definicije dosljedne?
- Kako su rijetke kombinacije zastupljene?
- Kolika je cijena lažno pozitivnih i lažno negativnih rezultata za svaku oznaku?
- Koristi li inferencija istu semantiku kao trening?
- Je li holdout skup zaista nezavisan?
Na kraju, zaključak je da je arhitektura je važna, ali je definicija „tačnog“ rezultata važnija.
TREBAJU VAM DOKAZI IZ VLASTITIH PODATAKA?