Versel nekünk az AI, de tud-e Arany Jánosul?
Egy asztali gép, Arany János 485 verse, 64 perc tanulás — és a kérdés, hogy mindez ér-e valamit
Ha ma megkérsz egy mesterséges intelligenciát, hogy írjon verset Arany János modorában, kapsz valamit, ami versnek látszik. Sorokba van tördelve, néha még rímel is. A kérdés az, hogy ez mennyire vers, és mennyire csak úgy néz ki.
Ezt akartam megmérni. Nem ízléssel, hanem vonalzóval.
A magyar verselés ehhez szerencsés terep, mert kegyetlenül mérhető. A szótagszám a magánhangzók száma, se több, se kevesebb: a magyar helyesírás nem ismer kettőshangzót, tehát ez nem közelítés, hanem maga a szabály. A rím vagy megvan, vagy nincs. A strófa vagy négysoros, vagy nem az. Ehhez nem kell irodalmi érzék, csak egy jól megírt program.
Írtam egyet. Ráengedtem Arany 485 versére. Aztán fogtam egy nyílt forrású nyelvi modellt, betanítottam ugyanezen a korpuszon, és megnéztem, mennyivel lesz jobb.
Rosszabb lett.
A cikk hátralévő része arról szól, miért volt ez mégis a kísérlet legjobb eredménye. A teljes méréssorozat nyilvános: LoRA vs válogató magyar verselésen.
Először nézzünk egy verset
Ezt a gép írta, a betanított modell, a válogatóval együtt. A feladat annyi volt: „Írj verset Arany János modorában. Cím: VÁSÁRBAN. Forma: 6 strófa, strófánként 4 sor, rímséma AABB, soronként 11 szótag.” Két strófa belőle; a számok a sorok előtt a mért szótagszámok, az elvárás 11.
11 | Két árva fiú hányni kezd a sárral,
11 | Hozzájuk egy lyány, az is hány, a bárcsal,
11 | Kétszámra gyűlnek, három, de már négy is:
11 | „Ki a pénzt? ki a zsírt? ki a nyers ebgyísz?”
12 | Fog a konyhába egy vén asszony belépni,
12 | Kergeti őket, de nem tudja felépni,
11 | Kétszámra kerget, három, de már négy is:
11 | „Ki a gyíkot? ki a zsírt? ki a pénzgyísz?”
Nézd meg, mi stimmel. Hat strófa, mind a négysoros. A huszonnégy sorból tizenöt pontosan tizenegy szótagos, hat tizenkettő, kettő tizenhárom, és egyetlen sor csúszik el nagyon, az hat szótagos. A sorpárok rímelnek. A harmadik sor minden strófában ugyanarra a mintára épül, „Kétszámra gyűlnek, három, de már négy is”, ami egy elbeszélő népi vers refrénszerű lüktetése. Hangban ott van.
Most nézd meg, mi nem stimmel. Ebgyísz. Pénzgyísz. Bárcsal. Ezek nem szavak. Nincsenek benne a magyar szótárban, és nincsenek benne Arany és Petőfi hetvenháromezer szóalakjában sem. A gép találta ki őket, méghozzá mindet sorvégen, mindet azért, hogy kijöjjön a rím.
Ez az egész kísérlet egyetlen versben. A forma megvan. A hang megvan. És a gép kitalált szavakkal fizet érte.
Mit akartam pontosan megtudni
Van egy divatos technika, a neve LoRA. A lényege annyi, hogy egy hatalmas, kész nyelvi modellt nem tanítasz újra a nulláról (ahhoz millió dollár és hónapok kellenének), hanem ráteszel egy vékony réteget, ami elhangolja. Nagyjából mint amikor egy zongorára nem építesz újat, csak áthangolod.
Az én esetemben ez a réteg a modell paramétereinek 0,40 százaléka. A modell kilencmilliárd paraméteres, a betanított rész harminchatmillió. A tanulás 63,8 percig tartott egy asztali gépen.
A csábító kérdés az volna: „javult-e valami tőle?” Erre a válasz triviálisan igen, és ezért érdektelen. Az igazi kérdés az, hogy megérte-e, mert van egy sokkal olcsóbb módszer, amivel ugyanezt meg lehet próbálni.
Ez a módszer így néz ki: megkéred a modellt nyolcszor ugyanarra a versre, aztán a nyolcból kiválasztod azt, amelyik a legszabályosabb. Semmit nem tanítasz. Csak sokat kérdezel és jól választasz. Ugyanaz, mint amikor nyolc fotót csinálsz a gyerekről, és egyet raksz ki a falra. Ezt hívjuk rerankernek, a válogatónak.
Ezért a mérés öt eljárást vet össze, ugyanazon az ötven versfeladaton:
| ág | mit csinál |
|---|---|
| B0 | a nyers modell, egyszerű kéréssel |
| B1 | a nyers modell, de a kérésbe beteszek négy Arany-verset példának |
| B2 | ugyanez + a válogató: nyolc próbálkozásból a legszabályosabb |
| C | a betanított modell (LoRA) |
| C2 | a betanított modell + a válogató |
| GOLD | maga Arany János, ugyanezzel a vonalzóval megmérve |
A B2 az igazi ellenfél, nem a B0. Ez az egész mérés sarokpontja. Ha csak a nyers modellhez hasonlítom a betanítottat, a betanított látványosan nyer, és elhallgatom, hogy ugyanezt egy háromsoros válogatóprogrammal olcsóbban is megkaptam volna.
A vonalzó, és miért kell azt is megmérni
Mielőtt bármit mérsz, be kell bizonyítani, hogy a mérőeszközöd mér. Ez unalmasan hangzik, és ez volt a munka legfontosabb része.
A szótagszámláló könnyű eset. A Toldi, a Toldi estéje és a János vitéz irodalomtörténeti tény szerint felező tizenkettesben íródott: minden sor tizenkét szótag. Ráengedtem a számlálót a 4125 sorra, és 99,7%-ban tizenkettőt mért. Vagyis a program azt találja meg, amit egy irodalmár is megtalálna.
A rímdetektor a nehéz eset, mert a magyar rím nem tiszta rím. Túlnyomórészt asszonánc: a magánhangzók egyeznek, a mássalhangzók lazábban. „Kezemben / verekednem”, ez Petőfinél nem hiba, hanem a népies rím normája.
Hogyan bizonyítod be, hogy a rímfelismerőd rímet talál, és nem véletlen hasonlóságokat? Kontrollcsoporttal. Ugyanaz az ötlet, mint az orvosi gyógyszerkísérletben a placebo.
Fogtam a valódi rímpozíciókat (Aranynál az első–második és a harmadik–negyedik sort), és fogtam ugyanezeket a sorokat összekeverve, más strófákból. Azonos szerző, azonos szókincs, azonos korszak. Az egyetlen különbség, hogy a kevert párokban nincs rímszándék.
| valódi rímpozíció | kevert kontroll | |
|---|---|---|
| a detektor rímet talál | 85,4% | 10,1% |
Hetvenöt százalékpont a rés. A detektor tehát nem hasonlóságot mér, hanem rímet.
És van egy még szebb bizonyíték. Ugyanaz a program, ugyanaz a küszöb, két szerzőn futtatva:
| melyik sorpár rímel | 1–2 | 2–4 | 3–4 |
|---|---|---|---|
| Arany János | 86,0% | 21,0% | 84,8% |
| Petőfi Sándor | 35,6% | 64,7% | 34,9% |
Aranynál az első–második és a harmadik–negyedik sor rímel: ez a páros rím. Petőfinél a második és a negyedik: ez a népies félrím, a magyar népdal alapformája. Ez irodalomtörténeti közhely, csak most nem tankönyvből jött, hanem mérésből. Ugyanaz a kód, ellentétes mintázat, magyarázat nélkül.
Amikor egy mérőeszköz visszaadja azt, amit függetlenül is tudunk, akkor elkezdhetsz hinni neki ott is, ahol nem tudjuk előre a választ.
A vonalzó kódja nyilvános, és egyetlen külső könyvtárat sem használ: hu_prosody.py. Van benne önteszt is, ami a Toldi felező tizenketteseihez méri magát, egy paranccsal lefuttatható.
Arany János 0,577-et ér el a saját mérőlécén
Ez a legfontosabb szám az egész cikkben, és a legkönnyebb elsiklani felette.
Megmértem az eredeti Arany-verseket ugyanazzal a vonalzóval, mint a gép generálásait. Az eredmény:
| Arany János | |
|---|---|
| strófaméret betartva | 0,982 |
| szótagszám pontosan stimmel | 0,800 |
| rímarány | 0,577 |
| ebből valódi rím (nem toldalék-rím) | 0,400 |
Vagyis a mérőléc szerint maga Arany János is csak a sorpárok 58%-ában rímel. Nem azért, mert rosszul verselt, hanem mert az ötszáz vers között van szabad vers, töredék, prózaszerű részlet, és mert a mérőléc szigorú.
Ennek az a jelentősége, hogy a feladat felső korlátja nem 1,0, hanem 0,577. Enélkül a gép 0,255-ös rímaránya lebeg a levegőben: nem tudod, hogy az katasztrófa-e vagy majdnem jó. Így viszont tudod, hogy a lehetséges 44%-a.
Van itt egy mellékes tanulság is, amiben tévedtem. Előre azt gondoltam, hogy a toldalék-rím, amikor két szó csak azért rímel, mert ugyanaz a rag van a végén, a gép csalása lesz. Kiderült, hogy a rímelő párok 28,6%-a ilyen Aranynál is: a Toldi előhangjában az „éjszakákon / pusztaságon” pár mindkét tagja -on határozói ragra végződik. Ez nem trükk, hanem a magyar verselés normális eszköze. Egy agglutináló nyelvben elkerülhetetlen.
Az első csapda: a rossz vizsgatárgy
Amikor egy modellt tanítasz, van egy szokásos jelzőszámod, a validációs veszteség. Röviden: félreteszel néhány verset, amit a gép sosem látott, és menet közben méred, mennyire jól tippeli meg bennük a következő szót. Ha ez a szám nőni kezd, az a tankönyv szerint azt jelenti, hogy a modell elkezdett magolni, és ideje leállni.
Nálam pontosan ez történt. A szám az első epochnál, vagyis miután a gép egyszer végigolvasta a korpuszt, volt a legjobb, utána romlott:
| epoch | 0,5 | 1,0 | 1,5 | 2,0 | 2,5 | 3,0 |
|---|---|---|---|---|---|---|
| validációs veszteség | 2,880 | 2,835 | 2,874 | 2,870 | 2,967 | 2,968 |
A tankönyvi lépés itt az, hogy elmented az egy epochos állapotot, a többit eldobod, és továbbmész. Én lemértem mindkettőt, az egy epochosat és a háromepochos „túltanult” végállapotot, ugyanazon az ötven versfeladaton:
| rímarány | szótagszám | ismételt sor | felismerhető Aranynak | |
|---|---|---|---|---|
| 1 epoch (a „helyes” választás) | 0,119 | 0,180 | 0,181 | 68,0% |
| 3 epoch (a „túltanult”) | 0,177 | 0,203 | 0,118 | 77,3% |
A túltanult adapter minden egyes tengelyen jobb. Nem hajszállal: a rímarány felével több, az ismétlés harmadával kevesebb, a felismerhetőség kilenc ponttal jobb.
Miért? Mert a validációs veszteség nem azt méri, amit én akarok. Azt méri, mennyire jól tippeli meg a gép a következő szót Arany félretett verseiben, egy olyan feladatot, ahol a szó szerinti egyezés számít. Én viszont nem azt akarom, hogy kitalálja Arany következő szavát. Azt akarom, hogy Arany modorában írjon. A kettő az első epochban együtt mozog, aztán szétválik.
Ha a mérőszámod nem a feladatot méri, ne az alapján dönts. Egy ötven feladatból álló formai mérés eldöntötte a kérdést, és hat percbe került.
Az eredmény: formában a LoRA elbukik
Most jön a kellemetlen rész.
| B1 (példák) | B2 (példák + válogató) | C (LoRA) | különbség | |
|---|---|---|---|---|
| strófaszám betartva | 0,567 | 0,700 | 0,573 | −0,127 |
| strófaméret | 0,802 | 0,938 | 0,735 | −0,203 |
| szótagszám pontos | 0,206 | 0,409 | 0,203 | −0,207 |
| rímarány | 0,114 | 0,236 | 0,177 | −0,059 |
| valódi rím | 0,093 | 0,203 | 0,139 | −0,064 |
| kitalált szó (kevesebb a jobb) | 0,019 | 0,013 | 0,044 | +0,031 |
A betanított modell minden formai tengelyen alulmarad azzal a megoldással szemben, amelyik nem tanult semmit, csak nyolcszor kérdezett. És közben háromszor annyi kitalált szót gyárt.
Hatvannégy perc tanulás, egy egész napnyi előkészítés, és veszít egy válogatóprogrammal szemben, ami néhány tucat sor.
Az ok nem misztikus. A válogató pontosan azt maximalizálja, amit a táblázat mér: megnézi a nyolc jelöltet, megszámolja a szótagokat, megnézi a rímeket, és kiválasztja a legszabályosabbat. A LoRA ezzel szemben egy hajlamot tol el. Nincs garanciája, hogy bármelyik konkrét vers szabályos lesz, csak arra van esély, hogy átlagosan szabályosabb legyen.
Ha csak ennyit mértem volna, a cikk címe az lenne, hogy „a finomhangolás nem éri meg”. És rossz cikk lenne.
A fordulat: a stílust a válogató nem tudja megvenni
Volt egy második mérőeszközöm is, és az mást mondott.
Ez így működik: fogtam egy egyszerű statisztikai osztályozót, nem AI-t, hanem egy szógyakoriságokon alapuló klasszikus algoritmust, és megtanítottam elkülöníteni Arany és Petőfi szövegeit. Olyan verseken, amiket sosem látott, 91%-os pontossággal találja el, melyik szerzőé a szöveg. Ha csak tippelne a gyakoribb szerzőre, 59% lenne.
Utána ráengedtem a gép által írt versekre. A kérdés: felismeri-e bennük Aranyt?
| ág | mit csinál | Aranynak ítéli |
|---|---|---|
| B0 | nyers modell | 38,7% |
| B1 | + négy példa | 56,4% |
| B2 | + a válogató | 56,0% |
| C | LoRA | 77,3% |
| C2 | LoRA + válogató | 92,0% |
Nézd meg a B1 és a B2 sort. A válogató a stíluson semmit nem mozdít: 56,4%-ról 56,0%-ra. Ez nem mérési zaj, hanem következmény. A válogató szótagot számol és sorvégeket egyeztet. Fogalma sincs arról, hogy egy szöveg Aranyra hasonlít-e. Egy válogató csak azt tudja kiválasztani, amit mérni tud.
És most nézd meg a B2-t és a C2-t. Ugyanaz a válogató, ugyanaz az ötven feladat, ugyanaz a nyolc jelölt. Az egyetlen különbség az adapter.
56,0% → 92,0%. Harminchat százalékpont, kizárólag a tanulástól.
Van itt egy kis rejtvény, amit érdemes megfejteni. A válogató a LoRA-ágon javítja a szerzőfelismerést (77,3% → 92,0%), pedig kizárólag formai pontszám alapján válogat. A kézenfekvő magyarázat az volna: Arany formahű költő, tehát ami formailag jobb, az egyben Arany-szerűbb.
Ez a magyarázat hibás, és a B2 ág cáfolja meg. Ugyanaz a válogató a nyers modellen nem javít semmit. A válogató tehát nem „formán keresztül stílust” választ. Egyszerűen felerősíti azt, ami a jelöltekben már benne van. A LoRA-ágon mind a nyolc jelölt Arany-szerű, így a legszabályosabb kiválasztása egyben a legjellegzetesebbet is kiemeli. A nyers ág jelöltjeiben nincs mit kiemelni.
Egy szelektor felerősít, de nem teremt.
Egyetlen ábrán a teljes eredmény. Vízszintesen a forma, függőlegesen a hang, és jól látszik, hogy a két beavatkozás merőleges egymásra:
Próbáljuk ki valami hétköznapin
Eddig minden mérés Arany-utánzásról szólt. De mi történik, ha a gépet arról kérdezem, amiről a cégem szól? A prompt ennyi volt, se több, se kevesebb:
„Írj egy rövid, 4 soros, szépen rímelő verset a dokumentum kezelésről.”
Se Arany, se szótagszám, se rímséma, csak amit egy felhasználó odaírna. Mindkét ág ugyanezt kapta, mindkettő nyolc jelöltet generált, és mindkettőnél ugyanaz a válogató választott. Az egyetlen különbség az adapter.
Előbb a nyers modell:
11 | Papír és tinta íze évek óta,
11 | melyet a kézbe venni most már ritka.
11 | Kijelzők fénye váltja fel a tollat,
11 | a digitális évszázad új utat.
Aztán a betanított:
10 | Ha dokumentumot kérsz, ne siess,
9 | Gondolj rá, hogy ez lehet hiess;
9 | Akkor is, ha a hivatalos
9 | Könyvelőnek a torka fájtos.
Nézd meg először, mi azonos. Mindkettő négysoros. Mindkettőben a három szomszédos sorpárból kettő rímel. És ami a lényeg: a válogató pontszáma a kettőn pontosan ugyanannyi, 2,667 a 3-ból. A mérőléc szerint holtverseny.
Most nézd meg, mi a különbség.
A nyers modell hibátlanul egyenletes: 11-11-11-11 szótag, egyetlen kitalált szó nélkül. És olyan verset ír, amit egy tartalommarketinges is írhatott volna: papír és tinta, kijelzők fénye, „digitális évszázad új utat”.
A betanított modell hivatali szatírát ír. Egy könyvelőről, akinek fáj a torka a dokumentumtól. Ez már nem közhely, hanem hang, pontosan az a népi-gúnyos regiszter, amiért Aranyt tanítottuk rá. Az ára ott van a rímekben: a „hiess” és a „fájtos” nem magyar szavak. A gép gyártotta őket, hogy a „siess” és a „hivatalos” rímet kapjon.
Ugyanaz a prompt, ugyanaz a válogató, ugyanaz a pontszám, és két teljesen más világ. A formai mérőléc nem tud a kettő között választani, mert amiben különböznek, azt nem méri. Ez a cikk egész állítása, egyetlen versben.
A szórás, amit érdemes látni
Hat futást csináltam a betanított modellel, hat különböző maggal. Négyben a témánál maradt: a papír aláírásáról és hamisításáról, a dokumentum kezeléséről, a tekintélyét vesztő hivatalnokról írt. Egyben az írás általános dicsérete lett belőle. Egyben pedig ez:
Cifra szép borotvám,
Birtokomat elvágod;
Ezt, ha a színt látod,
Mégsem bánom, ne sírj!
Ez formailag a legjobb jelölt volt a nyolc közül, és fogalma sincs a dokumentumkezelésről. A LoRA annyira eltolta a modellt a 19. századi verselés felé, hogy a téma elveszett útközben.
Két dolgot érdemes tudni erről a kisiklásról. Az egyik: a válogató nem választotta ezt a verset. Három jelölt kapott azonos, legmagasabb pontszámot, és a döntetlent a generálási sorrend törte el, a borotvás vers csak korábban készült el. A nyolc jelölt között ott volt ez is:
Minden dokumentumot
És nyilatkozatot
Tartósítani kell:
Kőre, papírra.
A másik: a válogató célfüggvénye szótagot számol és sorvégeket egyeztet. Azt, hogy a vers a kért témáról szóljon, nem méri, tehát nem is tudja kiválasztani. Ugyanaz a vakfolt, mint a stílusnál, csak most a tartalmon.
Amit itt szándékosan nem tettem: a négysoros verseket nem mértem meg a szerző-klasszifikátorral. Az 7195 szövegblokkon tanult, amiknek a mediánja 8 sor és 46 szó; a tanítóanyag 0,1%-a van csak ekkora, mint ezek a versikék. A 91%-os pontosság arra a hosszra szól, nem erre: egy négysoros darabkán a becslése nem hihető. A mérőeszköznek is van érvényességi tartománya.
És mit tud egy nagyobb modell?
Kézenfekvő ellenvetés: mindez egy kilencmilliárd paraméteres kismodellről szól. Mi történik, ha nagyobbat kérdezünk, ugyanezzel a prompttal, ugyanezzel a válogatóval?
Először a saját, négyszer nagyobb modellünk, 35 milliárd paraméterrel. Minden azonos: prompt, hőmérséklet, nyolc jelölt, ugyanaz a pontozó, ugyanazok a magok.
| ág | futás | rímelő sorpár | válogató pontszáma (átlag) |
|---|---|---|---|
| nyers 9B | 5 | 6 / 15 | 2,400 |
| 35B | 6 | 8 / 18 | 2,444 |
| betanított 9B | 6 | 10 / 18 | 2,556 |
A négyszeres modellméret a szórásba fullad. A 35B a hat futásából négyszer egyetlen rímelő sorpárt hozott a háromból, kétszer kettőt, és a holtverseny is ugyanúgy megjelent: hat futásból ötben legalább két jelölt osztozott a legjobb pontszámon, egyszer hat is. Ugyanaz a jelenség, mint a kilencmilliárdosnál, csak nagyobb géppel.
Kaphat-e még egy esélyt? Igen: gondolkodó módban. Ugyanaz a prompt, de a modell előbb végiggondolja a feladatot, és csak utána válaszol. Két dolgot mértem.
Az egyiket nem is kellett mérni, csak megnézni. A modell egy négysoros versen négyezer és huszonháromezer karakter között gondolkodik: rímpárokat próbálgat, sorhosszt számol, elveti és újrakezdi. Nyolcezer token kerettel a nyolc jelöltből hat a gondolkodásban maradt (22–23 ezer karaktert írva, verset egyet sem), oda sem érve, hogy válaszoljon. A válogatónak két verse volt, amiből választhatott.
A másik a számla. Gondolkodás nélkül egy futás 386 token és 2,5 másodperc. Gondolkodással ugyanaz 58 038 token és 264 másodperc, 150-szer több token, 100-szor hosszabb idő. Az eredmény pontszámban: 2,667. Pontosan annyi, mint amit a kilencmilliárdos hoz 386 tokenből.
De a legtanulságosabb az a futás volt, ahol négyezer token keretet adtam. Ott egyetlen jelölt jutott át a gondolkodáson, a másik hét tizenegyezer karakter töprengés után is a plafonba futott. A válogatónak nem volt mit válogatnia, ez lett a győztes:
12 | A dokumentumok sorban állnak rendben,
14 | A fájlok és a lapok is tárolódnak csendben.
10 | Kezeld őket óvatosan, szépen,
12 | Mert az adatok őrzik a múltat mélyen.
Ez a vers 3,000 pontot kapott a 3-ból. Az egyetlen tökéletes pontszám az egész demóban. A rímarány hibátlan: mindhárom sorpár rímel.
A rímminősége nulla.
„Rendben / csendben”, mindkettő -ben. „Csendben / szépen”, „szépen / mélyen”, mindkettő -en. Mind a három rím ugyanannak a ragnak az ismétlése, ragrím, abból a fajtából, amiből a mért Arany-korpuszban a rímek 28,6%-a áll, itt viszont 100%. A négyezer-ötszáz karakter töprengés pontosan oda vezetett, ahonnan a magyar verselő elindul, és a formai vonalzó ezért adott rá maximális pontot.
A rímminőség-mutató nélkül ez a vers hibátlannak mérődött volna. Ezért kell két mutató oda, ahol egy is elégnek látszik.
Az ár: kitalált szavak
Vissza a VÁSÁRBAN „ebgyísz”-éhez.
Amikor először néztem a szókincs-mérést, majdnem félreértettem. Van egy mutató, ami azt méri, hány olyan szóalakot használ a gép, amit a magyar helyesírás-ellenőrző nem ismer:
| szótáron kívüli szó | |
|---|---|
| nyers modell | 0,021 |
| LoRA | 0,067 |
| Arany János | 0,079 |
Első olvasatra ez jó hír: a betanított modell 6,7%-a majdnem ott van Arany 7,9%-ánál. Vagyis megtanulta az archaikus szókincset!
Nem tanulta meg. A helyesírás-ellenőrző Aranynál is ismeretlen szavakat talál, csak azok valódi régi magyar szavak. Ezért a mérést kétlépcsőssé kellett tenni: ami sem a szótárban, sem Arany és Petőfi hetvenháromezer szóalakjában nem szerepel, az nem archaizmus, hanem kitalálás.
A dokumentumkezelős próbából van egy vers, ami ezt a két esetet egyetlen sorban mutatja meg:
Dokumentum kezelésre kell készülnöm,
Kerűlni az időt, amit elpocsótlam;
A „Kerűlni” nincs a helyesírás-ellenőrzőben, de ott van Arany szövegeiben, ez az ő írásmódja. Valódi archaizmus, jól eltanulva. Az „elpocsótlam” viszont sem a szótárban, sem Aranynál nem szerepel: az „elpocsékoltam” helyére gyártott alak, ami a „készülnöm” felé közelít.
Két ismeretlen szó egy sorpárban, két teljesen más ítélet, és egy egylépcsős mérés mindkettőt ugyanúgy számolta volna.
A csavar: a rím még így sem jött össze. A „készülnöm / elpocsótlam” pár 0,400-at kap a rímskálán, a 0,6-os küszöb alatt. A modell tehát kitalált egy szót, és még csak nem is kapott érte rímet.
| valóban kitalált szó | |
|---|---|
| nyers modell | 0,015 |
| LoRA | 0,044 |
| Arany János | 0,000 |
Közel háromszoros. A pontos állítás tehát ez:
A finomhangolás a rímarányt harminc százalékkal javítja, és kitalált szavakkal fizet érte. A modell nem a rímelést tanulta meg, hanem azt, hogy a rím fontosabb a szónál.
Ugyanez a hibamód másképp is előjön: a gép a sorok 9–12%-át egyszerűen megismétli, miközben az eredeti versekben ez 0,7%. Egy megismételt strófa tökéletesen rímel önmagával. Ha nem mérted volna külön, jó pontszámnak látszana.
Amitől féltem, és nem következett be
A kísérlet legnagyobb kockázata nem a minőség volt, hanem a magolás.
Kis korpuszon a finomhangolás könnyen átcsap abba, hogy a gép egyszerűen megjegyzi a tanítószöveget, és visszaköpi. Ez egyszerre minőségi hiba (nem stílust tanult) és, ha nem közkincs szövegről volna szó, jogi probléma.
A mérés így ment: fogtam ötven tanított és ötven félretett verset, beadtam mindegyikből az első két sort, és megnéztem, mennyit folytat helyesen a gép.
A félretett versek ága a kontroll. Ezeket a modell tőlem nem tanulta, de majdnem biztos, hogy látta már valahol az interneten a saját eredeti tanulásakor. A Toldi és a János vitéz benne van minden nagy szövegkorpuszban. Ha a magolást naivan mérném, ezt az örökölt tudást írnám a saját tanításom számlájára.
| tanított versek | félretett versek | a mi hozzájárulásunk | |
|---|---|---|---|
| nyers modell | 1,48 szó | 1,38 szó | +0,10 |
| LoRA | 1,24 | 1,19 | +0,05 |
Nulla. Sőt: a betanított modell rése kisebb, mint a nyers modellé. És a teljes mérésben egyetlen generálás sem adott vissza nyolc szavas összefüggő részletet a tanítókorpuszból.
Ez ellentmond annak, amit előre vártam. Azt hittem, „a magolás hamarabb jön, mint a stílus”. Fordítva történt, és ez egy fogalmi különbségtételt kényszerít ki:
A túltanulás nem azonos a magolással. A validációs veszteség emelkedése azt jelzi, hogy a modell romlik egy általános nyelvi feladaton, de nem úgy, hogy szó szerint megjegyzi a verseket. Ezen a korpuszméreten, ezzel a pici adapterrel, ilyen feladattípusnál a modell a stílus statisztikáját veszi fel, nem a szöveget.
Fontos, mit nem bizonyít ez: hogy védett szövegen is biztonságos volna. A mérés arra érvényes, amit mértem, erre a korpuszméretre, erre az adapterméretre, erre a feladatra. Az eredeti ötletem egyébként Romhányi József rímes állatverseinek stílusa volt; ez 2053-ig védett, tehát nem valósítható meg legálisan. Ezért lett Arany és Petőfi, akiknél a védelem 1952-ben, illetve 1919-ben lejárt.
Amit a hardver diktált
Ez a szakasz a technikai olvasóknak szól; aki csak a verseket akarta, ugorjon a következőre.
A tréning egy NVIDIA GB10-en futott, asztali méretű gép, 121 GB egyesített memóriával, ahol a processzor és a grafikus egység ugyanabból a poolból eszik. Ennek három következménye lett, mindegyik fájdalmasan tanulságos.
1. A gradient checkpointing nem óvatosság, hanem követelmény. Nélküle nem a folyamat halt meg egy szokásos memóriahibával, hanem az egész gép újraindult. Az egyesített memóriában nincs kihez visszatérni: ha a GPU-allokáció elfogyasztja a rendszermemóriát, nincs túlélő folyamat, ami lekezelje.
2. A 2,6-szoros gyorsítást eldobtam. Van egy technika (packing), ami több rövid tanítópéldát fűz egyetlen szekvenciába, és ezzel epochonként 36 percről 14-re vitte volna a 2B-s próbafutást. A könyvtár viszont figyelmeztet: a példák elkülönítését csak bizonyos figyelem-implementációk garantálják, amik ezen a chipen nem érhetők el. Elkülönítés nélkül a modell egy vers tanulása közben látná az előzőt, a tanítójel hamis lenne, és pont a magolás-mérést rontaná el, ami a munka fő kérdése. 2,6-szoros sebesség egy érvénytelen méréshez nem üzlet.
Mellékesen: a könyvtár saját sebességmutatója packing mellett fordítva mutat (0,613 vs 0,575, mintha lassítana), mert a „minta” ott csomagot jelent, nem tanítópéldát. Aki azt olvassa el, pont fordítva dönt.
3. A fordítás sikere nem jelenti, hogy fut. Egy gyorsító könyvtárat (causal-conv1d) sikerült lefordítani erre az architektúrára, importálható, a figyelmeztetés eltűnt vele, a tréning viszont az első lépésnél összeomlik. A modell betöltése még sikeres. A mérés a lassabb, de működő változattal készült.
4. A szakirodalmi recept itt hibás lett volna. A Qwen3.5 nem klasszikus transzformer: a rétegek háromnegyede lineáris figyelem, más névtérrel. A bevett „csak a figyelmi rétegeket hangoljuk” recept ezen a modellen a token-keverő rétegek háromnegyedét kihagyta volna, 32-ből 8-at érintett volna 32 helyett. Ez az a fajta hiba, ami nem robban el, csak csendben rossz eredményt ad.
Amit ez a mérés nem bizonyít
Ha egy összehasonlításnak nincs korlátozás-fejezete, akkor nem mérés, hanem marketing. Az itteni hat:
- Egy szerző. A teljes eredmény Arany Jánosra vonatkozik. A korpusz, a mérőeszköz és a pipeline Petőfire is kész, de a futás nem történt meg.
- Egy modell. Minden mért ág Qwen3.5-9B. Hogy egy kisebb modellen ugyanez jönne-e ki, nem tudom. Az elvárásom az, hogy kisebb modellen nagyobb a stílus-elmozdulás, de nagyobb a károsodás is — de ez elvárás, nem mérés. A nagyobb modellek csak a szabad-prompt demóban szerepelnek.
- Egy seed. Kis korpuszon a véletlen kezdőállapot számít. Amit itt látsz, egyetlen futás.
- A válogató-ágakon kevesebb minta. A B2 és a C2 ötven mintán mér, a többi százötvenen, mert a nyolcszoros generálás nyolcszoros költség. A nagyságrendi különbségek ettől nem változnak, a pontbecslés viszont zajosabb.
- A legjobb ág sem jó. A C2 szótagpontossága 0,471, Arany 0,800-ánál. Ez a legjobb az ágak közül, nem „jó”. A gép a lehetséges teljesítmény hatvan százalékán áll.
- A szabad-prompt demó nem mérés. Egy prompt, magonként egyetlen kiválasztott vers, öt-hat mag ágonként. A modellméret-összevetés számai (9B nyers 2,400 · 35B 2,444 · 9B betanított 2,556) egymás szórásán belül vannak, sorrendet nem állítanak. A két bemásolt vers pedig egyetlen első próbálkozás, válogató nélkül, ismeretlen beállításokkal: viszonyítási pont, nem mérési ág.
Összefoglalva
A címben feltett kérdésre, tud-e a gép Arany Jánosul, a mérés pontos választ ad, két részben.
A formát nem tőle kapod. A szabályos szótagszámot, a strófaszerkezetet, a rímet olcsóbban, megbízhatóbban és kevesebb mellékhatással megveszi egy determinisztikus válogató. Aki csak szabályos sorokat akar, annak a finomhangolás rossz vásár, és ez az a mondat, amit nem tudtam volna leírni, ha nem mérem meg a válogató-ágat is.
A hangot viszont igen. Azt, amit a válogató definíció szerint nem tud kiválasztani, mert a célfüggvénye nem ismeri. A felismerhetőség 56%-ról 92%-ra megy, miközben a gép egyetlen sort sem másol.
És a kettő nem alternatíva. A legjobb eredmény mindkettőt használja, ráadásul gyorsabban is fut, mert a betanított modellnek nem kell tizenötször hosszabb utasítást olvasnia minden egyes vers előtt.
A három dolog, ami túléli ezt a konkrét kísérletet:
- A mérőeszközt előbb kell megmérni, mint a modellt. A kontrollcsoportos rímvalidáció volt a legunalmasabb két nap ebben a munkában, és nélküle minden utána következő szám hihetetlen lett volna.
- Ha a jelzőszámod nem a feladatot méri, ne az alapján dönts. A tankönyv szerint az egy epochos állapotot kellett volna választanom. Az minden mért tengelyen rosszabb.
- Mindig legyen egy olcsó ellenfél. Nem a nyers modellhez kell hasonlítani, hanem a legjobb megoldáshoz, ami tanulás nélkül elérhető. Ha nincs ilyen a mérésedben, akkor nem azt mérted, hogy megérte-e, csak azt, hogy történt-e valami.
A negyedik pedig inkább hozzáállás: a mérés akkor ér valamit, ha készen állsz arra, hogy az eredmény ne azt mondja, amit vártál. Én azzal a feltevéssel indultam, hogy a finomhangolás jobb verseket ír, és hogy a fő kockázat a magolás. Egyik sem jött be. Helyette kiderült valami pontosabb, de csak azért, mert négy mérőeszköz közül három ellentmondott egymásnak, és nem választottam ki közülük azt, amelyik a legjobban hangzott volna.
A nyers adatok
Ez a mérés végig újrafuttatható, nem „a szerző szavára” kell hinni benne. A korpusz közkincs, tehát ki tudtuk adni az egészet: github.com/k3net/docai-evals → lora-vs-reranker-hu-verse
Ami ott van: a teljes pipeline a korpusz letöltésétől a kiértékelésig, mind a 800 generált vers soronkénti mérési adatokkal, a tanulási görbe, a mérőeszköz validációja, és a MEK-csomagok sha256 lenyomata, utóbbi azért, hogy ellenőrizhesd, ugyanazt a szöveget kaptad, amiből mértünk.
A fenti dokumentumkezelős demó is teljes egészében ott van: 19 futás, mind a nyolc jelöltjével, pontszámmal és rímelemzéssel, tehát nem csak a kiválasztott verseket látod, hanem azt is, mi közül választott a válogató, és hol tört döntetlent a generálási sorrend.
A generált verseket GPU nélkül, két paranccsal újra lehet pontozni:
python3 code/evaluate.py --generations generations
python3 code/author_clf.py --score --generations generations
Ezek a cikk minden táblázatát előállítják. Kipróbáltuk üres könyvtárból: a korpusz-lenyomat és minden szám a tizedesig egyezett.
A mérőeszköz külön is használható: hu_prosody.py, magyar szótagszámlálás, rímfelismerés és rímséma, függőségek nélkül. A módszertani leírás, a korlátokkal együtt: evals/hu-verse-prosody.
A kísérlet nyílt: a korpusz közkincs (MEK), a modell nyílt súlyú, a mérőeszköz egyetlen külső könyvtárat sem használ. Hardver: NVIDIA GB10, 121 GB egyesített memória. Tréning: 63,8 perc, 36,2 millió tanított paraméter a 8,99 milliárdból (0,40%).