Úvod
LangLear je program inspirovaný komerčním programem SuperMemo, který zatím chybí na unixové platformě. Existují dva projekty na převod tohoto výborného programu pod Unix/Linux, žádný z nich ovšem není psán jako webovská aplikace. LangLear je nejstarší z mých projektů, a tak se v současné době dožívá už čvrté výrazné revize (přeprogramování).
Motivace a trocha historie
Jednou mi někdo ukázal program SuperMemo a mně se strašně líbil, ale nelíbilo se mi, že nešel pustit v Linuxu ani ve wine. A tak přišlo na řadu pár probděných nocí a první verze byla na světe. Byla napsána v PHP a bylo ji možné používat tak dva měsíce, potom přestával použitý algoritmus fungovat podle mých představ a program se stával nepoužitelným.
To vedlo k zavržení algoritmu a po zkušenostech s PHP k přechodu k Perlu. Přepracování algoritmu pomohlo jen částečně, protože se to dalo používat skoro třikrát déle (což zas nebylo až tak moc).
V té době jsem také objevil, že starší algoritmy používáné v SuperMemu jsou velmi dobře dokumentované a nechybí ani předpřipravená knihovna s těmito algoritmy, bohužel pro architekturu Win32. Tudíž bylo rozhodnuto o použití jednoho z těchto algoritmů, a to SM-2. Tou dobou se také dočkával (a ještě stále se dočkává) přepisu projekt Ninvent. Pro zjednodušení práce na obou projektech vznikla knihovna Weba. V této podobě používám program již téměř rok a půl a zatím bez problémů.
Během ledna a února roku 2004 jsem celý kód znovu přepsal pod ochranná křídla knihovny Mason. Od tohoto kroku si slibuji větší přehlednost kódu a snažší další vývoj. V této době se začal verzovat LangLear jako 0.4.x.
Jak to funguje aneb trocha architektury
Prohlášením, že klientem této aplikace bude webový prohlížeč, byly všechny práce na klientské části hotovy (ach, jak jednoduché, rychlé a funkční). Na serverovské straně toho bylo potřeba udělat hodně. Serverovské programy jsou psány v Perlu a volány Apachem jako webovým serverem. Všechna data k programu jsou uložena v SQL databázi (momentálně je podporováno pouze MySQL). Verze 0.3.x pro svůj provoz potřebuje knihovnu Weba, od verze 0.4.x pak knihovnu Mason. V dalším textu bude popisována verze 0.4.1.
Použití
Vkládání znalostí
Po instalaci nejsou k dispozici žádné slovníky znalostí, ze kterých byste se mohli učit. Je to tím, že na žádný takový slovník nemám práva a ten, co si vytvářím sám, není zrovna ideální (nejsem lingvista ani pedagog v oboru jazyků). Z toho důvodu je nutné si slovník vytvořit. Je možné kouknout na datatabázové tabulky a nějaký slovník tam naimportovat, na učení je ovšem vhodný slovník za tímto účelem vytvořený.
Při prvním přihlášení je potřeba zřídit si účet a pak se přihlásit. Dalším krokem je vytvoření kursu v menu Course->create new. V něm si svůj kurs pojmenujete a vyberete slovníky, které se chcete učit. Kursů můžete mít, co hrdlo ráčí. Pokud nejsou k dispozici žádné slovníky, je potřeba si nějaký založit nebo obnovit z datového souboru LangLearu. V menu Database->new knowledges můžete přidávat nové znalosti do svých slovníků. Slovníky a jejich svazky (každý slovník musí byt v nějakém svazku) lze vytvořit v kontextovém menu vpravo nahoře Create new dictionary.
Při přidávání se objevuje číslo pojmenované Evaluation
, což ve své podstatě znamená důležitost dané znalosti; čím je číslo vyšší, tím dříve budete od systému vyzváni, abyste se tuto znalost naučili. Ostatní položky musí být jasné na první pohled.
Ve spodní části stránky (s růžovým podkladem) se občas objeví různé chybové hlášky, pokud si jich všimnete, můžete je povětšinou ignorovat. Slouží převážně vývojářům, kterým mohou pomoci také při reportování chyby v programu.
Učení
Učení by mělo být pravidelné (každý den) a přibližně ve stejnou dobu. Je tedy dobré si najít někdy 10 minutek (ráno, večer před spaním), kdy nebudete rušeni a budete vědět, že nenastane mnoho případů, kdy v tuto dobu nemůžete. Systém je zatím natvrdo nastaven tak, že by tato doba měla být plus/minus tři hodiny, měli byste se tudíž vždy trefit do rozpětí šesti hodin. Už mám plán, jak LangLear upravit tak, aby zde toto omezení nebylo, ale kdy se mi jej podaří uskutečnit, … (kde brát čas a nekrást :-).
Vlastní učení má pak dvě fáze, v první fázi se přibírají nové znalosti, ve druhé se tyto znalosti učí v kombinaci s již dříve nabranými, tzv. memorizují. V plánu je i třetí fáze, tzv. fixace, kde by se obtížnější znalosti měly upevňovat. Nové znalosti se přidávají v menu Learning->add knowledges. Zobrazí se otázka a vy si vymyslíte odpověď, kterou můžete napsat do textového pole, pak stačí stisknout tlačítko a srovnat si správnou odpověď s tou vaší. Zde je nutné se ohodnotit jednou ze šesti známek: pět školních (1 - 5; A - E), Šestá známka (I don't know) značí úplnou nevědomost pro velmi obtížné znalosti. Lze také použít vyřazení (disable it) znalosti z učení (například protože je notoricky známá). Právě pro známkování je vhodné seznámit se s algoritmem popsaným níže. V této fázi systém čerpá ze slovníku znalosti, které ještě nejsou v učení. Těch může být mnoho, a tudíž je na uživateli, na kolik si troufne a kolik znalostí si daný den přidá.
Memorování (zapamatovávání si) dané znalosti pak probíhá v menu Learning->memorize. Zde systém prohlédne databázi znalostí, které jsou zařazeny do učení, vybere ty, které se mají zopakovat, a mezi ně zamíchá čerstvě přidané znalosti. Postup učení je pak stejný jako při přidávání znalostí, ale ukončí se, až systém napíše, že další znalost pro opakování není k dispozici.
Popis algoritmu SM-2
Všechny alogoritmy použité pro učení (uložení znalosti v dlouhodobé paměti) jsou vlastně algoritmy o tom, jak zapomínáme. Tyto algoritmy se snaží získat jako vstupní podmínky pouze informace o vaší dlouhodobé paměti a eliminují vstupy o krátkodobé paměti. Na stránkách jednotlivých algoritmů se můžete dozvědět jejich účinnost, vybraný algoritmus ji přes obrovskou jednoduchost (ve své podstatě jedna matematická operace) má 92%, což je velmi dobrá hodnota. Nejúspěšnější algoritmy přesahují 96 % .
Pro potřeby webového rozhraní jsem algoritmus SM-2 lehce modifikoval, pokud si vezmeme novou znalost a budeme sledovat její život, zjistíme toto. V první den, kdy jsme si ji přidali, se automaticky naplánuje na druhý den, bez ohledu na známku, jakou jsme jí přiřadili. Známku si zapamatuje a vypočítá si koeficient e-factor (koeficient učení). Druhý den se opět napevno naplánuje na šestý den učení a opět si spočítá na základě předchozího e-factoru a nové známky (pouze té první v daný den, jen ta je směrodatná pro dlouhodobou paměť) novou hodnotu e-factor. Šestý den si opět přepočítá e-factor, ale opakování této znalosti naplánuje na základě spočtené hodnoty e-factoru. Smyslem úvodního pevného plánování je, aby hodnota e-factor měla nějakou vypovídající hodnotu na základě několika (alespoň třech) měření dlouhodobé paměti.
V algoritmu je ještě zakopaný malý pejsek (omlouvám se kynologům). Pokud znalost dostane známku horší než 3, pak na předchozí učení algoritmus zapomene a znalost se naplánuje tak, jako by byla právě přidána, s tím, že hodnota e-factor se nenastaví na defaultní hodnotu, ale použije se ta z předchozího učení. Toto pravidlo platí v libovolné fázi opakování znalosti.
Pohled dovnitř
Sada perlovských skriptů napsaných jako komponenty knihovny Mason spolu s knihovnou LangLear vytváří rozhraní mezi uživatelem a SQL databází. Abychom to tak neodbyli, tak alespoň obrázek ERA modelu:
Už mám připraveno mnoho vylepšení tohoto modelu, ta ovšem čekají na verzi 0.5.x, zatím je důležitější pořádně zvládnout přechod na Mason a rozchodit tam vše důležité.
Další vývoj
Tak jako vždy je toho v plánu hodně, ale není čas. Takže jsem se to rozhodl řešit tak, že vždy doprogramuji to, co potřebuji. A když si představím, že bych to musel programovat, tak už daná funkcionalita není tak potřebná. Přesto bych chtěl jako nadstavbu vybudovat web, kde by se soustředily nejrůznější volné slovníky se znalostmi, které jsou určeny k učení. Slovník pro učení a jeho znalosti musí totiž splňovat několik parametrů:
- malá velikost (maximálně několik tisíc znalostí)
- ucelenost znalostí
- uspořádanost znalostí (od nejlehčí po nejtěžší)
- dříve získané znalosti by se později měly uplatnit v obtížnějších znalostech
- otázky i odpovědi by měly být jednoznačné, jednoduché a jasné
Pokud dodržíte tyto pravidla, umíte vytvářet správné slovníky pro učení. Na stránkách supermema najdete celé pojednání o tom, jak vytvářet nové znalosti a jak by otázky a odpovědi měly vypadat.
Projekt je umístěn na SourceForge a vítány jsou patche s novou funkcionalitou i opravy chyb. Pokud má někdo zájem se na projektu spolupodílet, bude vítán. Nehledají se jen programátoři, ale i návrháři designu, někdo, kdo bude spravovat web, nebo prostě někdo, kdo opraví mou děsnou angličtinu.
Demo
Na mém služebním stroji je umístěn LangLear ve verzi, která je k dispozici na stránkách projektu. Je zde několik jednoduchých slovníků s několika málo pojmy, které by měly stačit na to, abyste si to vyzkoušeli. Přístup k demu je omezen maximálním počtem spojení, tento stroj není server.