Algoritmus CYK - CYK algorithm

v počítačová věda, Algoritmus Cocke – Younger – Kasami (alternativně nazývané CYKnebo CKY) je analýza algoritmus pro bezkontextové gramatiky vynalezl Ichirō Sakai.[1] Algoritmus je pojmenován po některých svých nově objevitelích: John Cocke, Daniel Younger a Tadao Kasami. Zaměstnává to analýza zdola nahoru a dynamické programování.

Standardní verze CYK funguje pouze na bezkontextových gramatikách uvedených v Chomsky normální forma (CNF). Libovolná bezkontextová gramatika však může být transformována (po konvenci) na gramatiku CNF vyjadřující stejný jazyk (Sipser 1997 ).

Důležitost algoritmu CYK vyplývá z jeho vysoké účinnosti v určitých situacích. Použitím Velká O notace, nejhorší doba provozu CYK je , kde je délka analyzovaného řetězce a je velikost gramatiky CNF (Hopcroft & Ullman 1979, str. 140). Díky tomu je jedním z nejúčinnějších algoritmů syntaktické analýzy, pokud jde o nejhorší případ asymptotická složitost, ačkoli v mnoha praktických scénářích existují jiné algoritmy s lepší průměrnou dobou chodu.

Standardní forma

The dynamické programování Algoritmus vyžaduje vykreslení bezkontextové gramatiky Chomsky normální forma (CNF), protože testuje možnosti rozdělení aktuální sekvence na dvě menší sekvence. Libovolnou bezkontextovou gramatiku, která negeneruje prázdný řetězec, lze v CNF reprezentovat pouze pomocí výrobní pravidla formulářů a .

Algoritmus

Jako pseudokód

Algoritmus v pseudo kód je následující:

nechat vstup je řetězec  skládající se z n postavy: A1 ... An.nechat gramatika obsahuje r neterminální symboly R1 ... Rr, se symbolem zahájení R1.nechat P[n,n,r] být pole booleovců. Inicializujte všechny prvky P na falešný.pro každého s = 1 až n    pro každého jednotková výroba RprotiAs        soubor P[1,s,proti] = pravdapro každého l = 2 až n - Délka rozpětí    pro každého s = 1 až n-l+1 - Začátek rozpětí        pro každého str = 1 až l-1 - Rozdělení rozpětí            pro každého Výroba RARb RC                -li P[str,s,b] a P[l-str,s+str,C] pak soubor P[l,s,A] = pravda-li P[n,1,1] je pravda pak     je členem jazykajiný     není členem jazyka

Pravděpodobnostní CYK (pro nalezení nejpravděpodobnější analýzy)

Umožňuje obnovit nejpravděpodobnější analýzu s ohledem na pravděpodobnosti všech produkcí.

nechat vstup bude řetězec  skládající se z n postavy: A1 ... An.nechat gramatika obsahuje r neterminální symboly R1 ... Rr, se symbolem zahájení R1.nechat P[n,n,r] být pole reálných čísel. Inicializujte všechny prvky P na nulu.nechat zadní[n,n,r] být pole zpětně ukazujících trojic.pro každého s = 1 až n  pro každého jednotková výroba RprotiAs    soubor P[1,s,proti] = Pr (RprotiAs)pro každého l = 2 až n - Délka rozpětí  pro každého s = 1 až n-l+1 - Začátek rozpětí    pro každého str = 1 až l-1 - Rozdělení rozpětí             pro každého Výroba RARb RC        prob_splitting = Pr (RARb RC) * P[str,s,b] * P[l-str,s+str,C]        -li P[str,s,b]> 0 a P[l-str,s+str,C]> 0 a P[l,s,A] pak           soubor P[l,s,A] = prob_splitting soubor zadní[l,s,A] = 

Jako próza

Neformálně tento algoritmus zohledňuje všechny možné podřetězce vstupního řetězce a sad být pravdivý, pokud je podřetězec délky začínající od lze generovat z neterminální proměnné . Jakmile vezme v úvahu podřetězce délky 1, přejde k podřetězcům délky 2 atd. U podřetězců délky 2 a větší zvažuje každé možné rozdělení podřetězce na dvě části a kontroluje, zda existuje nějaká výroba takhle odpovídá první části a odpovídá druhé části. Pokud ano, zaznamená jako shoda s celým podřetězcem. Jakmile je tento proces dokončen, věta je gramatikou rozpoznána, pokud je podřetězec obsahující celý vstupní řetězec uzavřen počátečním symbolem.

Příklad

Analýza věty pomocí algoritmu CYK

Toto je příklad gramatiky:

Nyní ta věta jí vidličkou rybu je analyzována pomocí algoritmu CYK. V následující tabulce v , i je číslo řádku (počínaje spodní částí číslem 1) a j je číslo sloupce (počínaje vlevo od 1).

CYK stůl
S
VP
 
S
VPPP
SNPNP
NPV, VPDet.NPDetN
onaARybasAVidlička

Pro čitelnost tabulka CYK pro P je zde znázorněna jako 2-rozměrná matice M obsahující sadu neterminálních symbolů Rk je v pokud, a pouze pokud, .Ve výše uvedeném příkladu, protože počáteční symbol S je v , věta může být generována gramatikou.

Rozšíření

Generování stromu analýzy

Výše uvedený algoritmus je a rozpoznávač to určí pouze to, zda je věta v jazyce. Je jednoduché jej rozšířit na a analyzátor který také konstruuje a analyzovat strom, uložením uzlů parse stromu jako prvků pole, namísto booleovské 1. Uzel je propojen s prvky pole, které byly použity k jeho vytvoření, aby se vytvořila stromová struktura. Pokud má být vytvořen pouze jeden analyzovaný strom, je v každém prvku pole potřeba pouze jeden takový uzel. Pokud však mají být zachovány všechny parsovací stromy nejednoznačné věty, je nutné uložit do prvku pole seznam všech způsobů, jak lze získat odpovídající uzel v procesu syntaktické analýzy. To se někdy děje s druhou tabulkou B [n, n, r] tzv zpětné ukazateleKonečným výsledkem je pak sdílený les možných analyzovaných stromů, kde se mezi různé analýzy analyzují společné části stromů. Tuto sdílenou doménovou strukturu lze pohodlně číst jako nejednoznačná gramatika generování pouze rozebrané věty, ale se stejnou nejednoznačností jako původní gramatika a se stejnými parsovacími stromy až po velmi jednoduché přejmenování jiných než terminálů, jak ukazuje Lang (1994).

Analýza gramatik bez kontextu bez CNF

Jak zdůraznil Lange & Leiß (2009) Nevýhodou všech známých transformací do Chomského normální formy je, že mohou vést k nežádoucímu nafouknutí ve velikosti gramatiky. Velikost gramatiky je součtem velikostí jejích produkčních pravidel, kde velikost pravidla je jedna plus délka jeho pravé strany. Použitím pro označení velikosti původní gramatiky se může v nejhorším případě zvětšit velikost na , v závislosti na použitém transformačním algoritmu. Pro použití ve výuce navrhují Lange a Leiß mírné zobecnění algoritmu CYK, „aniž by byla ohrožena účinnost algoritmu, jasnost jeho prezentace nebo jednoduchost důkazů“ (Lange & Leiß 2009 ).

Analýza vážených gramatik bez kontextu

Je také možné rozšířit algoritmus CYK tak, aby analyzoval řetězce pomocí vážený a stochastické bezkontextové gramatiky. Váhy (pravděpodobnosti) jsou poté uloženy v tabulce P namísto booleanů, takže P [i, j, A] bude obsahovat minimální váhu (maximální pravděpodobnost), kterou lze podřetězec z i do j odvodit z A. Další rozšíření Algoritmus umožňuje výčet všech analýz řetězce od nejnižší po nejvyšší váhu (nejvyšší po nejnižší pravděpodobnost).

Valiantův algoritmus

The nejhorší doba provozu CYK je , kde n je délka analyzovaného řetězce a |G| je velikost gramatiky CNF G. Díky tomu je v praxi jedním z nejúčinnějších algoritmů pro rozpoznávání obecných bezkontextových jazyků. Valiant (1975) dal rozšíření algoritmu CYK. Jeho algoritmus vypočítává stejnou analýzu jako algoritmus CYK; přesto to ukázal algoritmy pro efektivní množení z matice s 0-1 vstupy lze použít k provedení tohoto výpočtu.

Za použití Coppersmith – Winogradův algoritmus pro vynásobení těchto matic to dává asymptotickou nejhorší dobu běhu . Konstantní výraz skrytý v Velká O notace je tak velký, že algoritmus Coppersmith – Winograd je vhodný pouze pro matice, které jsou příliš velké na to, aby je bylo možné zpracovat na současných počítačích (Knuth 1997 ), a tento přístup vyžaduje odečtení, a proto je vhodný pouze pro rozpoznávání. Nelze se zcela vyhnout závislosti na účinném násobení matic: Lee (2002) prokázal, že jakýkoli analyzátor pro bezkontextové gramatiky pracující v čase lze efektivně převést na algoritmus počítající produkt produktu -matrice s 0-1 vstupy v čase .

Viz také

Reference

  1. ^ Grune, Dick (2008). Techniky analýzy: praktický průvodce (2. vyd.). New York: Springer. ISBN  978-0-387-20248-8.

Zdroje

externí odkazy