keskiviikko 30. heinäkuuta 2025

Tekoäly ja antiikin runous


Troijan sota: sotureiden kaksintaistelu. Kuva ruukun kyljestä, n. 540 eaa. 
(Wikimedia Commons, CC0)

Kävin keväällä Sinebrychoffin museon Antiikin sankarit -näyttelyssä. Museokaupasta tarttui mukaan Arto Kivimäen kirja Ilias lapsille, suorasanainen esitys Homeroksen Iliaasta. En ole ennen lukenut Iliasta missään muodossa ja käsitykseni Troijan sodastakin (noin 1200 eaa.) on ollut varsin rajoittunut. Luin kirjan ja tuli paikatuksi yksi aukko sivistyksessä. Kyseessä on tarina omanarvontuntoisesta ja sotasaaliin jaon takia loukkantuneesta kreikkalaisesta soturista Akhilleuksesta, joka kieltäytyy taistelemasta troijalaisia vastaan, mutta lopulta kuitenkin lähtee mukaan. Toimintaakin riittää: kuka milloinkin keihästää kenet, miten juonittelevat jumalat osallistuvat taisteluihin.

Alkuperäinen teksti, jonka sanotaan olevan peräisin sokealta 700-luvulla eaa. eläneeltä Homerokselta, on tietenkin kreikankielinen ja runomuotoinen, runomittana heksametri. Runomuotoinen Otto Mannisen suomennos on vuodelta 1919.

Luettuani suorasanaisen tekstin alkoi kiinnostaa katsoa runomuotoistakin. Otto Mannisen käännös on minusta hieman raskasta luettavaa, tekisi mieli kutsua ainakin paikoin kalikkakieliseksi. Syy tähän on sinänsä ilmeinen: ei liene aivan helppo tehtävä noudattaa samaan aikaan sekä alkutekstin sisältöä ja tunnelmaa että sovittaa suomen kieli heksametrimittaan. Runous ei kuulu minun vahvuusalueisiini, joten tämä on mitä suurimmassa määrin maallikon arvelu.

Ajattelin kuitenkin katsoa, miltä kreikankielinen teksti näyttää, kun tämäkin on helposti saatavissa. Kreikan lukemisessa on luonnollisesti haasteensa, mutta matemaatikko sentään tuntee kirjaimet; kaikkiin olen matematiikassa törmännyt. Ääntämisen hienoudet jäävät arvoitukseksi, mutta voisihan kreikan opiskelun ehkä aloittaa näinkin. Näytteeksi Iliaan 19. laulun alkusäkeet:

Ἠὼς μὲν κροκόπεπλος ἀπ᾽ Ὠκεανοῖο ῥοάων
ὄρνυθ᾽, ἵν᾽ ἀθανάτοισι φόως φέροι ἠδὲ βροτοῖσιν:
ἣ δ᾽ ἐς νῆας ἵκανε θεοῦ πάρα δῶρα φέρουσα.
εὗρε δὲ Πατρόκλῳ περικείμενον ὃν φίλον υἱὸν
κλαίοντα λιγέως: πολέες δ᾽ ἀμφ᾽ αὐτὸν ἑταῖροι
μύρονθ᾽: ἣ δ᾽ ἐν τοῖσι παρίστατο δῖα θεάων,
ἔν τ᾽ ἄρα οἱ φῦ χειρὶ ἔπος τ᾽ ἔφατ᾽ ἔκ τ᾽ ὀνόμαζε:
‘τέκνον ἐμὸν τοῦτον μὲν ἐάσομεν ἀχνύμενοί περ
κεῖσθαι, ἐπεὶ δὴ πρῶτα θεῶν ἰότητι δαμάσθη:
τύνη δ᾽ Ἡφαίστοιο πάρα κλυτὰ τεύχεα δέξο
καλὰ μάλ᾽, οἷ᾽ οὔ πώ τις ἀνὴρ ὤμοισι φόρησεν.

Toiseksi viimeisestä säkeestä ainakin löytyy jotakin tunnistettavaa, Hefaistos-jumalan nimi (taivutettuna): Ἡφαίστοιο .

Seuraavana luonnollisena askelena on kokeilla, miten tekstin kääntäminen sujuu tekoälyltä, kun tavoitteena on joko proosateksti tai käännös runomuotoon heksametri säilyttäen. Pyysin kumpaakin ChatGPT:ltä. Ensin proosateksti:

Krokoottipukuinen Eos (Aamunkoitto) nousi virtaavasta Okeanoksesta,
tuodakseen valon kuolemattomille ja kuolevaisille.
Ja hän (Thetis) saapui laivoille, tuoden mukanaan jumalan lahjat.
Hän löysi poikansa Achilleuksen Patrokloksen viereltä,
itkemässä kirkkaalla äänellä; ja monet toverit ympärillä
valittivat. Ja jumalattarista loistavin seisoi heidän keskellään,
otti häntä kädestä, puhui ja kutsui nimeltä:
"Poikani, vaikka suremmekin, jätämme nyt hänet lepäämään,
sillä hänet on ensimmäisenä jumalten tahdosta voitettu.
Sinä taas ota vastaan Hefaistokselta kunniakkaat varusteet,
erittäin kauniit, jommoisia ei yksikään mies ole koskaan kantanut harteillaan."

Ja sitten runomuotoinen, jota ChatGPT kutsuu heksametrin mukaiseksi pastissiksi:

Keltahuntuinen Eos nousi jo Okeanoksen virroista,
tuoden kuolemattomille ja ihmisillekin valon.
Saapui hän laivoille, tuoden mukanaan lahjat jumalalta.
Siellä hän löysi poikansa, Patrokloksen vierellä istui
itkien ääneen; ja monet toverit hänen ympärillään
vaikeroivat. Näiden keskelle astui jumalattarista kirkkain,
tarttui hänen käteensä ja puhui, nimeltä kutsui:
"Poikani, jääköön nyt tämä mies, vaikka sydän itkee,
lepäämään maahan — näin olivat jumalat päättäneet ensiksi.
Sinä ota vastaan Hefaistoksen tekemät loistavat varusteet,
kauneimmat, joita ei yksikään mies ole yllä kantanut."

Vertailun vuoksi Otto Mannisen käännös:

Virrast' Okeanon nous Eos sahramivaippa,
rientäen valkeudeks ikivaltain, ihmisienkin.
Koht' emo laivain luo sepon korkean antimet saattoi;
vihlovin itkuin viskauneen yli ystävän ruumiin
poikans' armaan keksi ja itkevän kumppanienkin.
Astui luo emo kuolematon, kave, kantaja ylhä,
aaluvataan kädest' otti ja viihteli, noin sanan virkkoi:
”Lapseni, kuolleen nukkua suo, suru suuri jos onkin,
kosk' ikivaltain sallima on hänet sortanut surmaan.
Täss' ota vastaan nyt asu kaunis, lahja Hefaiston;
ei sovin moisin viel' uros varttaan lie varaellut.”

Seitsemännen säkeen alussa on omituinen sana 'aaluvataan'. Tekstin lähteenä on painetun kirjan skannattu versio. Olisiko niin, että tämä on skannausvirhe ja pitäisi olla 'lastaan'?

Mitä kohtauksessa oikeastaan tapahtuu ja miksi, ei varmastikaan aukea ilman taustatietoja ja aiempien tapahtumien tuntemista. Eikä runomuoto helpota asiaa. Lukija voi halutessaan paneutua vaikkapa Iliaan lasten versioon.

Tämän jälkeen syntyy tietenkin kysymys, millainen runomitta heksametri oikein on ja voiko ChatGPT:n versiota pitää heksametrinä. Luontevaa oli jatkaa tekoälyn taitojen testausta. ChatGPT antoi selvityksen heksametristä, mutta pitäisin kyllä Wikipedia-artikkelia parempana, vaikka ei ChatGPT:lläkään liene ollut suoranaisia virheitä. Heksametrisäe muodostuu kuudesta runojalasta, joista suurin osa on daktyyleja, ts. muotoa  — ∪ ∪ (pitkä tavu, lyhyt tavu, lyhyt tavu).

Pyysin runojalka-analyysia kreikankielisestä versiosta. Tästä sukeutui pitkähkö keskustelu selityksineen ja korjauksineen ChatGPT:n kanssa, ja lopulta päädyttiin seuraavaan translitteroituun analyysiin:

1.
Ēṑs | men kro | kópeplos | ap’ Ōke | anoîo | rhoáōn
 — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — —
2.
Órnyth’ | hin’ atha | nátoisi | phóōs | pheroi ê | de brotoîsin
 — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ | — ∪ ∪ | — —
3.
Hē d’ es | nêas hi | kane the | oû para | dôra | pherousa
 — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ | — —
4.
Heûre de | Patróklōi | perikeí | menon hon | phílon | huión
 — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ | — —
5.
Klaíonta | ligéōs · | poleés d’ | amph’ aûton | hetaî | roi
 — ∪ ∪ | — ∪ ∪ | — ∪ | — ∪ ∪ | — ∪ | — —
6.
Mýronth’ · | hē d’ en | toîsi pa | rístato | dîa | theáōn
 — ∪ ∪ | — ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ | — —
7.
Én t’ ara | hoi phû | kheiri épos | t’ éphat’ ek | t’ onó | maze
 — ∪ ∪ | — ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — —
8.
Téknon e | mòn toûton | men eá | somen akh | nýmenoi | per
 — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — —
9.
Keîsthai, | epeì dêi | prôta the | ō̂n ió | tēti da | másthē
 — ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — —
10.
Týne d’ Hē | phaístoio | para klu | tà teúchea | dêxo
 — ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ | — ×
(6. jalka päättyy katalektisesti: × = anceps)
11.
Kalà mál’, | hoî’ oû | pō tis a | nḕr ṓmoi | si phorē | sen
 — ∪ ∪ | — ∪ | — ∪ ∪ | — ∪ ∪ | — ∪ ∪ | — —

Vertailun vuoksi ChatGPT:n analyysi Mannisen käännöksestä:

1.
Virrast’ / Okeanon / nous Eos / sahrami- / vaippa,
 ∪ ∪ — | ∪ ∪ — | ∪ — ∪ | ∪ ∪ — | ∪ —
           (+ vajaa kuudes jalka)
 1. säe lyhyt, säkeenloppu ikään kuin katkeaa ennen 6. jalkaa — tehokas tyylikeino.
2.
rientäen / valkeu- / deks ikival- / tain, ihmi- / sienkin.
 ∪ ∪ — | ∪ — ∪ | ∪ ∪ — | ∪ ∪ — | ∪ ∪ —
           (+ lyhyt 6. jalka, runollinen vapaus)
3.
Koht’ emo / laivain luo / sepon kor- / kean anti- / met saattoi;
 ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | —
4.
vihlovin / itkuin vis- / kauneen yli / ystävän / ruumiin
 ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ — ∪ | ∪ —
           (+ fragmentaarinen loppu – vapaa muoto)
5.
poikans’ armaan / keksi ja / itkevän / kumppanie- / nkin.
 ∪ ∪ — — | ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | —
 Tässä on painollisten tavujen ketju, spondeevaltainen säe.
6.
Astui luo / emo kuo- / lematon, kave, / kantaja ylhä,
 ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | — —
 Kohtalaisen klassinen rakenne – 5. jalka daktyyli, 6. spondee.
7.
aaluvataan / kädest’ otti / ja viihteli, / noin sanan / virkkoi:
 ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ —
8.
”Lapseni, / kuolleen / nukkua / suo, suru / suuri jos / onkin,
 ∪ ∪ — | ∪ — | ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ ∪
9.
kosk’ ikival- / tain salli- / ma on hänet / sortanut / surmaan.
 ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | — —
10.
Täss’ ota / vastaan / nyt asu / kaunis, lah- / ja Hefaiston;
 ∪ ∪ — | ∪ — | ∪ ∪ — | ∪ ∪ — | ∪ ∪ — | —
11.
ei sovin / moisin / viel’ uros / varttaan / lie varaellut.”
 ∪ ∪ — | ∪ — | ∪ ∪ — | ∪ — | ∪ ∪ — | —

Vähäisellä heksametrin ymmärrykselläni pitäisin kreikankielisestä versiosta tehtyä analyysia pätevänä, mutta olisin eri mieltä Mannisen käännöksen analyysista. Ainakin itse tekisin sen toisin. Ehkä runouden analyysi ei ole myöskään ChatGPT:n vahvuusalueita, jolloin lienee turha pyytää analyysia sen itsensä mittaan tekemästä käännöksestä.

Kaikkiaan tekoälyavusteinen retki antiikin runouteen oli kiinnostava. Jos joku alan spesialisti haluaa kommentoida edellä olevaa, olen iloinen. Tekoälyn kyvykkyys jälleen yllätti, vaikka parantamisen varaakin kyllä jää.

sunnuntai 20. heinäkuuta 2025

Tekoäly ja matematiikka


Mistral-tekoälyn näkemys "voitonriemuisesta tekoälystä,
joka on juuri ratkaissut vaikean matemaattisen ongelman".

Ajoittain silmiin osuu matematiikan tehtäviä, joilla tekee mieli testata tekoälyn matemaattisia kykyjä. Seraavassa esittelen muutaman tehtävän, jotka olen antanut ChatGPT:n, Clauden, Copilotin, DeepSeekin ja Geminin ratkaistaviksi. Kaikista olen käyttänyt ilmaiseksi saatavaa versiota, kehittyneemmät versiot pärjäisivät varmaan paremmin. Kokeilut on tehty alkukesän aikana.

Miltä tilanne sitten näyttää? Paljon on kehitystä tapahtunut parin vuoden aikana. Yleisesti ottaen tekoäly pärjää matematiikassa hämmästyttävän hyvin. Koulutason ja yliopistojen peruskurssitason laskennalliset tehtävät ratkeavat pääpiirteissään oikein, vaikka tietty kriittisyys toki on tarpeen. Kouluopetuksen näkökulmia matematiikkaan jouduttaneen miettimään uudelleen. Pelkkä taito ratkaista tehtäviä ei enää riitä motivaatioksi, jos (lähes) kaiken voi kysyä tekoälyltä.

Seuraavassa neljä esimerkkitehtävää, tekoälyn menestys niiden ratkaisemisessa ja omat kommenttini.

Tehtävä 1. Määritä raja-arvo \[\lim_{n \to \infty} \frac{1}{n^2} \sum_{k=1}^{n} k^{1/3}(n-k)^{2/3}.\]

Kyseessä ei ehkä ole aivan tavanomainen raja-arvotehtävä, mutta integraalikäsitteen yhteydessä esitettynä matematiikan opiskelijan pitäisi ainakin päästä alkuun. Kyseessä on integraalin \[\int_0^1 x^{1/3} (1 - x)^{2/3} \, dx\] Riemannin summa, minkä kaikki tekoälyt havaitsivat. Integraali puolestaan on määritelmän mukaan betafunktion arvo $B(4/3,5/3)$. Tekoälyt tuntevat betafunktion ja osaavat palauttaa sen arvot gammafunktioon, jonka avulla päädytään tulokseen $\dfrac{2\pi\sqrt{3}}{27}$.

Copilot ja DeepSeek jättivät vastaukseen beta- tai gammafunktion ja vasta erikseen pyydettäessä lausuivat tuloksen neliöjuuren avulla. Samalla lasketuissa likiarvoissa oli virhettä kolmannessa desimaalissa. DeepSeek laski pyytämättä likiarvon myös betafunktion arvosta ja sai selkeästi virheellisen tuloksen. Huomauttaessani korjasi virheensä. Yllättävää, että numeriikassa on ongelmia.

Tehtävä 2. Annettuna on alla olevan kuvan mukainen kolmio, jossa $|AF|=|FB|$, $|EC|=2|AE|$, $|BD|=3|DC|$ ja kolmion $ABC$ ala on $100$. Laske kolomion $DEF$ ala.

Geometrinen tehtävä, joka voidaan ratkaista monella eri tavalla. ChatGPT käytti pisteille $D$, $E$ ja $F$ suhteellisia barysentrisiä (massapiste-) koordinaatteja kolmioiden alojen suhteen laskemiseen. Alojen laskeminen tällä tavoin ei ollut ainakaan minulle ennestään tunnettua, mutta menettely on pätevä. Ylioppilaskokeessa varmaan vaadittaisiin perustelu. Tulos on $175/6 \approx 29.17$.

Claude valitsi aluksi pisteille $A$, $B$ ja $C$ yksinkertaiset numeeriset koordinaatit ja laski näiden avulla alat, jotka skaalasi lopuksi. Kun esitin menettelystä epäilyni, se laski uudelleen barysentrisillä koordinaateilla hieman sekavasti. Ystävällisesti tulkittuna kuitenkin oikein.

Copilot valitsi lähtöpisteille yksinkertaiset numeeriset koordinaatit ja laski näiden avulla. En ennen tiennytkään, että kolmion ala kärkipisteiden avulla lausuttuna on nimeltään kengännauhakaava (shoelace formula). Menetelmänä numeeristen koordinaattien käyttö on tietenkin epäilyttävää yleispätevyyden kannalta, mutta kelvanneeko loppuhuomautus perusteluksi: 'If you're wondering how we knew the coordinates approach would work — this kind of clever setup is a standard trick in geometry when you're given ratios.'

DeepSeek laski samalla tavoin kuin Copilot menettelyä mitenkään perustelematta.

Gemini laski sivujen suhteiden avulla kunkin kärkikolmion ($AFE$, $BDF$, $CED$) alan suhteen koko kolmion alaan kaavaan $A = \frac{1}{2}bc\sin\alpha$ perustuen ja näiden avulla kysytyn alan.

Tehtävä 3. Tiedetään: $f(t) = 2t - 18$, $f(g(3t+1)) = 1 - (t+1)g(t-3)$ kaikilla $t$. Laske $g(-5)$.

Ehkä hieman hämäävä tehtävä, mutta suoraviivainen ratkaisu löytyy toteamalla, että $3t+1 = t-3 = -5$, kun $t=-2$. Ensimmäisen asteen yhtälöstä saadaan $g(-5) = 19$.

Kaikki tekoälyt ratkaisivat tehtävän tällä tavalla, suhteellisen monimutkaisin ja yksityiskohtaisin vaihein. DeepSeek on ainoa, joka lisäksi yritti selvittää funktion $g$ määrittelyä yleisesti, mutta menestyksettä. Totesi ainoastaan, että lineaarinen lauseke $g(t) = at + b$ ei ainakaan käy.

Tehtävä 4. Ratkaise yhtälöpari \[\left\{\begin{aligned}\sqrt{y} + \sqrt{z} = 3 \\ \sqrt{y+5} + \sqrt{z+3} = 5\end{aligned}\right.\  .\]

Helpointa lienee siirtyä uusiin tuntemattomiin, $u=\sqrt{y}$, $v=\sqrt{z}$, jolloin toinen tuntematon voidaan helposti eliminoida: $v=3-u$. Syntyvä juuriyhtälö voidaan ratkaista kahdella neliöön korottamisella. Ratkaisuja saadaan kaksi: $y=4,\ z=1$ ja $y=121/64 \approx 1.89,\ z=169/64 \approx 2.64$. Neliöön korotusten takia on tarkistettava, että nämä todella toteuttavat molemmat yhtälöt.

Claude ja DeepSeek antoivat moitteettoman ratkaisun. Gemini ilmoitti heti aluksi oikean tuloksen ja antoi Python-koodin, jolla se oli laskettu. Tässä oli käytetty sympy-paketin nonlinsolve-rutiinia, joka käsittääkseni ratkaisee symbolisesti. Tämän jälkeen Gemini esitti algebrallisen ratkaisun yksityiskohtaisesti kaksine neliöönkorotuksineen.

ChatGPT ja Copilot siirtyivät uusiin tuntemattomiin, mutta etsivät ratkaisuja tämän jälkeen kokeilemalla numeerisia arvoja väliltä $[0,3]$. Kumpikin löysi kokonaislukuratkaisun $(4,1)$. ChatGPT tarjosi hieman sekavassa esityksessä lisäksi ratkaisuja $(1.5,3.15)$ ja $((14-6\sqrt{5})/4,(14+6\sqrt{5})/4)$ $\approx (0.15,6.85)$. Copilot puolestaan ratkaisua $(9/4,9/4)$. Toinen oikea ratkaisu jäi löytymättä.


Claude: yhtälöiden kuvaajat

Pyysin myös graafista esitystä yhtälöiden kuvaajista. ChatGPT ja Claude antoivat kuvan suoraan näytölle. Copilot, DeepSeek ja Gemini antoivat Python-koodit, jotka ongelmitta ajoin.DeepSeek innostui erikseen pyytämättä tekemään kaikkiaan neljä erilaista kuvaa, joukossa yhtälöien määrittämät pinnat kolmiulotteisessa avaruudessa.

DeepSeek: yhtälöitä vastaavien funktioiden kuvaajat
kolmiulotteisessa avaruudessa

Graafinen esitys osoittaa sen vaikeuden, johon numeerisissa kokeiluissa joudutaan. Jos kokeiltava piste on alueella, jossa käyrät ovat lähellä toisiaan, yhtälöt lähes toteutuvat. Tästä ei kuitenkaan voi päätellä, että piste olisi lähellä ratkaisua.

Kaikissa tehtävissä matemaattiset lausekkeet esitettiin ruudulla ladottuina tai ainakin selkeästi ymmärrettävinä. Dokumentin tallettaminen tuotti parhaimmillaan ajokelpoisen LaTeX-koodin. Hajontaa kuitenkin oli. Dokumentti saattoi olla selkeä merkkipohjainen tekstitiedosto tai hieman vaikeatulkintaisempi, josta esimerkiksi tieto murtolukujen osoittajista ja nimttäjistä oli kadonnut. Kehittämistä vielä riittää.