Vissza a blogra

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:

ágmit csinál
B0a nyers modell, egyszerű kéréssel
B1a nyers modell, de a kérésbe beteszek négy Arany-verset példának
B2ugyanez + a válogató: nyolc próbálkozásból a legszabályosabb
Ca betanított modell (LoRA)
C2a betanított modell + a válogató
GOLDmaga 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ál85,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ímel1–22–43–4
Arany János86,0%21,0%84,8%
Petőfi Sándor35,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 betartva0,982
szótagszám pontosan stimmel0,800
rímarány0,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:

epoch0,51,01,52,02,53,0
validációs veszteség2,8802,8352,8742,8702,9672,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ányszótagszámismételt sorfelismerhető Aranynak
1 epoch (a „helyes” választás)0,1190,1800,18168,0%
3 epoch (a „túltanult”)0,1770,2030,11877,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.

A validációs veszteség 1,0 epochnál a legjobb (2,835), onnantól romlik 2,968-ig, a tankönyvi szabály szerint tehát az egy epochos állapotot kellene választani. A jobb oldali oszloppárok viszont azt mutatják, hogy a háromepochos, túltanultnak minősített adapter minden mért tengelyen jobb: rímarány 0,119 helyett 0,177, rímminőség 0,092 helyett 0,139, szótagszám 0,180 helyett 0,203, ismételt sor 0,181 helyett 0,118, Aranynak felismerve 68,0% helyett 77,3%.

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 betartva0,5670,7000,573−0,127
strófaméret0,8020,9380,735−0,203
szótagszám pontos0,2060,4090,203−0,207
rímarány0,1140,2360,177−0,059
valódi rím0,0930,2030,139−0,064
kitalált szó (kevesebb a jobb)0,0190,0130,044+0,031
Hat panel a formai metrikákról, ágonként B0, B1, B2, C és C2 oszloppal, szaggatott vonallal jelölve az eredeti Arany-versek mért értékét. A B2, vagyis a példák és a válogató kombinációja vezet a strófaszámban (0,7), a strófaméretben és a szótagszámban (0,409), a betanított C ág pedig 0,573 és 0,203 értékekkel elmarad tőle. A kitalált szavak paneljén fordított a kép: a B2 0,013-mal a legjobb, a C 0,044-gyel a legrosszabb.

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?

ágmit csinálAranynak ítéli
B0nyers modell38,7%
B1+ négy példa56,4%
B2+ a válogató56,0%
CLoRA77,3%
C2LoRA + válogató92,0%
Oszlopdiagram arról, hogy egy független szerzőosztályozó hány százalékban ítéli Aranynak a generált verseket: B0 38,7%, B1 56,4%, B2 56,0%, C 77,3%, C2 92,0%. A B1 és a B2 közti 0,4 pontos visszaesés mutatja, hogy a válogató a stíluson nem mozdít, a B2 és a C2 közti 36 pontos ugrás pedig kizárólag az adapternek tulajdonítható. A klasszifikátor saját pontossága valódi verseken 91,0%, a véletlen tippelés szintje 59%.

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:

Szórásdiagram: a vízszintes tengelyen a szótagszám pontossága, a függőlegesen az Aranynak felismert versek aránya. A B1-ből a B2-be mutató nyíl vízszintes, a válogató a formát javítja, a hangot 56% körül hagyja. A B1-ből a C-be mutató nyíl függőleges, a LoRA a hangot emeli 77,3%-ra. A C-ből a C2-be mutató nyíl mindkét irányba visz, 92%-ig. A GOLD pont, vagyis maga Arany, jobbra fent, 0,8-as szótagpontosságnál áll.

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.

ágfutásrímelő sorpárválogató pontszáma (átlag)
nyers 9B56 / 152,400
35B68 / 182,444
betanított 9B610 / 182,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 modell0,021
LoRA0,067
Arany János0,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 modell0,015
LoRA0,044
Arany János0,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 versekfélretett verseka mi hozzájárulásunk
nyers modell1,48 szó1,38 szó+0,10
LoRA1,241,19+0,05
Oszloppárok a leghosszabb szó szerinti egyezésről szavakban: a nyers modellnél 1,48 a tanított és 1,38 a félretett verseken, ami +0,1 szó különbség, az egy epochos LoRA-nál 1,24 és 1,22, azaz +0,02, a háromepochosnál 1,24 és 1,19, azaz +0,05. A nyolcszavas kill-küszöböt jelző szaggatott vonalat egyik ág sem közelíti meg.

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:

  1. 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.
  2. 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.
  3. Egy seed. Kis korpuszon a véletlen kezdőállapot számít. Amit itt látsz, egyetlen futás.
  4. 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.
  5. 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.
  6. 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:

  1. 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.
  2. 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.
  3. 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%).