Enti Dokumentace studentského softwarového projektu MFF UK, Praha
Teoretická dokumentace Vedoucí: RNDr. Vladislav Kuboň, Ph.D. Ondřej Bojar Cyril Brom Milan Hladík Vojtěch Toman Mikuláš Vejlupek David Voňka Září 2000 až 2002
2
Obsah 1 Úvod
5
1.1
5
Cíl projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Svět entů 2.1
7
Princip zachování běhu světa . . . . . . . . . . . . . . . . . . . .
7
2.1.1
Souvislost světa a serveru prostředí v době návrhu . . . .
7
2.1.2
Princip zachování běhu pro enty a základní fyzické vlastnosti
7
2.1.3
Smysl života entů – hledání svatého grálu . . . . . . . . .
8
2.1.4
Život a smrt enta . . . . . . . . . . . . . . . . . . . . . . .
9
2.2
Velká francouzská revoluce . . . . . . . . . . . . . . . . . . . . . .
9
2.3
Od návrhu světa k softwarovému projektu . . . . . . . . . . . . .
10
2.4
Jak enti vidí svět . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3 Paměť entů
13
3.1
Co si enti pamatují . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.2
Použití paměti . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.3
Odvozování údajů z databáze . . . . . . . . . . . . . . . . . . . .
15
3.4
Problém nepozornosti a dokonalé paměti entů . . . . . . . . . . .
16
4 Jak enty programovat?
17
4.1
Teoretický návrh jazyka E . . . . . . . . . . . . . . . . . . . . . .
17
4.2
Proč ne genetické algoritmy . . . . . . . . . . . . . . . . . . . . .
19
5 Komunikace přirozeným jazykem
23
5.1
Proč projekt zahrnuje komunikaci v přirozeném jazyce . . . . . .
23
5.2
Účel komunikace mezi lidmi . . . . . . . . . . . . . . . . . . . . .
23
3
4
OBSAH 5.3
Obtížně zvládnutelné rysy přirozeného jazyka . . . . . . . . . . .
24
5.4
Lingvistické zaměření našeho projektu . . . . . . . . . . . . . . .
26
5.5
Proces konkretizace . . . . . . . . . . . . . . . . . . . . . . . . . .
27
5.5.1
Rozdíly mezi lidmi a enty . . . . . . . . . . . . . . . . . .
27
5.5.2
Průběh konkretizace . . . . . . . . . . . . . . . . . . . . .
28
5.5.3
Paměť objektů, konkretizace zájmen a odkazů na „tenÿ předmět . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
5.5.4
„Libovolnýÿ ostrý nůž, únik z plné konkretizace . . . . . .
30
5.5.5
„Nějakýÿ ostrý nůž, částečná konkretizace a problém s odkazováním . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
Co nepodléhá konkretizaci . . . . . . . . . . . . . . . . . .
31
Problém sémantické přípustnosti . . . . . . . . . . . . . . . . . .
32
5.6.1
Ukázka problému . . . . . . . . . . . . . . . . . . . . . . .
32
5.6.2
Pseudořešení problému sémantické přípustnosti . . . . . .
32
5.6.3
Náznak obecnějšího řešení . . . . . . . . . . . . . . . . . .
32
5.5.6 5.6
Kapitola 1
Úvod Tato část dokumentace projektu enti je určena všem zájemcům o teoretický koncept, na němž je vybudován svět entů. Cílem projektu bylo vytvořit simulátor prostředí podobného přirozenému lidskému světu. Že jde o úkol ambiciózní bylo jasné od samého počátku. Kolik však bude nutné z původních představ slevit, aby se dal alespoň částečně svět entů implementovat, se ukázalo až v průběhu prací. V teoretické dokumentaci najdete právě popis naší cesty od původních vágních představ o budovaném světě, přes řadu rozhodnutí, co do světa ještě zahrnout a co už nikoli, přes odhalení a pojmenování řady problémů, o jejichž existenci jsme zprvu měli jen matnou nebo vůbec žádnou představu. Zároveň z této dokumentace mezi řádky i explicitně vyplyne, jakými dalšími směry je třeba vést další vědecký výzkum, abychom se více přiblížili k poznání toho, jak lidé a tento svět fungují.
1.1
Cíl projektu
Projekt Enti je softwarový projekt do určité míry nestandardní. Většina softwarových děl se svým použitím podobá nějakému nástroji, má někomu usnadnit práci na konkrétním úkolu, a to bez ohledu na to, o jak složitý a komplexní úkol se může jednat. Cílem projektu Enti nebylo vytvořit účinný nástroj na zvládání nějakého úkolu. Formulovaným cílem projektu bylo vytvořit simulátor prostředí podobného alespoň v určitých rysech přirozenému prostředí lidského světa. Nikoli tedy výsledný produkt projektu, ale projekt sám byl pro nás nástrojem pro poznání toho, jak fungují lidé a lidský svět. V tomto smyslu je tedy třeba pohlížet na projekt Enti spíše jako na projekt vědecký než softwarový, i když vytvoření rozsáhlého programu je jeho nedílnou součástí. Cíl projektu by tedy bylo nejvhodnější formulovat dvakrát. Vědecký projekt Enti: Vytvořte abstraktní model tohoto světa a lidských 5
6
KAPITOLA 1. ÚVOD bytostí. Zaměřte se na tyto stránky přirozeného světa lidí: • lidé jsou bytosti s nezávislým vědomím • lidé přijímají podněty z okolního světa • lidé mají (elementární) schopnost okolní svět ovlivňovat • lidé se ve světě nepohybují náhodně, ale s určitým cílem (přinejmenším cílem existovat co nejdelší dobu) • lidé spolu komunikují Ověřte, do jakých podrobností můžeme zajít, chcete-li tento model uvést do provozuschopného stavu na současných počítačích.
Softwarový projekt Enti: Je dán abstraktní model světa. Svět se sestává z centrálního prvku, který dohlíží na konzistenci světa podle daných pravidel, a z několika entit s vlastní výpočetní silou napojených na centrální prvek. Tyto entity získávají informace o aktuálním stavu světa a mají oprávnění ve světě provádět elementární změny. Vytvořte program simulující daný abstraktní model světa. Program bude mít tři komponenty: simulátor centrálního prvku (server prostředí), simulátor entit s vlastní výpočetní silou a ovladač pro uživatele, aby mohl vystupovat ve světě v roli jedné z entit. Přesná definice modelu bude k dispozici později. Půvab formulovaných cílů spočívá v tom, že se jeden odkazuje na druhý. I přesto je naštěstí z cílů patrné, kudy nejít, jaké úkoly neřešit. Namátkou jmenujme: Simulace fyzikální podstaty světa. Cílem našeho projektu není věrně modelovat fyzikální či chemické principy přirozeného prostředí. Samoregulující se prostředí. Učící se prostředí. Cílem projektu není vytvořit prostředí, které by samo v průběhu simulace vědomě či nevědomě měnilo pravidla svého chodu, tj. vyvíjelo. Náš entí svět i enti sami budou mít principy chování předepsány a pro celou simulaci pevné. Učící se enti. Ani v simulaci chování bytostí si neklademe za cíl připravit takové schéma programu, že by ent mohl v době svého běhu měnit principy svého chování. Enti se budou chovat zcela deterministicky.1 Nespolehlivost receptorů. Enti na rozdíl od lidí budou vybaveni dokonalými smysly. Enti uvidí jasně a uslyší jasně. V projektu neexistuje šum.
1 Podrobněji
se této problematice věnuje kapitola 4(str.
17) .
Kapitola 2
Svět entů 2.1
Princip zachování běhu světa
Nedílnou součástí projektu je navržení světa – prostředí, ve kterém se enti mají pohybovat. Klíčovou vlastností světa je princip zachování běhu. To znamená, že svět musí být navržen tak, aby během simulace neustále zůstával ve stavu podobném stavu počátečnímu, a to i když se v něm budou pohybovat strojoví enti. Na druhou stranu není možné zajistit, aby svět „opravovalÿ sám sebe, pokud ho bude záměrně poškozovat lidský ent. Svět musí být omezený.
2.1.1
Souvislost světa a serveru prostředí v době návrhu
Jednou ze základních myšlenek projektu je, aby si každý uživatel – programátor mohl navrhnout svůj vlastní svět. Samozřejmě nemůžeme nikoho nutit, aby zrovna jeho svět princip zachování běhu splňoval. Nicméně server prostředí musí být navržen tak, aby mohl řídit světy, které princip zachování běhu splňují. Náš vzorový svět, který v rámci projektu předkládáme, nevyužívá všech možností, jež nabízí server prostředí; nicméně princip zachování běhu splňuje (s jednou námitkou, ke které se dostaneme níže).
2.1.2
Princip zachování běhu pro enty a základní fyzické vlastnosti
Princip zachování běhu platí i pro enty. Jestliže budou mít enti základní fyzické vlastnosti, které svým významem budou určovat, jestli je entům dobře nebo špatně, musí být svět navržen tak, aby entům mohlo být většinu času dobře. Rozhodli jsme, že enti budou mít tuto sadu základních fyzických vlastností: 7
8
KAPITOLA 2. SVĚT ENTŮ • únava • hlad • žízeň • zdraví • pnutí1
Zřejmě aby entům mohlo být dobře, musí být ve světě možné: vyspat se, napít se, najíst se, vyléčit se, dojít si na záchod; a to opakovaně. Musí tedy existovat jídlo, voda, místo na spaní, záchod a něco na léčení, přičemž voda, jídlo a léčicí prostředky musí být obnovitelné. Zdá se logické, že hodnoty všech základních vlastností by měly klesat2 v čase. Výjimku tvoří zdraví. Pakliže chceme, aby entům mohl někdo ublížit, musíme do světa zavést ještě jeden princip: boj a zbraně nebo nějaké nebezpečné předměty či nemoci. Řekli jsme, že při „horšíchÿ hodnotách vlastností bude entům špatně. Co přesně znamená špatně ? Mohli bychom počítat nějaký agregát vlastností – celkový pocit enta – a říci, že špatně znamená, že agregát je menší než 13,5. Nám se ale jako lepší jeví přímé penalizace. Vhodnou penalizací je například smrt; ent může zemřít žízní, hladem nebo na následky zranění. Při příliš vysoké únavě ent usne a při příliš vysokém pnutí. . . inu, neudrží potřebu.
2.1.3
Smysl života entů – hledání svatého grálu
Entovým cílem samozřejmě není dosíci nirvány. Na druhou stranu není ani vhodné, aby ent po celou dobu své existence jen stál na místě a nic nedělal. Jakou činnost by však měl ent vykonávat? Odpověď nám přímo nabízí náš princip zachování běhu světa: enti se budou o svět starat. Budou to právě oni, kdo ho budou opečovávat a udržovat v takovém stavu, aby jim poskytl vše, co k životu potřebují (tj. aby jim bylo dobře). Svět tedy nebude, jak bylo řečeno na začátku této kapitoly, udržovat sám sebe ve stavu blízkém k počátečnímu; v takovém stavu ho budou udržovat enti. Bez entů se svět časem dostane do jakéhosi rovnovážného stavu, ten však nebude stavem počátečním. Z tohoto stavu musí jít zpětně, za běhu simulace, znovu uvést do stavu počátečního. Tuto „péči o světÿ musí entům někdo „naprogramovatÿ – bude to programátor entích skriptů a použije pro tento účel speciálně navrženého jazyka E (viz kapitola 4.1(str. 17) ). V souvislosti s základními fyzickými vlastnostmi světa je teoreticky možné rozdělit základní úkoly ve světě například takto: 1 Lidově
a posprostu posranost, čili jak moc se chce entovi na záchod. rozumíme změnu hodnot vlastnosti k „horšímÿ hodnotám, hodnoty samotné mohou ve skutečnosti růst. 2 Klesáním
2.2. VELKÁ FRANCOUZSKÁ REVOLUCE
9
• starost o jídlo (aby enti měli dost potravin) • starost o bezpečí (aby entům nikdo neubližoval) • starost o čistotu (aby enti „neumírali na tyfusÿ) • starost o předměty (aby rozličné předměty fungovaly, aby jich bylo dost, aby tekla voda) Rozhodli jsme se do světa zahrnout i prvky zábavy. Přibývá tedy: • starost o zábavu Zábavné úkoly neovlivňují svět tak zásadně, jako základní úkoly.
2.1.4
Život a smrt enta
Řekli jsme, že budeme vůči entům tak krutí, že je čas od času necháme zemřít; hladem, žízní anebo na následky zranění. Můžeme si však dovolit vyloučit enta po jeho smrti ze světa? Ent se o část světa stará: jestliže zemře, s jeho kusem světa to začne jít s kopce a v důsledku toho mohou zemřít další enti. Jak by takovou situaci vyřešili lidé? Převzali by na sebe povinnosti zemřelého. To je ovšem dost složité: Jak vyřešit, kdo má dostatek času vzít si na bedra další závazky? Jak naplánovat nové činnosti mezi víc jedinců, aby si při jejich vykonávání vzájemně nepřekáželi? Jak zjistit, kdo daným činnostem rozumí? Jak zjistit, kdo by se je mohl naučit? Nad těmito problémy jsme se zamýšleli, a nakonec jsme se rozhodli, že tímto směrem projekt rozšiřovat nebudeme a činnosti na jiné enty přenášet nebudeme. To znamená, že úkoly buď nikdo vykonávat nebude, nebo vznikne nový ent, který bude mít přesně stejné úkoly jako předchozí. Jelikož má smrt sloužit jako penalizace jednoho enta, nikoli všech, rozhodli jsme se jít druhou cestou, a sice tím nejjednodušším možným způsobem: enta necháme za čas znovu „se naroditÿ. Je tedy vidět, že smrt enta pro něj není zas takovou tragedií, jakou by se mohla jevit na první pohled.
2.2
Velká francouzská revoluce
Samostatné poznámky si zaslouží významný požadavek v projektu Enti: požadavek maximální rovnosti mezi člověkem a enty, příznačně označovaným jako ideál Velké francouzské revoluce (VFR). V návrhu projektu se ideál VFR podařilo dodržet3 , i když boj za tento ideál zasahoval i do velmi jemných možností specifikace světa entů. Výsledku však ideál přinesl hned dvě výhody: 3 Nejvýznamněji čelil rozporu mezi světem entů a světem lidí modul Prohlížeč, jak lze podrobněji nahlédnout v úvodních kapitolách jeho programátorské dokumentace.
10
KAPITOLA 2. SVĚT ENTŮ
Platforma pro Turingův test. Ve světě se mohou pobyhovat bytosti řízené člověkem i počítačem, pro ostatní bytosti jsou podle vnějších vlastností i bezprostřední možnosti ovlivňovat svět naprosto nerozlišitelné. Odlišit je lze pouze na základě důvtipnosti v chování. (Dlužno poznamenat, že naši enti poměrně záhy v Turingově testu selhávají a jejich strojovost je prohlédnuta.) Složitost lidského světa názorně. Ideál VFR nebyl při návrhu používán jednostranně: lidé ať mohou to, co enti, ale částečně i na stranu druhou: enti ať mohou žít jako lidé. To nás motivovalo navrhovat svět velmi bohatý a složitý, navzdory očekávané obtížnosti realizace. Návrh světa se v tomto ohledu zdařil a ve světě entů je možné doslova vrazit čelem do problémů, které zdravému lidskému rozumu žádné zvláštní potíže. Rozsah projektu pak ilustruje složitost lidského světa.
2.3
Od návrhu světa k softwarovému projektu
Abychom rozťali kruh v zadání projektu, a mohli začít shromažďovat algoritmy pro použití v softwarovém díle, rozhodli jsme se pro následující omezení. Diskrétní běh času. Simulace bude prováděna po kolech, v každém kole všichni enti dostanou celý popis relevantní části světa, rozhodnou se, jaký krok učiní, a požádají o provedení elementární změny v prostředí. Diskrétní prostor a objekty, dvě dimenze a obsahování. Prostor světa entů nebude spojitý, ale bude rozdělen na malé dlaždice ve čtvercové síti. Dlaždice budou obsahovat jednotlivé předměty, včetně entů samotných. Předměty mohou (podle určitých pravidel) zase obsahovat předměty. Pro zjednodušení komunikace mezi enty a serverem prostředí bude navíc prostor dlaždic rozdělen do samostatných úseků, tzv. místností. Enti budou pravidelně dostávat informace o všech změnách, které proběhly v daném kole v místnosti, kde se ent nachází. Naopak ent nebude dostávat žádné informace o změnách v jiné místnosti. Omezený čas i prostor. Entí čas je zdola omezen startovním okamžikem projektu. Entí prostor je omezený, v simulovaném světě je dopředu dán počet místností, místnosti nemohou přibývat. Rovněž velikost místností je dána předem, v místnostech nemohou přibývat dlaždice. Naproti tomu není explicitně omezen počet předmětů na dlaždici, či hloubka vkládání předmětů do sebe. (Je zde ovšem přirozené omezení podle „velikostiÿ předmětů, a rovněž omezení dané reprezentací identifikátorů předmětu.) V průběhu práce na projektu se popsaná diskretizace mnohokrát ukázala jako zjednodušení doslova spásné. Pevná kategorizace předmětů, elementů času i prostoru dává totiž programátorům entů do ruky jistotu existence konečné odpovědi na každou otázku. Určujeme-li pro enta, zda něco vidí nebo nevidí, máme díky diskrétním místnostem jasnou odpověď. Ent vidí všechny předměty, které leží na dlaždicích v té místnosti, jako je on sám. Není možné, aby ent nějaký předmět viděl částečně (třeba proto, že leží relativně daleko od něj, ale
2.4. JAK ENTI VIDÍ SVĚT
11
ne zas tak daleko, aby ho neviděl vůbec). Není možné, aby ent sdělení kolegy „slyšel, ale trochu špatněÿ. Diskrétní a omezený prostor navíc umožňuje případné dokazování tvrzení o světě entů. (Např. poskytuje zarážku pro matematickou indukci.) Princip matematického dokazování bohužel nelze v reálném světě použít právě proto, že zatím jsme v žádném směru nenarazili na nějakou hranici tohoto světa.
2.4
Jak enti vidí svět
Vzhledem ke zvolené diskrétní povaze světa se můžeme i pro mysli umělých bytostí omezit na diskrétní systém pojmů o světě. To vedlo k zavedení konceptu „handlůÿ, univerzálního číslování všech časových okamžiků, prostorových úseků, předmětů i jejich vlastností. Rovněž požadavky entů na elementární změny prostředí jsou zahrnuty do tohoto univerzálního číslování. Ent v každém časovém okamžiku dostane na vstup uspořádaný seznam handlů, který kóduje aktuální stav světa v místnosti enta. Ent si pro další postup může pamatovat ze světa cokoli. V rámci tohoto kola ent povinně reaguje odesláním elementárního požadavku na změnu světa.
12
KAPITOLA 2. SVĚT ENTŮ
Kapitola 3
Paměť entů Tak jako každá lidská bytost si zapamatovává a zpracovává všelijaké informace získané od okolního světa a v případě potřeby si je dokáže (více či méně) vybavit a využít, bylo nutné jakousi paměť vybudovat i pro našeho enta. Tato paměť (dále jako databáze) je pochopitelně jiná než u lidské bytosti, i když jsme se snažili o co největší podobnost. Samozřejmě je omezená šíře databáze (tj. různé typy informací) a možnost využití jejích informací. Informace v databázi se s časem zapomínají, ale neexistuje žádný mezistav – daná informace v daný okamžik je buď známa či nikoli. Tudíž si ent dokáže vybavit všechny informace, uložené momentálně v databázi. Jelikož je databáze úzce spjata s lingvistikou, odrazil se tento fakt při budování architektury databáze. Do databáze se ukládají fakta ve formě tzv. smyslů. Tyto smysly charakterizují určité typy vět s pevným počtem, pořadím a významem parametrů. Takováto architektura databáze byla zvolena proto, abychom do ní mohli ukládat i věty, zaslechnuté od jiných entů, a vybírat na základě relevance ta nejvěrohodnotnější data. Jak se však během práce na projektu ukázalo, počet ukládaných vět, vyřčených jinými enty, je minimální. Navíc se složitost prostředí značně rozkošatila. To vedlo k tomu, že operace s databází nejsou zcela efektivní – ne ovšem tak, aby to významně omezilo chod programu. Toto je způsobeno především tím, že díky struktuře databáze jsou předměty a jejich různé vlastnosti všechny navzájem od sebe odděleny. Budoucí vývoj v této oblasti by se mohl zaměřit na efektivnější ukládání a vyhledávání takovýchto dat (vedlo by to patrně ke značnému zesložitění celé databáze). Shrňme základní výhody i nevýhody naší architektury databáze, založené na ukládání faktů ve tvaru vět. Mezi základní nevýhody takovéto architektury databáze patří • některé informace resp. logická seskupení informací se z databáze vyhledávají složitým způsobem • databáze není navržena na maximální efektivitu při ukládání a vyhledávání dat Naše architektura databáze nám na druhou stranu ale mj. umožní 13
14
KAPITOLA 3. PAMĚŤ ENTŮ • jednoduchým způsobem implementovat interface mezi lingvistikou a databází, např. pro odpovídání na otázky, ukládání zaslechnutých oznamovacích vět atd. • určovat věrohodnost různých faktů (podle stáří, autora, který nám řekl danou větu apod.)
3.1
Co si enti pamatují
Enti si pamatují důležité informace o svém okolí a zážitcích. Patří mezi ně zejména • základní fakta – architektura domu: velikosti místností, spojení místností mezi sebou – ISA vztah: které objekty jsou v ISA vztahu – další (co se čím čistí apod.) • data, která se mění – hodnoty přibližně padesáti vlastností objektů (umístění, čistota, barva, hlad entů,. . .) • v minimální míře též oznamovací věty, vyslovené jinými enty Měnící se hodnoty vlastností jsou přepisovány, a proto jsou v databázi uloženy pouze poslední hodnoty (s výjimkou oznamovacích vět jiných entů). Proto databáze příliš neumožňuje jakékoli zpětné dohledávání vlastností v minulosti.
3.2
Použití paměti
Paměť enta, stejně jako u lidské osoby, se využívá ve chvíli, kdy si chceme vybavit nějakou minulou událost nebo určitý stav okolního prostředí. Fakta, která se nachází v databázi, využívají 1. smyslové reakce pro • generování odpovědi na otázku • ukládání nových oznámení • předávání příkazu interpretu jazyka E 2. různé funkce a skripty pro • konkretizaci předmětů podle požadovaných vlastností • určování hodnot vlastností • mnohé další
3.3. ODVOZOVÁNÍ ÚDAJŮ Z DATABÁZE
15
3. interpret pro interní ukládání a čtení dat Fakta se z databáze většinou nenačítají v „syrovémÿ stavu, ale používají se různé funkce, které umějí odvodit určité vztahy, vyhledávají podle věrohodnosti faktů či jiné.
3.3
Odvozování údajů z databáze
Fakta se v databázi ukládají přímočaře v jednoduché formě. Proto je nutné některé údaje více či méně složitým způsobem odvozovat. Transitivita pro umístění V databázi se ukládá umístění předmětů, ale jen první objekt, na kterém se nalézají. Proto byla implementována transitivita (u někerých pokročilých funkcí s databází), pomocí níž lze • určit, zda se předmět nalézá na resp. v jiném, a to ne bezprostředně • určit místnost, kde se předmět nalézá ale ne například určit • druhý, třetí, . . ., předposlední předmět v hierarchii, kde se nalézá. • zda se předmět nalézá ne nutně bezprostředně na libovolné podložce Předpokládá se, že „entíÿ svět má podobné vlastnosti jako lidský svět, že například nenastane cyklus typu: A leží na B, B se nachází v C a C je na A. Transitivita pro ISA vztah V databázi jsou uloženy dvojice předmětů, které jsou v ISA vztahu. Navíc je zavedena transitivita pro ISA vztah. Pokud například platí ISA(nůž, příbor) ISA(příbor, nádobí) pak databáze automaticky používá vztah ISA(nůž, nádobí) Věrohodnost faktů Data, uložená v databázi, mají různou věrohodnost. Díky tomu můžeme např. porovnávat starý fakt, který máme uložený v databázi, s novým faktem, jenž
16
KAPITOLA 3. PAMĚŤ ENTŮ
jsme se dozvěděli od jiného enta, a posoudit, který z nich je „asiÿ pravdivější. Posuzování věrohodnosti či pravdivosti je obecně úkol obtížný i pro lidskou bytost, natož pro strojového enta. Tudíž je toto posuzování velmi zjednodušeno. Pro všechny ostatní enty máme po celou dobu běhu simulace pevně řečeno nakolik si myslíme, že jsou pravdomluvní a tyto hodnoty se s čsem nemění! Případné zjišťování, zda nějaký ent mi někdy zalhal, je velice nesnadný problém,a proto ho nijak neřešíme. Okolnosti, které mají vliv na věrohodnost, jsou • stáří: čím je fakt starší, tím méně je věrohodný • zapomínání: velmi stará fakta se zapomínají • autor: různá fakta mají obecně různé autory kromě mě samotného Na tyto okolnosti je důležité si dát pozor při vyhledávání v databázi. Je též možné využít funkcí, které vyhledávají nejvěrohodnější fakta.
3.4
Problém nepozornosti a dokonalé paměti entů
Bližšího komentáře si zaslouží rozdíl mezi pamětí lidskou a pamětí strojových entů, a to především proto, že se tento rozdíl bezprostředně odráží i v možnostech řízení činnosti a vyjadřování enta. Projekt Enti žádným způsobem nerozlišuje paměť dlouhodobou a krátkodobou, a pro případné rozlišení má (pomineme-li možnost rozdílné rychlosti zapomínání faktů) pouze aparát věrohodnosti. Paměť enta registruje naprosto identickým způsobem údaj o tom, kde teď právě ent sám stojí, a údaj o tom, kde byl před hodinou modrý štětec na malování. V rámci jednoho kola ent „ví vše najednouÿ a není schopen odlišit, co se právě teď nového dozvěděl, neexistuje samostatná „vyrovnávací paměť z receptorůÿ. Podobně při odchodu z místnosti zůstane v entově paměti dokonalý otisk místnosti, entova paměť dokonale zaznamená pozici všech předmětů, i když již nejsou v entově zorném poli. Ent není ve svém chování, na rozdíl od lidí, vůbec veden pozorností. Proto jsou pravidelné kontroly ve skriptech jazyka E (viz kapitola 4(str. 17) ) výpočetně zbytečně náročné – ent sekvenčně kontroluje jednu podmínku za druhou, aktivně čeká na porušení podmínky. Pokud by byl veden pozorností, nemuselo by při vhodné implementaci čekání na porušení podmínky probíhat aktivně. (Z obecnějšího hlediska je ovšem simulace poměrně věrná, jen postrádá paralelní zpracování. Vždyť „pasivní čekáníÿ je jen aktivním čekáním jiného prvku systému.) Podobně se nedostatek pozornosti enta a dokonalá paměť projevuje při generování vět přirozeného jazyka. Dokonalá paměť nedává entovi žádný klíč, které předměty kolega právě zvednul ap., proto by bylo jen velmi obtížné formulovat algoritmus přípravy odkazu na předmět založeného na „aktuálním děníÿ, tak, jako to naopak velmi často dělají lidé.
Kapitola 4
Jak enty programovat? 4.1
Teoretický návrh jazyka E
Tato kapitola představuje stručný úvod do jazyka E, seznamuje čtenáře se základními prvky jazyka a především s důvody, které nás vedly k jejich implementaci. Jazyk E je simulační jazyk. Programovat diskrétních simulace lze i v jiných jazycích, a proto je dobré si uvědomit, co „naši simulaciÿ činí tak odlišnou od „běžnýchÿ, že jsme si navrhli vlastní jazyk. Procesy v naší simulaci jsou enti. Život entů ubíhá po kolech; v každém kole ent „říkáÿ, co chce právě dělat. V běžné simulaci může být proces uspán a zařazen do fronty nebo může být naplánován na určitou dobu. V naší simulaci enti-procesy provádějí vždy stejnou operaci: plánují se na další kolo. Přitom druh akce, kterou budou provádět, závisí na významně více podmínkách než například pro auto, jež vozí písek mezi dvěma hromadami. V simulačním jazyce typu Simula by bylo třeba pro každé kolo provést několik vnořených příkazů typu „if-thenÿ, než bychom rozhodli, co se má v dalším kole provést, a program by se stal nepřehledný až neudržovatelný. Navíc by se potenciál simulačního jazyka ani plně nevyužil (např. fronty, plánování za delší časový úsek). Už to samo je důvodem pro vymyšlení jiné strategie. Spásný pohled nabízí Prolog: to, co ent provádí, lze zapsat jako nějaký algoritmus a splňovat ho shora dolů; algoritmus bude termem a při jeho splňování se budou provádět jednotlivé akce. Problém tohoto přístupu je, že Prolog splní všechno jaksi najednou. Nikoli najednou v reálném čase, ale v simulačním čase; Prolog nám po splnění termu vrátí deset akcí – my ale potřebujeme jednu pro následující kolo; potřebujeme, aby byl algoritmus splňován po částech (jedna část = jedno kolo). Ani čistý Prolog tedy není vhodnou alternativou. Nicméně představuje dobré východisko. Základ našeho jazyka budou tvořit: 17
18
KAPITOLA 4. JAK ENTY PROGRAMOVAT?
Skripty. Skript je zápisem algoritmu enta v jazyku E. Skript si můžeme představit jako term nebo i jako proceduru – ve skutečnosti je nečím mezi tím. Skript je interpretem postupně (to je důležité – postupně, nikoli najednou!) rozkládán na akce, které ent bude provádět v dalším kole (tzv. atomické instrukce). Máme tak např. skript na zalévání, na jezení atd. Co všechno potřebujeme, aby skripty byly skutečně něco víc, než jen termy nebo procedury? Interrupty. Pálí nás, že musíme v každém kole kontrolovat velké množství podmínek. Lze si všimnout, že tyto podmínky jsou vždy po určitou dobu stejné - například po celou dobu zalévání ent musí držet konev. Tyto podmínky jsou ve skutečnosti invarianty určitých částí skriptu. Místo, abychom v každém kroku kontrolovali, jestli invariant ještě platí, celý proces zautomatizujeme pomocí interruptu: Interrupt je skript, který ent začne provádět po splnění určité podmínky. V jistou chvíli řekneme, že je interrupt aktivní („navešenýÿ – od této chvíle chceme, aby invariant platil) – a dokud neřekneme, že už aktivní není (invariant už nemusí platit), interpret jazyka se postará o automatické kontrolování jeho podmínky. Můžeme tedy snadno zjištovat, jestli ent ješte konev drží – a co víc! – pokud nedrží, můžeme rovnou spustit skript, který situaci napraví. Hodnotící funkce. Při hlubší analýze zjistíme, že ne všechny skripty jsou stejně „důležitéÿ – nadto jejich důležitost se v čase mění. Když se entovi zachce na záchod, bude pro něj jiste zajímavější skript, který ho vyvenčí, než skript na čtení knihy. Každý skript má hodnotící funkci, jež na základě stavu enta a jeho okolí spočítá, jak „důležitýÿ zkoumaný skript v danou chvíli je. Na základě hodnotící funkce se interpret rozhodne, který skript má z několika alternativ spustit, jestli má spustit nějaký interrupt, atd. Polotransakční zpracování. Půjdeme-li ješte dál, zjistíme, že mnohé operace by bylo dobré provádět transakčně. To ale vetšinou není možné: enta může v jeho činnosti kdykoli cokoli přerušit, navíc když se k činnosti vrátí zpět, už nemusí být možné ji dokončit (uvažme prípad, kdy ent zalévá záhon a dojde mu voda; ent si vodu dojde naplnit, ale někdo mu mezitím záhon zalije). A samozřejmě také není možné provádět nějaké akce „soukroměÿ a teprve na závěr je „potvrditÿ – všechny změny se do světa entů promítají okamžitě. Z transakčních nástrojů zavádíme modifikovaný COMMIT (činnost okamžitě končí úspěchem) a FAIL (činnost okamžitě končí neúspěchem). Dále RERUN (začni celou akci znovu); to ale někdy není možné, počáteční podmínky pro daný skript už neplatí. V takovém případě bychom potřebovali UNDO, aby ent uvedl vše do původního stavu nebo po nedokončeném skriptu alespoň „uklidilÿ. Je navržena záchranná varianta skriptu, která se spouští právě pro případy UNDO – ve stávající verzi interpretu však není implementovaná.
4.2. PROČ NE GENETICKÉ ALGORITMY
19
Výše zmíněné bohatě stačí k programování entu. V každém kole interpret zjistí jednu atomickou instrukci. Získáváme snadný nástroj pro kontrolu platnosti invariantu (interrupty) a pro rozhodování o důležitosti podskritpu (hodnotící funkce). Umíme ošetrit situaci, kdy invariant přestane platit (interrupty, FAIL, COMMIT a RERUN). Uspávání a randez-vous. Pro složité algoritmy a kooperující algoritmy se hodí, aby se skript mohl sám uspat, tj. přerušit na určitou dobu nebo dokud ho jiný skript nevzbudí. Zatímco skript „spíÿ, mohou se provádět jiné skripty. Pokud je skript vzbuzen jiným, mohou si navíc vyměnit určité informace (předat parametry). Tyto vlastnosti jsou obdobné randez-vous z ADy. Uspávání a randez-vous však zůstává až pro případné zájemce o rozširování jazyka E. Skripty samotné se podobají prologovským termům, jazyk E umí vykonávat skripty s backtrackováním i bez něj. Pro další zjednodušení máme především pro nebacktrackující skripty zavedeny: • obdobu for-cyklu, • podmínky „if-thenÿ, • proměnné předávané odkazem, • globální proměnné. Další informace obsahují kapitoly o detailním popisu jazyka E v Příručce autora světa a skriptů.
4.2
Proč ne genetické algoritmy
Jedním z podstatných úkolů projektu bylo implementovat umělé bytosti, které se budou v simulovaném prostředí chovat inteligentně. V našem projektu jsme zvolili cestu deterministických programů. Entům zkrátka předepisujeme, co mají dělat. Ovšem uvažujeme-li o programech, které „se samy od sebe mají chovat rozumněÿ, nemůžeme v dnešní době pominout techniku genetických algoritmů. V následujících odstavcích osvětlíme, proč není tato technika pro naše cíle použitelná. Princip této programátorské techniky je v podstatě prostý: programátor nepředkládá počítači k interpretaci program v explicitní podobě, jako posloupnost kroků k vykonání. Programátor popíše hledaný program množinou nějakých parametrů, a v explicitní podobě dodá jen interpret konkrétní sestavy parametrů. Tímto způsobem je definován prostor všech uvažovaných programů – dostaneme-li konkrétní sestavu parametrů, jejich interpretací získáme nějaký program, který by měl lépe či hůře řešit danou úlohu. Ve druhém kroku se počítač použije k tomu, aby sám hledal program, který řeší danou úlohu nejlépe. Pro tento účel je třeba definovat na množině programů
20
KAPITOLA 4. JAK ENTY PROGRAMOVAT?
vhodné uspořádání. Obyčejně se množina možných programů neprohledává sekvenčně, ale používá se náhody a „kříženíÿ adeptů na nejlepší program (odtud název genetické algoritmy). Na počátku se zcela náhodně vygeneruje sada možných programů, tyto programy se podle daného uspořádání seřadí a z části lepších adeptů se drobnými náhodnými mutacemi a křížením vygeneruje nová sada adeptů. Tyto se opět seřadí a postup se opakuje po několik stovek až tisíců „generacíÿ.
Jak je již ze stručného nástinu patrné, klíčovým krokem programátora je rozhodnutí, jakými parametry program popisovat, a definice uspořádání na této množině programů. Z podstatné části se přitom programátor opírá o možnosti a omezení „světaÿ, v němž jsou výsledné programy interpretovány. Pro naše enty se jako nejjednodušší parametrizace nabízí posloupnost atomických instrukcí, kterou by v simulovaném světě měli postupně vykonávat. Uspořádání programů pro enty by pak mohlo být dáno mírou fyzického uspokojení, kterého se entovi s daným programem podařilo dosáhnout. Podobné úvahy však již byly v řadě projektů zcela konkrétně implementovány (např. též softwarový projekt Broučci na této fakultě) a naším cílem nebylo připojit implementaci další. Co činí projekt Enti do značné míry odlišný od těchto projektů, jsou rozdílné definice fyzikálního prostředí simulovaného světa: • složitost prostředí • řídké pocity uspokojení • přirozený jazyk Prostředí v němž se enti pohybují je překvapivě složité. Enti mohou v každém časovém okamžiku volit z řádově desítky různých atomických instrukcí – mohou vykročit čtyřmi směry, oslovit jiného enta, manipulovat s předměty u sebe nebo v dosahu nebo nedělat nic. Po většinu času svého života neprožívají enti pocity fyzického uspokojení. Nebo, lépe řečeno: většinu svého života se enti cítí dobře, ale jen výjimečně zaznamenají významnější změnu svého fyzického pocitu, ať již k lepšímu nebo k horšímu. Víceméně stabilní fyzický stav entů tedy bohužel není dobrým vodítkem pro volbu nejúspěšnějších posloupností atomických instrukcí. Obrazně by se dalo říci, že život enta je složen z běhů na dlouhou vzdálenost, o jejichž výsledku se rozhodne vždy až na jejich konci. Dalším (i když spíše technickým) problémem je proměnlivost světa. Ta způsobuje, že posloupnost atomických instrukcí, která se jednou ukázala jako dobrá, v lehce jiné situaci selže z nějaké zcela malicherné příčiny. (Např. ent by objevil, že ze startovní pozice je ideální dojít do kuchyně a najíst se. Ovšem tento postup již nelze přesně použít, nachází-li se ent v jiné místnosti.) Aby bylo entovo uvažování o dalším postupu připraveno na proměnlivost světa, musí být „hluboce modulárníÿ. Ent musí plánovat své chování formulováním nikoli konkrétních posloupností atomických instrukcí, ale formulováním velmi abstraktních cílů. Teprve v další fázi musí ent abstraktní cíle zjemnit, formulovat přesněji. Na úroveň konkrétních atomických instrukcí se však dostane typicky až po několika postupných zjemněních:
21
4.2. PROČ NE GENETICKÉ ALGORITMY najíst se sehnat jídlo
sníst ho
zvolit nadějnou místnost (kuchyně, zahrada. . . ) dojít do ní naplánovat cestu místnostmi
nastane-li problém, znovu naplánovat cestu
procházet postupně místnostmi dojít ke dveřím ...
sebrat jídlo
není-li tu jídlo, znovu volit nadějnou místnost
dojít k němu ...
zvednout ho
...
otevřít a projít
...
Navíc (a to je největší technický problém), na sobě jednotlivé části postupu závisí. Pro vykonávání jedno logického celku cíle je již nutné znát konkrétní výsledek předešlých celků (chci-li jíst jídlo, musím jíst to, které jsem našel). Naplánování postupu však musí ent provádět dříve, než se pustí do jeho vykovánání. Formalizace pro účely genetických algortimů by tedy vyžadovala abstraktní objekty s volnými parametry, ovšem pro vykonávání by se tyto parametry již musely vyplnit konkrétními hodnotami. Především kombinace složitosti prostředí a běhu na dlouhou vzdálenost je to, co naprosto vylučuje možnost použití genetických algoritmů. Dosáhne-li ent například zlepšení svého fyzického stavu, pokud si obstará suroviny, připraví a sní pokrm, jde o úkon trvající řekněme 200 kol běhu času. V každém kole ent mohl volit z průměrně 10 instrukcí. Optimální postup pro vykonání tohoto úkonu je tedy jeden z 10200 postupů, a hledat jej hrubou silou genetických algoritmů přesahuje možnosti dnešních počítačů. V těchto dvou ohledech se naše simulované prostředí přirozenému lidskému světu skutečně přiblížilo. Na otázku, jak je možné, že příroda úspěšný postup najít dokázala a stabilně funguje, lze pak odpovědět jedině tak, že na volbu postupu dostatek času měla. Dnešní každodenní situace jsou očividně vystavěny z mnohokrát opakovaných a dobře vyzkoušených úseků. (V terminologii genetických algoritmů lze říci, že křížení dobrých kandidátů výrazně převažuje nad mutací.) Projekt Enti by mohl mít přirozené pokračování – pokud se podaří uvést do chodu dlouhodobě stabilní simulaci, se značně složitými ručně psanými programy pro enty, lze uvažovat o přidání „entích děcekÿ. Entí děcka by již nebyla vybavena předem připravenou sadou postupů, ale opakováním a drobnými úpravami by se snažila zajistit dobrý chod světa. Samostanou kapitolu v projektu Enti představuje cíl implementovat komunikaci mezi enty v přirozeném jazyce. Rovněž s ohledem na tento cíl použití genetických algoritmů vypadá ze hry, představa, že by se enti sami naučili mlu-
22
KAPITOLA 4. JAK ENTY PROGRAMOVAT?
vit přirozenou řečí, je zatím zcela absurdní.
Kapitola 5
Komunikace přirozeným jazykem 5.1
Proč projekt zahrnuje komunikaci v přirozeném jazyce
Cílem vědeckého projektu Enti (viz rozdělení v sekci 1.1(str. 5) ) bylo studovat a modelovat též komunikaci v přirozeném jazyce. Z hlediska softwarového projektu Enti by samozřejmě bylo snazší modelovat komunikaci nějakou umělou řečí, formálním jazykem s přesně danou sémantikou i syntaxí. Volba obtížnějšího cíle však dává prostor zabrousit i do jiných oborů, především lingvistiky a částečně sémantiky, a doslova si osahat základní problémy, které tyto obory řeší. Řadu dotčených problémů jsme však museli zkrátka pominout a pro naše účely zakázat, aby bylo možné softwarový projekt vůbec dokončit. I přes silná apriorní omezení, a tedy na velmi malém výseku z jazykového systému, jaký je v projektu realizován, je však ve výsledku na první pohled zřejmá řada problémů nedořešených nebo nevyřešených. Důvod, proč se tyto problémy nepodařilo (a nikdy nepodaří) zcela vyřešit, tkví v jazyce samotném, ve složitosti jeho vnitřní struktury s výjimkami doslova na každém kroku.
5.2
Účel komunikace mezi lidmi
Jazyk má funkci sdělnou, tolik Šmilauer[6]. Pro účely modelování přirozené komunikace v rámci našeho projektu je však třeba studovat funkci jazyka jemněji a rozhodnout se, co do projektu zahrnout a co již ne: Mluvením nahradit vnímání. Komunikace s kolegou mi umožňuje nechodit na místo, kde lze něco vidět, pokud tam kolega už byl a může mi o tom referovat. Přitom informační zisk může být větší buď pro mne (já se ptám 23
24
KAPITOLA 5. KOMUNIKACE PŘIROZENÝM JAZYKEM a kolega odpovídá) nebo pro kolegu (já kolegu varuji, že v místnosti je něco nebezpečného, nebo naopak informuji, že něco, co on potřeboval je již k dispozici).
Mluvením nahradit konání. Nemusím určitou práci ve světě provádět já, pokud se komunikací dohodnu s kolegou, že mne zastoupí. Mluvení jako nástroj pro myšlení. Lidé provádějí rozumové konstrukce často (ne-li vždy) za použití vnitřní řeči, promluvou k sobě samému. Vnitřní řeč pomáhá člověku udržet po delší dobu pozornost zaměřenou na konkrétní problém. Umožňuje sledovat sám sebe při provádění analýzy problému a kontrolovat správnost postupu. Mluvením nahradit myšlení. Komunikace s kolegou mi umožňuje neprovádět nějakou rozumovou konstrukci, pokud ji kolega už provedl a může pomocí jazyka stejnou konstrukci vyvolat ve své mysli. Mluvením řídit spolupráci. Komunikace umožňuje více osobám zapojit se do práce za společným cílem. Spolupracující bytosti se napřed musí dohodnout na společném cíli, tj. vypracovat a každá přijmout jeho zadání. Při samotné práci komunikace umožňuje pohodlnější synchronizaci v čase a prostoru. V projektu Enti se omezíme pouze na první dva uvedené cíle: mluvením nahradit vnímání a konání. Myšlenkové konstrukce v mozku enta nedokážeme v rámci toho projektu propracovat do takové bohatosti, aby se přirozený jazyk stal užitečným nástrojem pro jejich vedení, natož pak aby o nich bylo zajímavé a úsporné mluvit. (Proces porozumění popisu myšlenkové konstrukce ať již z vlastní vnitřní řeči nebo z řeči kolegy bude v našem případě bohužel vždy složitější, než provést celou konstrukci znova.) Rovněž spolupráci entů se nepodaří rozvinout v projektu do takové míry, aby komunikace přesáhla pouhé rozkazování kolegům (což je pokryto ve druhém bodu). Z popsaného rozhodnutí vyplývá mj. to, že komunikace s enty nikdy nebude možné vést tak, aby člověk zjišťoval obecně platná tvrzení o entím světě. (Např. „Jsou mrkve oranžové?ÿ) Naši enti nemohou být z časových důvodů vybaveni bohatším a obecnějším odvozovacím aparátem (např. sémantickými sítěmi či jinou logickou reprezentací), aby byli schopni na takové otázky odpovídat. Rádi bychom toto omezení v pozdější době odstranili, neboť je v současné době k dispozici řada teoretických nástrojů nabízejících se k ověření praxí.
5.3
Obtížně zvládnutelné rysy přirozeného jazyka
Z teoretické i komputační lingvistiky je známo, že přirozený jazyk má řadu rysů obtížně uchopitelných formálními přístupy (které jsou nezbytně nutné, chceme-li programovat). Jedná se především o:
5.3. OBTÍŽNĚ ZVLÁDNUTELNÉ RYSY PŘIROZENÉHO JAZYKA
25
Víceznačnost. Jeden jazykový výraz (text, věta i jednotlivé slovo) mohou vyjadřovat více různých významů. Je úkolem posluchače z možných významů sdělení vybrat ten, který odpovídá dané situaci. Víceznačnost se přitom projevuje na všech rovinách jazykového popisu 1 : Morfologická rovina: „přiÿ může být předložka, podstatné jméno (pře) i sloveso (přít se) Syntaktická rovina: „Žena v rohu zahrady plela len.ÿ Plela v rohu zahrady nebo žena v rohu zahrady? „Ženu holí stroj.ÿ Věta má dokonce tři čtení: Oblékej ženu holí. Přístroj holí ženu. Já ženu stroj pomocí hole. Sémantická rovina: ”Seber hadr a kýbl.ÿ „Vyždímej/Naplň ho.ÿ Zájmeno „hoÿ lze správně identifikovat až na základě znalosti světa, kde se kbelíky obyčejně neždímají a hadry nenaplňují. Vágnost, neurčitost. Často mluvčí záměrně, omylem, či zkrátka nevyhnutelně formuluje sdělení, které neobsahuje všechny potřebné informace pro plné pochopení. Někdy tak mluvčí činí pro úsporu času v komunikačním procesu (a s předpokladem, že posluchač už dané informace má a nemusí je dostat znovu), někdy tak činí, protože na konkrétní podrobnosti z hlediska sdělení nezáleží, a někdy tak činí prostě proto, že konkrétní informaci nemá. Z teoretického hlediska není vágnost vyjádření nic jiného, než víceznačnost na poslední z rovin jazykového popisu. Na nižších rovinách popisu je totiž většinou možné víceznačnost čtení vyřešit na základě znalostí pravidel pro vyšší roviny. (Např. nelze najít správnou českou větu, v níž by se slova ”při”podst. jm./sloveso a „únavěÿ vyskytovala bezprostředně za sebou, a v této situaci tedy slovo „přiÿ může být výhradně předložkou.) Jak je patrné z příkladu „Ženu holí strojÿ, někdy se víceznačnost i z nižších rovin bez potíží přenese do roviny nejvyšší. Pro nejvyšší roviny jazykového popisu je však pro zjednoznačení čtení nutno zabrousit až do popisu celé situace, do tzv. pragmatického kontextu. Zatím bohužel málo teorií přináší uspokojivé formalismy pro popis pragmatické situace. Pro účely našeho projektu většina těchto formalismů přesahuje svou složitostí naše záměry. Výjimky na každém kroku. V přirozeném jazyce není nic bez výjimky. Uvedeteli jakékoli pravidlo, které by mělo platit na celém jazykovém systému, nebo i jen na jeho (rádoby) dobře vymezené oblasti, bude jen otázkou času, kdy pro vás někdo najde protipříklad. Jinými slovy, chcete-li přirozený jazyk zpracovávat strojově, bude jen otázkou času, kdy se vaše pravidla ošetřováním stále nových a nových výjimek zkomplikují natolik, že se v nich přestanete orientovat. O tomto problému většina lingvistů-teoretiků ví, a třebaže ho vlastně nijak neskrývají, nedá se bohužel říci, že by na něj dostatečně hlasitě upozorňovali nebo se jej dokonce snažili řešit. Lingvistům-praktikům leží tento problém před očima každý den. 1 Záměrně zde zjednodušujeme, pro přesné definice vyšších rovin jazykového popisu je třeba konzultovat literaturu, např. [5] nebo [3].
26
KAPITOLA 5. KOMUNIKACE PŘIROZENÝM JAZYKEM
Kromě problémů víceznačnosti a vágnosti komputační lingvistika dosud čelí obtížné české syntaxi, která není bohužel ve všech svých rysech ještě plně strojově zvládnuta. S ohledem na omezení přirozeného jazyka, která jsme přijali pro účely projektu se však problém nedostatečného teoretického zpracování nenaráží. Spíše narážíme na nedostatek praktických aplikací zpracování české syntaxe, které by byly studentům k dispozici. Nebo lépe řečeno: žádná z dostupných aplikací není řešením definitivním, a je bohužel snazší budovat aplikaci zcela novou, než použít jakékoli cizí částečné řešení. Naproti tomu nejnižší vrstvy jazykového popisu už jsou znamenitě teoreticky popsány a existují pro ně i konkrétní aplikace. Díky tomu měl náš projekt např. k dispozici morfologickou analýzu a syntézu slov dr. Hajiče.
5.4
Lingvistické zaměření našeho projektu
Z popsaných problémů jsme se rozhodli v našem projektu modelovat především problémy s vágním označováním. Konkrétně jsme se zaměřili na problematiku (vágního) odkazování na předměty. Jaksi mimochodem se náš projekt musí vypořádat s víceznačností na morfologické či syntaktické rovině. Abychom se však v rámci tak krátké doby dostali až na úrověň problémů nejednoznačnosti na sémantické rovině, přistoupili jsme k řadě omezení na nižších rovinách. Na morfologické rovině popisu náš projekt těží z existence morfologického analyzátoru dr. Hajiče2 , a nemuseli jsme tedy k žádným omezením přistupovat. Analyzátor je na syntaktické rovině připraven pouze na následující jevy: • věta hlavní, souřadné souvětí několika vět hlavních • věty oznamovací, rozkazovací a tázací • koordinace jmenných skupin • jednoduché elipsy (vynechání toho, co již bylo řečeno v předchozí větě) Analyzátor není připraven zejména na tyto jevy: • vedlejší věty • vsuvky Navíc pevně omezujeme čtení pro typicky syntakticky nejednoznačné konstrukce: Koordinace: Přívlastky jsou zásadně chápány jako rozvití nejbližšího jména, nikdy jako rozvití celé koordinace. (Tj. spojení „černá kniha a sešitÿ nic nevypovídá o barvě sešitu.) 2 http://shadow.ms.mff.cuni.cz/pdt/Morphology
and Tagging/Morphology/
5.5. PROCES KONKRETIZACE
27
Rozvití předložkovou skupinou: Ve výrazech jako „nůž v krabici na stole v kuchyniÿ každá předložková skupina pevně rozvíjí nejbližší předcházející jméno, tj. „v kuchyniÿ rozvíjí „stůlÿ, „na stoleÿ rozvíjí „krabiciÿ. . . Další omezení vyplývají již z definice světa entů a odpovídajícím způsobem zjednodušené sémantiky, podrobně se těmto omezením věnuje následující kapitola.
5.5 5.5.1
Proces konkretizace Rozdíly mezi lidmi a enty
Enti žijí v jednoduchém světě: • věci, objekty mají pevně daný „typÿ (typ kniha, typ konev) • pevně daný „exemplářÿ (neexistují dva objekty stejného typu a exempláře, rozlišování exemplářů objektu jednoho typu je pro enty samozřejmé a nemůže zde dojít k chybě), • jsou rozmístěny v místnostech, • mohou být uloženy v kontejnerech nebo položeny na podložkách • mají určité vlastnosti (vlastnosti jako barva a materiál umožňují lidským entům snáze rozlišovat exempláře) Navíc mají enti jednoduchou vnitřní konstrukci: lingvistický modul je pro zbytek enta černou skříňkou s pevně daným jednoduchým vstupním a výstupním datovým formátem. V tomto formátu jsou přípustné pouze dva způsoby označování objektů: • přesně identifikovaný objekt, označený svým tzv. handlem, tj. jednoznačným číslem • obecný objekt popsaný svými jednoduchými vlastnostmi (tzv. member), jednou z těchto vlastností je i typ předmětu, jinou místnost, v níž se předmět nalézá, dále pak např. barva, v žádném případě však ne jakákoli vazba na to, jak bylo s předmětem nakládáno ap. Naproti tomu přirozený jazyk označuje předměty vágně a může též popsat dosud neznámý konkrétní předmět mnohem složitějším způsobem než je prostý výčet vlastností („ten hrnek, který jsi sice nikdy neviděl, ale který poznáš podle nalomeného ucha, až vejdeš do komoryÿ). Lingvistický modul musí překlenout rozpor mezi vágním označením a potřebou dalších částí enta pracovat výhradně se zcela konkrétními předměty, příp. s membery. Proces konkretizace je ta část zpracování vyslechnuté věty, při níž ent určuje, který konkrétní exemplář předmětu vyslechnutá věta označuje.
28
5.5.2
KAPITOLA 5. KOMUNIKACE PŘIROZENÝM JAZYKEM
Průběh konkretizace
V dalším textu uvažujme již jen tzv. plnou konkretizaci, kdy je třeba určit zcela konkrétní předmět. Částečná konkretizace, kdy stačí odevzdat předmět popsaný jednoduchými vlastnostmi může totiž poměrně přímočarým způsobem navázat hned na syntaktickou analýzu věty. Plná konkretizace končí úspěchem, pokud se podařilo najít právě jeden předmět vyhovující dosud známým kritériím. (Samozřejmě se může stát, že skutečný stav světa již neodpovídá tomu, co si ent o světě myslí, ale tento problém nepatří do konkretizace a jeho řešení přesahuje rámec projektu. Nám postačí, připustíme-li v simulaci vznik tohoto problému.) Neúspěch konkretizace může nastat pokud ent nenašel žádný vyhovující předmět, nebo jich najde více. V případě více možných kandidátů ent požádá o doplnění údajů, aby mohl předmět bezpečně určit. Stojí za poznámku, že v průběhu plné konkretizace není možné s entem hovořit o předmětu, který ent nikdy neviděl, přesněji, jehož handle ent vůbec nezná. Pro tento účel lze použít pouze částečné konkretizace, viz 5.5.5 (str. 30) . Podstatné je připomenout, že ent principielně nemůže vyslechnout rozkaz ap. vyžadující konkrétní exemplář předmětu, pokud se entovi nepodařilo tento konkrétní exemplář určit. Není možné částečně pochopený rozkaz předat deterministicky pracujícím skriptům.
5.5.3
Paměť objektů, konkretizace zájmen a odkazů na „tenÿ předmět
Stručně naznačíme, jak je ent připraven na to, aby dokázal určit, jaký objekt má kolega na mysli, použije-li osobního zájmene „onÿ nebo použije-li před označením objektu ukazovacího zájmene „tenÿ. Detaily implementace lze najít v programátorské dokumentaci. Aby dokázal ent určit antecedent zájmen, je vybaven tzv. pamětí předmětů. V této paměti jsou uskladněny handly konkrétních objektů, které ent dokázal v nedávných vstupních větách identifikovat, nebo které nedávno sám vyslovil. Pro snadné vyhledávání jsou v paměti též uvedeny jmenné rody a lemmata, která se používají pro označování daných typů objektů. V paměti zcela záměrně nejsou uskladněny kopie informací o vlastnostech předmětů, neboť většina vlastnosti (nejvýrazněji pak umístění) se může i během krátkého období hovoru změnit. Při každém vyhledávání předmětu z této paměti jsou tedy vlastnosti prověřovány proti aktuálním údajům v hlavní databázi enta. (Přitom pochopitelně ani údaje v hlavní databázi nemusí již odpovídat realitě.) Paměť objektů má podobu zásobníku „s vyzdvihávánímÿ. Nové objekty se do paměti přidávají vždy na vrch, ovšem též jakmile je nějaký objekt v paměti úspěšně vyhledán, je přesunut na vrch zásobníku. Při hledání antecedentu osobního zájmene „onÿ je pak použit první z předmětů, jehož rod souhlasí se jmenným rodem zájmene. Paměť objektů je též pou-
5.5. PROCES KONKRETIZACE
29
žita v okamžiku, kdy je třeba určit předmět označený mj. ukazovacím zájmenem „tenÿ. Denotát takového výrazu (např. „ten modrýÿ nebo „ten šroubovákÿ) je vybírán pouze z kandidátů v rámci paměti předmětů, nikoli ze všech adeptů z hlavní databáze. Dodržování tohoto postupu poměrně dobře simuluje, jak lidé osobních a ukazovacích zájmen používají. Díky tomuto postupu je správně určen antecedent např. v rozhovoru: Seber modrý šroubovák. Který modrý šroubovák, ten šroubovák v pokoji člověka nebo ten v šroubovák v dílně? Uživatel Ten v pokoji člověka. (Ent sebere šroubovák.) Uživatel Seber žlutý šroubovák v pokoji člověka. (Ent sebere druhý šroubovák.) Uživatel Dej ho do skříně. Ent Do které skříně, do té skříně v pokoji policajta. . . ? Uživatel Do
. (ukažte na skříň) (Ent dá žlutý šroubovák do skříně.) Uživatel Dej ten modrý na postel v pokoji člověka. (Ent dá modrý šroubovák na postel.) Uživatel Ent
Je však třeba upozornit na dva významné problémy stávajícího řešení. První je popsán v následující sekci, druhému, problému sémantické přípustnosti, je věnována samostatná kapitola 5.6 na str. 32. Úskalí černé skříňky lingvistického modulu Na úrovni lingvistického modulu není úkolem zajistit porozumění větám obsahujícím nenápadnou referenci na aktuální dění přímo ve svém smyslu (rozuměj smysl věty, jak je definován pro účely projektu, identifikován příslušným handlem). Příkladem takové věty může být rozkaz: „Přestaň.ÿ, kdy pro splnění tohoto rozkazu musí ent správně odvodit, jaké části jeho plánu se rozkaz týká. Toto odvození je již úkolem rozvrhovače v interpretu jazyka E. Naproti tomu je úkolem lingvistického modulu zajistit porozumění všem referencím, které se týkají argumentů věty. Z důvodů zvládnutelné implementace je však lingvistický modul do značné míry izolován od zbytku projektu. Důsledkem této izolace je to, že se lingvistický modul nedozví prakticky nic o dění okolo enta. (Naproti tomu se může dozvědět velmi mnoho o okamžitém stavu světa okolo enta, jak se však zdá, je statická informace značně nedostačující, viz též kapitolu věnovanou problému pozornosti entů, str. 16.) Lingvistický modul je aktivován teprve v okamžiku, kdy ent zaslechne nějakou větu, nebo kdy nějakou větu chce vyslovit. V tuto chvíli je bohužel již pozdě snažit se určit, s kterými předměty v poslední době ent sám či někdo jiný manipuloval, nebo dokonce určit, co kdo dělal. Z tohoto důvodu je pro lingvistický modul nemožné odvodit správně referenci
30
KAPITOLA 5. KOMUNIKACE PŘIROZENÝM JAZYKEM
na předmět např. ve větě: „Polož ten nůž (který jsi právě sebral).ÿ Významná rozšíření projektu by bylo třeba učinit:
V paměti enta: aby sledovala a zapisovala veškeré aktuální dění okolo enta. V interpretu: aby pravidelně do paměti ukládal informace o tom, jaké činnosti právě provádí.
5.5.4
„Libovolnýÿ ostrý nůž, únik z plné konkretizace
Často mluvčímu nemusí zas tolik záležet na tom, který konkrétní ostrý nůž má ent přinést, ap. Pro tento případ vybavíme lingvistický modul možností přijmout jako udání předmětu i výraz tvaru „libovolný ostrý nůžÿ. Slovo „libovolnýÿ dává entovi právo zvolit předmět dle svého uvážení. Lingvistický modul tohoto práva zneužije a prostě jeden konkrétní předmět odpovídající daným vlastnostem zvolí. Identifikátor zvoleného předmětu pak odevzdá dalším částem projektu, jako by právě tento předmět zvolil již sám mluvčí. Na první pohled je toto řešení přijatelné, a pro svou jednoduchost je v projektu i implementováno. Skrývá v sobě však nepříjemné úskalí: ten konkrétní předmět, který lingvistický modul bez rozmyslu zvolil, může být pro provedení daného rozkazu méně vhodný (třeba proto, že je vzdálen), nebo zcela nepoužitelný (třeba proto, že již byl zničen). Přitom mluvčímu vůbec nezáleželo na tom, který konkrétní předmět má ent zvolit, pokud předmět bude vyhovovat daným vlastnostem.
5.5.5
„Nějakýÿ ostrý nůž, částečná konkretizace a problém s odkazováním
V kontrastu s úplnou konkretizací možnost částečné konkretizace předmětu v řadě případů lépe vyhovuje zadání rozkazu. Je-li reakční skript enta připraven přijmout složitější popis předmětu pomocí požadovaných vlastností, má lingvistický modul snazší úkol. Problém volby optimálního předmětu se tím neřeší, ale přesouvá až do reakčního skriptu, kde může být řešen účinněji. (Ent může vyhovující předmět hledat i na místech, kde dosud nebyl, a v kritickém případě jej může jít nechat vyrobit. Praxe s programováním skriptů s nekonkrétními předměty ukazuje, jak pracné však i ve skriptu je, přiblížit se „ideálnímu realistickémuÿ chování.) Částečnou konkretizaci lze s úspěchem použít, pokud chceme entovi dát pokyn týkající se předmětu, jehož handle ent dosud nezná. Ent až v průběhu reakčního skriptu může dojít do místnosti, kde poprvé spatří předmět vyhovující daným vlastnostem. Teprve v tento okamžik se tedy ent dozví handle předmětu, o němž předtím mohla dobře jít řeč.
5.5. PROCES KONKRETIZACE
31
Nemožnost odkazování na částečně konkretizované předměty Nepříjemný důsledkem při použití částečné konkretizace je ovšem nemožnost odkazovat se na předmět pomocí zájmene. Není možné entovi najednou říct: „Najdi nějaký tupý nůž a nabruš ho.ÿ V době zpracování tohoto rozkazu bude výraz „nějaký tupý nůžÿ zpracován na member, bez identifikace konkrétního handlu. Rozkaz „nabrušÿ naproti tomu jako zadání pravděpodobně bude očekávat pouze konkrétní handle. I kdyby byl příkaz „nabrušÿ připraven přijmout předmět popsaný výčtem vlastností, tj. member, a lingvistický modul v době zpracování celého rozkazu tedy zjištěný member dal oběma částem rozkazu, nemusí výsledek odpovídat očekáváním: Ent najde nějaký tupý nůž a nějaký (jiný?) tupý nůž nabrousí. Řešení tohoto problému by vyžadovalo buď užší spolupráci lingvistického modulu s interpretem (lingvistický modul by antecedent zájmene určil až po vykonání prvního rozkazu), nebo složitější definici datového typu member tak, aby tento typ umožňoval jakousi koindexaci, příznak, že dva membery označují tentýž předmět. Současná architektura projektu však bohužel není ani na jedno z těchto řešení připravena. Rozhodnutí nerealizovat nijak odkazování na nekonkrétní předměty s sebou nese bohužel technický problém: jak řešit situaci, kdy se uživatel o referenci na nekonkretizovaný předmět pokusí? jak vůbec poznat, že se uživatel o tento způsob odkazování pokouší? Aby lingvistický modul poznal, že uživatel vyslovil odkaz na částečně konkretizovaný předmět, je třeba do paměti
5.5.6
Co nepodléhá konkretizaci
Z procesu konkretizace jsou vyloučeni: • enti sami; enti jsou označování vždy vlastními jmény nebo osobními zájmeny • názvy místností; jména místností jsou v celém světě unikátní • názvy vlastností předmětů a názvy hodnot vlastností předmětů • názvy pro děje, děje samotné Z těchto omezení stojí za povšimnutí především požadavek na jednoznačné označování místností. Fakt, že můžeme vůbec formulovat toto omezení, vychází z rozhodnutí pro diskretizaci světa entů, které jsme učinili již v kapitole 2(str. 7) . Pěkně to dokládá, jak cenné pro programátora třebas i lingvistických aplikací, jsou jakékoli „zarážkyÿ a jednoznačná klasifikace objektů do nějakých tříd, je-li dána jako omezení vycházející již zvenku, ze samotné definice světa.
32
KAPITOLA 5. KOMUNIKACE PŘIROZENÝM JAZYKEM
5.6 5.6.1
Problém sémantické přípustnosti Ukázka problému
V implementaci projektu Enti se pěkně odráží hluboká provázanost mezi realitou světa a tím, jak se o této realitě mluví. Přestože je realita světa entů velmi omezená, v projektu stále není implementován dostatek vazeb, aby ent o této omezené realitě mluvil způsobem výhradně adekvátním. Pro správný chod by lingvistický modul (a samozřejmě též rozvrhovač) zřejmě potřeboval vestavěný model světa. Chybí-li entovi aparát, ent si neumí představit možné světy. V důsledku toho se klidně pustí do vykonávání rozkazu „Seber kuchyň.ÿ, přestože je přece každému jasné, že tento úkol nebude možné splnit. Jako subtilnější příklad téhož problému lze uvést dva rozkazy: • V komoře seber hadr a kbelík a naplň ho. • V komoře seber hadr a kbelík a vyždímej ho. Zájmeno „hoÿ ve druhé části rozkazu jednou označuje uvedený kbelík, podruhé hadr. (Zní-li vám druhý příklad stále násilně, formulujte jej ještě opatrněji: „. . . a nezapomeň ho vyždímat.ÿ Tím mimoděk posunete pozornost posluchače a pochybnost o správné formulaci nebude postřehnuta.) Přitom se kbelík a hadr ve světě entů neliší svými vlastnostmi vůbec nijak, s výjimkou toho, že u kbelíku server prostředí uvádí též naplněnost vodou, a u hadru ne. (Pro enta je obtížné tento rozdíl postřehnout i proto, že se stávající implementací paměti neumí ent odlišit, zda u hadru naplněnost vodou není přípustná vlastnost, nebo jen momentálně její přesnou hodnotu nezná.) Jediný, ale zato zásadní rozdíl potřebný pro správnou identifikaci antecedentu zájmene „hoÿ spočívá v tom, že atomická instrukce naplnění hadru vodou vždy selže, zatímco naplnění kbelíku vodou často uspěje (a podobně se ždímáním).
5.6.2
Pseudořešení problému sémantické přípustnosti
Zdánlivým řešením problému sémantické přípustnosti je „patřičné vychováníÿ lingvistického modulu. V praxi to znamená, že pro každý typ předmětu a každý argument každého typu věty explicitně uvést, zda je možné na daném místě daný předmět použít. Z časových důvodů a též pro zjevnou teoretickou nezajímavost a neúplnost tohoto řešení jsme od implementace sémantických omezení formou předdefinovaných výčtl upustili. Enti jsou tedy naivně poslušní.
5.6.3
Náznak obecnějšího řešení
Jak již bylo naznačeno v příkladu výše, obecným řešením problému sémantické přípustnosti by mohl být model světa vestavěný v mozku enta. Ent by pak před
5.6. PROBLÉM SÉMANTICKÉ PŘÍPUSTNOSTI
33
akceptováním věty prověřil nejen její syntaktickou strukturu, ale též v modelu světa „vyzkoušelÿ svoji úplnou reakci na danou větu. Model světa by tedy ještě v době zpracování zaslechnuté věty dokázal odpovědět: toto není možné, nebo nic nenaznačuje, že by toto nemělo jít. Očividně tento obecný návrh velmi hluboce zasahuje i do entova rozvrhovače činností – na jedné straně potřebuje model vědět, jakou činností a jak přesně by ent na větu reagoval, na druhé straně by bylo vhodné hotovou představu o reakci přímo použít jako podrobný plán činnosti. V projektu Enti jsme nevolili tento adekvátnější postup hned ze dvou zásadních důvodů: jednak příliš těsná vazba mezi komponentami komplikuje realizaci, a dále není podle našich znalostí dosud k dispozici teoreticky propracovaný a dostatečně silný implementovatelný formální aparát pro popis modelu světa a činností v něm.
34
KAPITOLA 5. KOMUNIKACE PŘIROZENÝM JAZYKEM
Literatura [1] Jirků a kol. Programování v jazyku Prolog. Nakl. techn. lit., 1991. [2] Karel Malík. Programování v jazyku Simula 67. Univerzita Karlova, 1984. [3] Igor A. Mel’čuk. Dependency Syntax - Theory and Practice. Albany: State University of New York Press, 1988. [4] C. Pollard and I. Sag. Head-driven Phrase Structure Grammar. Chicago, 1994. [5] Petr Sgall. Generativní popis jazyka a česká deklinace. Academia, Prague, Czech Republic, 1967. [6] Vladimír Šmilauer. Novočeská skladba [Syntax of Contemporary Czech]. SPN, Prague, Czech Republic, 3rd edition, 1969.
35