torstai 6. elokuuta 2009

Päntätty sanoja

Kesäni on kulunut lojbanin osalta päntätessä sanoja tuossa alla aikaisemmin esittelemälläni python-pohjaisella sanastonopiskelutyökalulla. Olen käynyt läpi nuo laatimani 7 x 53 eli n. 500 gismua. Ainakin vähän aikaa olen siis jokaisen näistä osannut, mutta nyt olisi aika kerrata koko joukko taas uudelleen. Uusi kertaus aivan ilmeisesti olisi paljon sujuvampaa.

Samalla olen arvioinut opiskeluskriptin laatua ja löytänyt luonnollisesti parannettavaa. Suurin ongelma skriptissä on nojautuminen suoraviivaisesti pythontulkin satunnaisvalitsimeen, joka listasta poimii sanoja. Seurauksena on se, että eri sanaparit (lojban/suomi) etenevät prosessin läpi kovin vaihtelevalla nopeudella. Nopeuserosta johtuu, että vauhdilla etenevät parit tarttuvat aivokuoreni neuroneihin paljon helpommin kuin harvakseen toistuvat hitaasti etenevät, joiden kanssa tulee usein virheitä. Tätä algoritmia pitäisi parantaa.

Toinen parannusidea on lisätä prosessiin kaksi uutta vaihetta. Ensimminen niistä tulee kolmannen vaiheen jälkeen. Kolmas vaihe on monivalinta suomesta lojbaniin. Uusi neljäs vaihe laajentaisi kolmatta siten, että valittu sana on pakko kirjoittaa, siis kopioida esitetyistä vaihtoehdoista. Kirjoittaessa uusi lojbankielinen sana tarttuisi mieleen oleellisesti helpommin, kuin esittämällä vain numeron ja lausumalla sana mielessä.

Toinen uusi vaihe tulisi viimeiseksi. Siinä jo opittuja sanoja kertailtaisiin suhteellisen harvakseen, estäen niiden pikaisen unohtumisen nopean perusoppimisvaiheen jälkeen. Oppimisprosessista tulisi siis seitsenvaiheinen. Uskon prosessin olevan stressitön, innostava ja tehokas: vielä parempi kuin vanha viisivaiheinen, jota jo olen pitänyt jossakin määrin "koukuttavana".

Aikomukseni on siis kirjoittaa tämä mielestäni tärkeä työkalu uusiksi, tällä kertaa C++:lla ja Qt-kirjastoja käyttäen. Täällä tavalla saisin nytkin aikaan sekä linux- että windows-versiot samalla vaivalla.

Mutta minulla on vielä uusi taka-ajatus! Minua kiehtoo "Mindforth"-sivujen AGI-Milestones malli.
Siinä esitetään Yleisen Tekoälyn saavuttamista seuraavien vaiheiden kautta:
1. Quickening
2. Generation of Thought
3. Cognitive Chain Reaction
4. Meanderin Chain of Thought
5. Selfreferential Thought.

En selitä muita kuin ensimmäisen vaiheen. "Quickening" on vaihe, jossa SW-toteutus on taukoamatta aktiivinen, työskennellen luupissa sisäisen tilansa ja syöttömateriaalin parissa pyrkien saavuttamaan asetetun tavoitteen mukaisesti yhä paremman "kognition tason". Ohjelma ei siis ole esim. reaktiivinen: reagoi ärsykkeisiin ja toimenpiteiden jälkeen pysähtyy odottamaan uusia ärsykkeitä, vaan hellittämättä yrittää reaktiivisen käyttäytymisen lisäksi parantaa sisäistä tilaansa.

Ajattelin kokeilla sanastonopiskeluohjelmassa "quickening" -periaatetta. Opiskeluohjelmasta tulee siis jatkuvasti pyörivä, suunnitellen kokoajan uusia tehtäviä oppilaalle, analysoiden edistymistä. Kyseessä ei tietenkään ole mikään AI-sovellus, vaan AI:n pohjalla oleva ohjelmointi- "patterni".

No, olen tehnyt muutakin, josta kerron enemmän vastaisuudessa. Mutta sen verran, että olen pythonilla tehnyt "satunnaislausegeneraattoria" joka näennäisälykkäällä tavalla generoi satunnaisia, mihinkään asiayhteyteen kuulumattomia bridejä, jotka sisäisesti kuitenkin ovat mielekkäitä lauseita. Työkalua on tarkoitus käyttää opiskeluvälineenä, sanojen opiskelussa ja semanttisena kokeiluna.

4 kommenttia:

Knowledge kirjoitti...

Minä vähän kyllästyin ohjelmaan kaatumisen vuoksi kun opetettuja sanoja meni hukkaan. Ohjelma voisi tallentaa opetustilanteen useammin. Muuten se on hyvin koukuttava.

Olen parantanut sitä niin että numeron sijaan kirjoitan sanan ensimmäisen kirjaimen. 3:n vaiheen jälkeen voisi sopia vaihe jossa lojban-kielinen sana tulisi valita näkemällä esim ensimmäinen ja viimeinen kirjain: Esim. "c...a". Näin sanaa tuettaisiin sanan hahmottumista mieleen. Piilotettujen/vihjattavien kirjainten määrä voisi olla liukuva.

Toinen parantelu, jota olen suunnitellut, olisi aktiivinen opettaminen. Se toimisi Windowsin sivupalkissa jatkuvasti taustalla, eikä käyttäjän tarvitsisi aina erikseen käynnistää ohjelmaa.

JuSa kirjoitti...

Kaikin mokomin! Tee ihmeessä oma versio! Python koodi on vapaasti käytettävissä. Se olisi kiva juttu. Ajatuksena "hangman" johdattelu vaikeissa sanoissa voisi olla toimiva, mutta toisaalta se hidastaisi kokonaisprosessia, jonka nopearytmisyuyttä pidän tärkeänä.

Olen ajatellut "quickening"-taskin ottavan huomioon väärien yritysten laadun: "päin honkia" ja "yksi kirjan väärin" aiheuttavat eri kohtelun, samoin kuin kahden sanan sekoittaminen. Tosin olen myös ajatellut pitää C++/Qt-version lähdekoodin omana tietoani nyt kun Nokian määräämä uusi lisensointi mahdollistaa sen.

Muuten, kaatumisia minulla linux-ympäristössä on ollut vain kun olen yrittänyt syöttää skandeja sisältävän sanan lojban-sanaa odottavaan syöttöön. En ole viitsinyt korjata puutetta. Windows-versiota olen testannut hieman puutteellisesti.

JuSa kirjoitti...

Hieno juttu.

"Erityisenä tavoitteenani on ollut välttää sanojen merkityksen väärinymmärrystä.."

Tuon olen kokenut todelliseksi ongelmaksi, gismuilla kuin ei useinkaan ole suoraa suomenkielistä vastinetta. Olen jättänyt tämän ongelman ratkaisun muille, kehittyneemmille opetusmetodeille (tulevaisuuteen). Sanojen pänttäys on pedagogisesti hölmöä, mutta käynee välivaiheesta ja apuvälineestä.

Knowledge kirjoitti...

Kaksi keinoa tuli mieleen. Ensin kokeilin laajemman sanan, hyperonyymin käyttö, mutta sekin määrittäminen on varmaan melkoisen tulkinnanvaraista.

Toisenlainen tapa olisi keksiä sanoille kulttuurineutraaleja käyttötilanneyhteyksiä. Tein ohjelmaan kokeeksi huoneen, keittiön, jossa painotetaan ruokaan liittyvien sanojen "käyttöä".