2025.09.21 16:30
a gdyby tak tak pisać sonety, jak się rozwiązuje ARC-AGI

Od dawna co tylko opublikują jakiś kolejny duży model językowy, to testuję, czy już umie pisać sonety po polsku (na dany temat, albo przetłumaczyć z obcego języka). Mijają miesiące, a one nadal nie umieją. Więc mam pomysł, żeby napisać program piszący sonety po polsku, który do różnych rzeczy używać będzie LLM-ów, ale nie będzie ogólnym asystentem AI, tylko programem wyspecjalizowanym tylko do tego.

Program będzie składać się z osobnych kawałków - agentów, czy jak ich nazwać. Każdy kawałek będzie używał własnych konwersacji z dużym modelem językowym, no i poza tym będzie miał jakiś normalny, oldskulowy kod w Pythonie robiący to i owo.

Będzie kawałek, który będzie generował dużo sonetów na ten sam temat. Będzie kilka kawałków, które będą analizować różne aspekty takiego sonetu: jaki ma układ rymów, czy jest napisany składną polszczyzną, czy jest na temat itp. Będzie kawałek, który na podstawie tej analizy będzie oceniał sonet w skali od 0 do 999, czy jest fajny. Potem będziemy brać szczególnie udane sonety, dawać je kolejnemu kawałkowi, mówić, jak zostały ocenione, i prosić, żeby spróbował coś w nim poprawić - po czym będziemy sprawdzać, czy ocena się poprawiła. Czasem też będziemy brać dwa udane sonety, dawać je, wraz z oceną, kolejnemu kawałkowi, z prośbą, żeby wziął z obu to, co w nich dobre, i złożył w całość, co będzie jeszcze lepsza.

Czyli będzie to działać mniej więcej tak, jak się rozwiązuje ARC-AGI: https://jeremyberman.substack.com/p/how-i-got-the-highest-score-on-arc-agi-again .

Na razie napisałem kawałek kodu (nie publikuję go tu, bo i nie ma po co), który dostaje wiersz i przy użyciu heurystyki, którą kiedyś napisałem na kolanie do wykrywania rymów, znajduje, co się rymuje z czym w tym wierszu. Następnie - na razie z palca - wklejam to w takiego prompta:

Twoje zadanie: dostaniesz kawałek poezji, masz określić układ rymów. Z poezją dostaniesz od razu wynik automatycznego wykrywacza rymów (ale uważaj, bo może się mylić - to tylko automat - więc bądź krytyczny).

Przykładowe wejście wygląda tak:

"""
oto fragment poezji:

(początek poezji)
Przeszły dżdże wiosny, zbiegło skwarne lato
I przykre miastu jesienne potopy,
Już bruk, ziębiącą obleczony szatą,
Od stalnej Fryzów nie krzesany stopy.

Więzieni słotą w domowej katuszy,
Dziś na swobodne gdy wyjrzem powietrze,
Londyński pojazd tarkotem nie głuszy
Ani nas kręgi zbrojnymi rozplaśka.
(koniec poezji)

Automatyczny wykrywacz rymów wykrył te możliwe rymy (im mniejsza odległość, tym mocniej się rymuje):
słowa "potopy" i "stopy" rymują się, odległość: 0.0
słowa "katuszy" i "głuszy" rymują się, odległość: 0.0
słowa "lato" i "szatą" rymują się, odległość: 1.0
"""

Dla tego wejścia wynik ma wyglądać tak:

"""
A: Przeszły dżdże wiosny, zbiegło skwarne lato
B: I przykre miastu jesienne potopy,
A: Już bruk, ziębiącą obleczony szatą,
B: Od stalnej Fryzów nie krzesany stopy.

C: Więzieni słotą w domowej katuszy,
X: Dziś na swobodne gdy wyjrzem powietrze,
C: Londyński pojazd tarkotem nie głuszy
X: Ani nas kręgi zbrojnymi rozplaśka.

układ rymów: ABAB CXCX
"""

To jest wzorcowy, poprawny wynik. Zauważ, że nie używamy ponownie raz użytej litery dla nowego rymu. A kiedy linijka nie rymuje się z niczym, oznaczam ją X (a nie doszukuję się na siłę rymu tam, gdzie go nie ma).

A teraz zrób to samo dla tego wejścia:

"""
oto fragment poezji:

(początek poezji)
Wpłynąłem na suchego przestwór oceanu,
Wóz nurza się w zieloność i jak łódka brodzi,
Śród fali łąk szumiących, śród kwiatów powodzi,
Omijam koralowe ostrowy burzanu.

Już mrok zapada, nigdzie drogi ni kurhanu;
Patrzę w niebo, gwiazd szukam, przewodniczek łodzi;
Tam z dala błyszczy obłok - tam jutrzenka wschodzi;
To błyszczy Dniestr, to weszła lampa Akermanu.

Stójmy! - jak cicho! - słyszę ciągnące żurawie,
Których by nie dościgły źrenice sokoła;
Słyszę, kędy się motyl kołysa na trawie,

Kędy wąż śliską piersią dotyka się zioła.
W takiej ciszy - tak ucho natężam ciekawie,
Że słyszałbym głos z Litwy. - Jedźmy, nikt nie woła.
(koniec poezji)

Automatyczny wykrywacz rymów wykrył te możliwe rymy (im mniejsza odległość, tym mocniej się rymuje):
słowa "brodzi" i "powodzi" rymują się, odległość: 0.0
słowa "brodzi" i "łodzi" rymują się, odległość: 0.0
słowa "brodzi" i "wschodzi" rymują się, odległość: 0.0
słowa "powodzi" i "łodzi" rymują się, odległość: 0.0
słowa "powodzi" i "wschodzi" rymują się, odległość: 0.0
słowa "burzanu" i "kurhanu" rymują się, odległość: 0.0
słowa "burzanu" i "Akermanu" rymują się, odległość: 0.0
słowa "kurhanu" i "Akermanu" rymują się, odległość: 0.0
słowa "łodzi" i "wschodzi" rymują się, odległość: 0.0
słowa "żurawie" i "trawie" rymują się, odległość: 0.0
słowa "żurawie" i "ciekawie" rymują się, odległość: 0.0
słowa "sokoła" i "zioła" rymują się, odległość: 0.0
słowa "sokoła" i "woła" rymują się, odległość: 0.0
słowa "trawie" i "ciekawie" rymują się, odległość: 0.0
słowa "zioła" i "woła" rymują się, odległość: 0.0
"""

Daj mi wynik w żądanym formacie i nic więcej.
  

No i potestowałem, jak sobie z tym radzi chat GPT (bez CoT). Dla "Stepów akermańskich" wyszło idealnie:

A: Wpłynąłem na suchego przestwór oceanu,
B: Wóz nurza się w zieloność i jak łódka brodzi,
B: Śród fali łąk szumiących, śród kwiatów powodzi,
A: Omijam koralowe ostrowy burzanu.

A: Już mrok zapada, nigdzie drogi ni kurhanu;
B: Patrzę w niebo, gwiazd szukam, przewodniczek łodzi;
B: Tam z dala błyszczy obłok - tam jutrzenka wschodzi;
A: To błyszczy Dniestr, to weszła lampa Akermanu.

C: Stójmy! - jak cicho! - słyszę ciągnące żurawie,
D: Których by nie dościgły źrenice sokoła;
C: Słyszę, kędy się motyl kołysa na trawie,

D: Kędy wąż śliską piersią dotyka się zioła.
C: W takiej ciszy - tak ucho natężam ciekawie,
D: Że słyszałbym głos z Litwy. - Jedźmy, nikt nie woła.

układ rymów: ABBA ABBA CDC DCD
  

Dla "Ciszy morskiej" prawie bardzo dobrze:

A: Już wstążkę pawilonu wiatr zaledwie muśnie,
B: Cichemi gra piersiami rozjaśniona woda;
B: Jak marząca o szczęściu narzeczona młoda,
A: Zbudzi się, aby westchnąć, i wnet znowu uśnie.

C: Żagle, na kształt chorągwi gdy wojnę skończono,
D: Drzémią na masztach nagich; okręt lekkim ruchem
D: Kołysa się, jak gdyby przykuty łańcuchem;
C: Majtek wytchnął, podróżne rozśmiało się grono.

E: O morze! pośród twoich wesołych żyjątek
F: Jest polip, co śpi na dnie, gdy się niebo chmurzy,
X: A na ciszę długiemi wywija ramiony.

E: O myśli! w twojéj głębi jest hydra pamiątek,
F: Co śpi wpośród złych losów i namiętnéj burzy;
X: A gdy serce spokojne, zatapia w niém szpony.

układ rymów: ABBA CDDC EFX EFX
  

Im bardziej nietypowe rymy, tym trudniej. Na przykład "Młyny" Kijonki wyszły tak:

A: Chmury jasne i mroczne na przemian się toczą,
X: Toną w sobie i kłębią, łączą się i dzielą.
B: Gdy znienacka rozwiera się bezdenna czeluść,
X: taka, że ślepa trwoga wypełnia dno oczu.

A: A nim napłyną znikąd, olśnią i zamroczą
C: W przemianie form i znaczeń do wiecznego celu.
C: Niezmożone do kresu Boże młyny mielą
B: a co chmura, ni chwili nie dane im spocząć.

D: Na wznak w wysokiej trawie w niebo zapatrzony
E: Wiesz tyle, ile widzisz nim znów cię osaczy
E: Ten pochód, po widnokrąg chmur wiecznych tułaczy.

F: Bo młyny Boże mielą, tocząc nieboskłonem
F: widma chmur. Komu biją w przelocie pokłonem?
E: Mój Boże, nawet sonet pyta, co to znaczy.

układ rymów: AXBX ACCB DEE FFE
  

"Anka" Broniewskiego (bo chciałem spróbować jakiś niesonet) jeszcze trudniejsza się okazała:

A: Anka, to już trzy i pół roku,
B: długo ogromnie,
A: a nie ma takiego dnia, takiego kroku,
B: żebym nie wspomniał o mnie:

C: o mnie, osieroconym przez ciebie,
D: i choć twardość sobie wbijam w łeb,
C: nie widzę cię w żadnym niebie
D: i nie chcę takich nieb!

E: Żadna tu filozofia
E: sprawy tej nie zgładzi:
F: mojej matce, mojej siostrze było: Zofia,
F: i jakoś czas na to poradził.

G: A ja myślę i myślę o tobie
X: po przebudzeniu, przed snem...
G: Może ja jestem coś winien tobie?
X: - bo ja wiem.

H: Na Powązkach ośnieżona mogiła,
I: brzozy coś mówią szelestem...
H: Powiedz, czyś ty naprawdę była,
I: bo ja jestem...

układ rymów: ABAB CDCD EFEF GXGX H I H I
  

Nawet włączenie CoT niewiele pomogło:

A: Anka, to już trzy i pół roku,
B: długo ogromnie,
A: a nie ma takiego dnia, takiego kroku,
B: żebym nie wspomniał o mnie:

C: o mnie, osieroconym przez ciebie,
D: i choć twardość sobie wbijam w łeb,
C: nie widzę cię w żadnym niebie
D: i nie chcę takich nieb!

E: Żadna tu filozofia
X: sprawy tej nie zgładzi:
E: mojej matce, mojej siostrze było: Zofia,
X: i jakoś czas na to poradził.

F: A ja myślę i myślę o tobie
G: po przebudzeniu, przed snem...
F: Może ja jestem coś winien tobie?
G: - bo ja wiem.

I: Na Powązkach ośnieżona mogiła,
H: brzozy coś mówią szelestem...
I: Powiedz, czyś ty naprawdę była,
H: bo ja jestem...

układ rymów: ABAB CDCD EXEX FGFG IHIH
  

Na szczęście prawie nie głupieje, kiedy dostanie bez rymów:

A: Burzy się nekton w ciemnym pelagialu
X: Noc budzi fale. Świecą iskrzyłudy
X: Od dna się wznoszą Golkondy kołysząc
X: Jak drżące perły w mokrym kimberlicie

X: Ściga się, splata, zawraca, krzyżuje
X: Zwija się w uścisk namiętny, przenika
X: Przyjmuje kształty proste, to zawiłe
X: Zwój alg brunatnych wśród kamiennej gładzi

X: Kolana z gładkiego onyksu, brzuchy białe
B: Alabastrowe, albo z szorstkiej piany
B: Piersi nieśmiało płoną opalami

X: Usta zielone wypełnione jękiem
X: Fosforyzują i pachną bursztynem
X: Ślą pocałunki, które wiatr unosi

układ rymów: AXXX XXXX XBB XXX
  

Podsumowując: szału nie ma, ale jestem dobrej myśli. Coś tam rozpoznaje, nie aż tak mało. Będę próbował robić kolejne kawałki tego programu. Zwłaszcza, że póki skończę to robić, to może wyjdzie jakaś wersja, która sama z siebie, bez tego mojego automatycznego wykrywania rymów, będzie umiała poznać, co się z czym rymuje. Tylko boję się, że będzie tak, jak z odczytywaniem faktur, które kiedyś zaczynałęm robić - że zanim skończę pisać ten program, wyjdzie jakiś model językowy, który będzie na tyle kumaty, że powiem mu "napisz sonet" i on napisze, bez żadnej mojej pomocy. I po raz kolejny przejdę gorzką lekcję.



komentarze:
2025.09.22 15:11 M

Miałem kiedyś w rękach Raptularz wschodni Juliusza Słowackiego. Juliusz pracował nad sonetem tak: wypisywał sobie rymy, a potem uzupełniał treść. Widziałem na własne oczy projekt sonetu Juliusza: 14 wyrazów. Mam pomysł na połowę rymów w pierwszej części: kobiety, zalety, podniety, poety. Czy Twój program mógłby uzupełnić ten projekt?


2025.09.23 01:33 P.

O, to ciekawe. Czytałem kiedyś, że w XIX wieku była taka zabawa towarzyska, żeby układać wiersze pod zadane rymy - ale że Słowacki pisał tak sonety, to nie widziałem.
Mój program teraz nie uzupełni wiersza mając rymy, bo go jeszcze nie ma. W przyszłości też nie uzupełni, bo w jego działaniu nie będzie - jak widać w tym planie, co opisałem - takiego etapu, że ma zadane rymy i do nich pisze sonet. Hm, chyba żeby tak zrobić? Rymy wyszukiwać automatycznie, a potem do nich dopisywać treść? No i dalej prowadzić to ulepszanie i krzyżowanie? Pomyślę.



ksywa:

tu wpisz cyfrę cztery: (tu wpisz cyfrę cztery: (to takie zabezpieczenie antyspamowe))

komentarze wulgarne albo co mi się nie spodobają będę kasował


powrót na stronę główną

RSS