Procvičník

O co jde

Procvičník je webová aplikace určená k procvičení znalostí získaných přečtením nějakého článku (např. o husitských válkách na Wikipedii). Procvičník pro danou webovou stránku vygeneruje sadu otázek s výběrem možností a poskytne tak uživateli okamžitou zpětnou vazbu o jeho znalostech.

Projekt je aktuálně ve vývoji a ani s notnou dávkou optimismu ho zatím nelze považovat za použitelný. Cílem je vytvořit skutečně inteligentní aplikaci pro tvorbu cvičení na základě nějakého článku (ať už v prostém textu nebo HTML), případně i pouze tématu, které Vás zajímá. Taková aplikace by byla užitečná k prověření, že jsme článek nečetli bezmyšlenkovitě a že si z jeho přečtení skutečně něco odnášíme.

Zatímco čtení textu je pasivní činnost, odpovídání na otázky od nás vyžaduje mnohem větší aktivitu a zapojení mozkových buněk, což zvýší šance, že se informace získané přečtením článku přesunou z krátkodobé paměti do dlouhodé. Zejména u studentů střední školy se setkáváme s tím, že většinu času vyhrazeného k učení stráví opakovaným čtením textů z učebnice nebo svých poznámek, přestože je tato metoda málo efektivní. Odpovídání na otázky vede k rychlejšímu a dlouhodobějšímu zapamatování.

Jak to funguje

Získání článku

Prvním krokem po stažení HTML dokumentu je odstranění těch částí stránky, které jsou pro nás nezajímavé (hlavička, patička, menu, reklamy, atp.) Pro řešení tohoto úkolu, který bývá označován jako odstranění boilerplatu, existujě několik nástrojů, jedním z nich je jusText, který vznikl v Centru zpracování přirozeného jazyka na Fakultě informatiky Masarykovy univerzity. JusText vrací odstavce prostého textu, pro naše účely však potřebujeme i některé další informace (např. odkazy, ve kterých jsou často ukryté klíčové pojmy), museli jsme si tedy jusText trochu upravit.

Extrakce klíčových pojmů

Další fází je extrakce klíčových pojmů. To je poměrně jednoduchý úkol na Wikipedii, neboť tam nesou všechny odkazy na pojmy atribut title, kde je uveden daný pojem v základním tvaru. Na ostatních stránkách je to podstatně těžší, naštěstí však byl v Centru zpracování přirozeného jazyka vytvořen program TOPicks, který se zabývá extrakcí pojmů z krátkého prostého textu. TOPicks má určitá drobná omezení (např. občas spadne), což jeho použití mírně znepříjemňuje.

Získání faktů o pojmech

Získávání faktů o pojmech můžeme rozdělit do dvou skupin podle zdroje informace. Prvním přirozeným zdrojem je článek samotný. Ukázalo se však jako užitečné sáhnout pro informace i jinam, konkrétně do databáze znalostí DBpedia. O databázích znalostí budu podrobněji mluvit později, zatím jen prozradím, že nám taková databáze poskytne pro daný pojem několik užitečných faktů, např. typ (jestli se jedná o osobu, místo nebo něco jiného) a kategorie na Wikipedii, do kterých pojem patří (např. Karel IV. patří do kategorií Lucemburkové, Čeští králové, Osobnosti na českých bankovkách a dalších). Ke klíčovým pojmům pak přidáváme také kalendářní data, která najdeme pomocí regulárního výrazu. Relativním poměřením počtu osob, míst a dat v článku můžeme odhadnout jeho zaměření, což pak umožňuje preferovat např. otázky typu Kde? v zeměpisných článcích a otázky typu Kdy? v článcích o historii.

Než se pustíme do vytahování faktů z textu samotného, proženeme ho určitým předzpracováním, které zahrnuje zejména rozdělení na jednotlivá slova, morfologickou analýzu a vypuštění vět, které nemají význam samostatně, tj. obsahující indexické výrazy či anafory ("O dva roky později zemřel a byl mu vystrojen státní pohřeb."). Pak procházíme text a hledáme věty splňující určitý tvar a vytvoříme z nich fakta. Přitom je velmi užitečné, že známe typy některých klíčových pojmů. Můžeme tak identifikovat např. událost a čas, kdy se odehrála, nebo osobu, která ji provedla. Podobně lze využít vět obsahujících nějaké místo, číslo nebo příklad (Mezi ptáky obývající údolí Labe patří například kormorán velký.)

Všechna získaná fakta uložíme do RDF grafu, což je typ sémantické sítě, kde každý fakt je reprezentován trojicí (podmět, vlastnost předmět), např. větu "Jiří z Poděbrad se narodil roku 1420." zapíšeme jako (Jiří z Poděbrad, rok narození, 1420).

Vytvoření otázek

Graf znalostí je pak předán modulu tvorby otázek. Postupně se snaží vytvořit různé typy otázek (Kdo?, Kde?, Kdy?, Kolik? Co nepatří mezi ostatní? atd.) Hledání potřebných faktů v RDF grafu lze pohodlně provádět pomocí dotazovacího jazyka SPARQL, který je pro RDF databázi tím, čím je pro klasické databáze SQL.

Ke každé otázce je pak potřeba vybrat vhodné distraktory (špatné odpovědi), aby nebyla otázka příliš triviální. Pokud to jde, vybíráme jako distraktory pojmy stejného typu (např. osoba) a v některých případech i ze stejné kategorie (např. čeští králové). V případě cvičení, ve kterém je úkolem doplnit do věty pojem, je ještě potřeba všechny odpovědi vyskloňovat do správného pádu.

Vytvořených otázek je obvykle několik desítek, kvalitních je jich však jen pár. Proto se snažíme kvalitu každé vygenerované otázky ohodnotit a uživateli pak předložíme pouze nejlepších 15 (v náhodném pořadí). Kvalitu odhadujeme podle několika faktorů. Nejdůležitější roli hraje naše jistota v kvalitu distraktorů a typ cvičení v závisloti na odhadovaném typu článku. Každá další otázka stejného typu (např. Kdy?) dostává menší hodnotu než předchozí, což přispívá k pestrosti otázek.

Webové rozhraní

Na laboratorním serveru Asteria04 jsme spustili jednoduché demo Procvičníku, které umožňuje nechat si vygenerovat sadu otázek k libovolné webové stránce a ty vám pak postupně předkládá. Pod každou otázkou je pak možnost poskytnout nám zpětnou vazbu o dané otázce (třeba, že obsahuje gramatickou chybu), kterou pak spolu s odpovědí logujeme a později využijeme. Na straně klienta používáme AJAX pro asynchronní komunikaci se serverem, jQuery pro vizuální efekty a šablonovací systém Mustache pro vytvoření HTML pro různé otázky.

Ukázky cvičení

Znalostní databáze

V rámci projektu jsme zkoumali možnosti využití znalostních databází. Mezi největší znalostní databáze patří DBpedie, která obsahuje fakta získaná extrakcí strukturovaných dat obsažených na Wikipedii (např. v infoboxech, takových těch shrnujících tabulkách vpravo nahoře) a Freebase, kterou využívá mimo jiné i Google pro sémantické vyhledávání. Sémantickým vyhledáváním se rozumí to, že Googlu dojde, co asi tak chcete vědět, a nabídne vám rovnou odpověď a ne jen odkazy na stránky, které odpověď obsahují.

Zajímalo nás, zda je současná česká verze DBpedie, která obsahuje data extrahovaná z české Wikipedie, dostatečně rozsáhlým a kvalitním zdrojem informací pro tvorbu cvičení. V současnoti obsahuje česká DBpedie kolem 30 milionů faktů. To je dost, že? Bohužel však pouze zlomek z nich je použitelný k tvorbě cvičení. Většinou jde totiž o fakta popisující odkazy na další Wiki-stránky a různé údaje o knížkách, které jsou obvykle u článku uvedené. Z užitečných faktů pro tvorbu cvičení nalezneme v české DBpedii občas typ pojmu (u osob poměrně spolehlivě, u míst jen někdy a další typy chybí) a Wikikategorie. Konkrétnější fakta typu kdy se nějaká osobnost narodila/zemřela, kde událost proběhla nebo jak bitva skončila v české DBpedii chybí nebo jsou špatně namapovaná (takže se například dovíme, Jan Hus zemřel 6, nikoliv 6. 7. 1415)

Zkoumali jsme dvě možnosti zlepšení přístupu využívajícího DBpedii, první spočívá v překladu faktů z anglické DBpedie, druhý pak v rozšíření a opravení stávajících mapovacích pravidel v DBpedii.

Možnost řešení překladem spočívá v přeložení pojmu do angličtiny (přesněji nalezením jeho překladu přímo v DBpedii, což je spolehlivější) a poté nalezení faktů o daném pojmů v anglické DBpedii, případně i Freebase nebo jiné databázi faktů. Tam lze spolehlivě nalézt mnoho zajímavých faktů, jako třeba data narození a úmrtí, zeměpisnou polohu míst i proběhlých událostí, portréty osob, výsledky bitev a mnoho dalšího. Jako ukázku jsme vytvořili dvě cvičení využívajících faktů získaných překladem, a to Mohli se potkat? a Najděte na mapě.

Využití anglické DBpedie však chápeme spíše jako provizorní řešení, logičtější a přímočařejší je samozřejmě hledat česká fakta na české DBpedii. Tam sice zatím nejsou, ale existuje způsob, jak to změnit. Podobně jako Wikipedie sama i DBpedie je otevřený komunitní projekt, do kterého může přispívat každý. Zejména je tedy možné vylepšit a napsat další mapovací pravidla pro převod informací z české Wikipedie do české DBpedie. K vytváření mapovacích pravidel slouží portál DBpedia Mappings Wiki. Změny mapovacích pravidel se však neprojeví okamžitě, ale až při další extrakci dat z Wikipedie a novém vydaním DBpedie, což je přibližně jednou za rok. Nevýhodou je také značné množství práce spojené s vytvářením kvalitních mapovacích pravidel pro českou DBpedii.

Testování

Uskutečnili jsme dvoutýdenní testování, při němž jsme zaznamenávali odpovědi a podrobnou zpětnou vazbu ke každé otázce a na závěr testující požádali o vyplnění krátkého dotazníku. Během této doby bylo vytvořeno přes 300 otázek (počítáme jen ty, které nebyly přeskočeny).

Uživatelé přisuzují Procvičníku inteligenci pětiletého až desetiletého dítěte. Příjemnou zprávou pro nás je, že nikdo nevybral možnost inteligence králíka. Motivující je i to, že více než 60 % uživatelů tvrdí, že kdyby byl Procvičník inteligentnější, tak by ho občas využívali. A i ti, kteří by ho nevyužívali, vybrali možnost, že by ho pravděpodobně využívali v době, kdy ještě chodili na (střední) školu.

Kromě celkových statistik jsme se zvlášť zaměřili na články o historii a články o geografii, na které je současný Procvičník zamýšlen. V rámci testování tvoří každá z těchto skupin přibližně třetinu otázek.

Takovou první zásadní statistikou je, kolik procent z vytvořených otázek nedává smysl. K ideálnímu stavu, kdy by se tato hodnota blížila nule, máme zatím bohužel hodně daleko. U dějepisných a zěměpisných otázek je nesmyslnná 1 otázka z 10 a u jiných témat je to dokonce 1 z 5.

Gramatické chyby už sice nejsou tolik zásadním problémem jako nesmyslnnost, přesto jejich častý výskyt nepochybně zhoršuje celkovou spokojenost uživatele. Podle dosavadního testování obsahuje nějakou gramatickou chybu asi 13 % otázek.

I když je otázka správně utvořená, nebudeme s ní příliš spokojení, pokud se nevztahuje k článku, který chceme procvičovat. Nerelevantních otázek bylo celkově 4,3 % a s tím se myslím dá žít. Navíc ne kažou nerelevatní otázku je správné okamžitě odsuzovat – možná, že se ptá na něco, co zrovna nepotřebujeme vědět, ale to neznamená, že to nebudeme potřebovat vědět zítra.

Aby mělo procvičování smysl a uživatele bavilo, musí být otázky přiměřeně obtížné. Cvičení, ve kterém bychom na žádou otázku neznali odpověď, by nás dozajista rychle přestalo bavit a naopak cvičení, kdy bychom věděli všechno, by pro nás pravděpodobně nebylo příliš užitečné. Co to však přesně znamená přiměřeně obžížné není jasné a určitě je to značně individuální. My se aktuálně pohybujeme mezi 60 a 70 % správných odpovědí, což považuji za poměrně dobré.

Kromě předchozího globálního pohledu na obžížnost, kdy jsme měřili relativní zastoupení správně odpovězených otázek, můžeme zkoumat i lokální obtížnost jednotlivých otázek. Ptali jsme se proto uživatelů i u každé otázky zvlášť, zda jim přijde otázka příliš jednoduchá nebo naopak příliš složitá. Celkově bylo jako příliš jednoduchých označeno 14 % otázek a jako příliš obtížných 4.3 %.

Přes všechny problémy se občas podařilo vytvářet i otázky kvalitní. Celkem 20,7 % otázek bylo označených jako dokonalé.

Z proběhlého testování je zřejmé, že současná podoba Procvičníku obsahuje spoustu nedokonalostí. Také však dává naději, že by to mohlo jít a že by se mohlo jednat o zajímavou a použitelnou aplikaci. V závěrečném dotazníku jsme se ptali testujících také na to, jaké emoce v nich Procvičník vzbuzuje, a jsme rádi, že se objevovali jen samé pozitivní, zejména zvědavost, pobavení a nadšení.

Co dál?

V práci na Procvičníku plánuji pokračovat v rámci své bakalářské práce. Možných vylepšení stávající verze Procvičniku je spousta, od zpracování textu (syntaktická analýza, řešení anafor), přes propracovanější pravidla pro získávání faktů z textu a širší použití databází znalostí (zejména po vylepšení mapovacích pravidel české DBpedie), až po další typy cvičení, zábavnější a interaktivnější než otázky s nabídkou možností.

Poděkování

Procvičník by nevznikl, nebo by byl přinejmenším ještě hloupější, nebýt mnoha lidí. Nejsem si jistý, zda by si přáli, aby bylo jejich jméno s tímto projektem spojováno, a proto je zatím uvádět nebudu a učiním tak až v momentě, kdy budu Procvičník považovat za kvalitní a zejména použitelný. Jenom nastíním, že se jedná zejména o mého budoucího vedoucího bakalářské práce, pana docenta, který vyučuje Počítačovou lingvistiku, a doktorského studenta, který pracuje na Slepých mapách, inteligentním systému na procvičování zěměpisu. Můj dík patří také všem, kteří Procvičník otestovali a poskytli mi zpětnou vazbu, autorům zmíněných projektů, které v Procvičníku používám a i ostatním lidem z Centra zpracování přirozeného jazyka, kteří mi při mých navštěvách v laboratoři poskytli najěkou tu dobrou radu, nebo alespoň židli. Všem těmto lidem jsem za jejich přímou či nepřímou pomoc velmi vděčný.

Zdrojové kódy

Pokud máte zájem, můžete si stáhnout zdrojové kódy Procvičníku. Ke spuštění je však potřeba několika Pythoních balíků, nástrojů laboratoře a lokálního triplestoru s českou DBpedií. Podrobnější instrukce ke spuštění jsou uvnitř balíku v souboru README.txt

Kontakt

Pokud mi chcete dát zpětnou vazbu nebo se máte jakýkoliv dotaz, napište mi na emailovou adresu EffaAcademy [zavináč] email [tečka] cz