CYK algoritması - CYK algorithm
Gelen bilgisayar bilimleri , Cocke-Genç-Kasami algoritması (alternatif olarak adlandırılan CYK veya CKY ) bir olan ayrıştırma algoritması için bağlamdan-bağımsız gramerlerin : 1961'de Itiroo Sakai tarafından yayınlanan algoritma onun rediscoverers bazı almıştır John Cocke Daniel Genç , Tadao Kasami ve Jacob T. Schwartz . Bu istihdam aşağıdan yukarıya ayrıştırma ve dinamik programlama .
CYK'nın standart sürümü yalnızca Chomsky normal biçiminde (CNF) verilen bağlamdan bağımsız gramerler üzerinde çalışır . Bununla birlikte, bağlamdan bağımsız herhangi bir dilbilgisi ( uzlaşmadan sonra) aynı dili ifade eden bir CNF dilbilgisine dönüştürülebilir ( Sipser 1997 ).
CYK algoritmasının önemi, belirli durumlarda yüksek verimliliğinden kaynaklanmaktadır. Kullanılması Büyük O gösterimde , en kötü durum çalışma süresi çık ait burada, çözümlü dizgenin uzunluğudur ve CNF dilbilgisi boyutu ( Hopcroft ve Ullman 1979 , s. 140). Bu, birçok pratik senaryoda daha iyi ortalama çalışma süresine sahip başka algoritmalar olmasına rağmen , en kötü durum asimptotik karmaşıklığı açısından onu en verimli ayrıştırma algoritmalarından biri yapar .
Standart biçim
Dinamik programlama algoritması içine işlenecek bağlam serbest gramer gerektirir Chomsky Normal biçimde olasılık iki küçük dizileri içine mevcut sekansı bölmek için test için, (CNF). Boş dize oluşturmayan herhangi bir bağlamdan bağımsız dilbilgisi, CNF'de yalnızca formların üretim kuralları kullanılarak temsil edilebilir ve .
algoritma
sözde kod olarak
Sözde koddaki algoritma aşağıdaki gibidir:
let the input be a string I consisting of n characters: a1 ... an.
let the grammar contain r nonterminal symbols R1 ... Rr, with start symbol R1.
let P[n,n,r] be an array of booleans. Initialize all elements of P to false.
for each s = 1 to n
for each unit production Rv → as
set P[1,s,v] = true
for each l = 2 to n -- Length of span
for each s = 1 to n-l+1 -- Start of span
for each p = 1 to l-1 -- Partition of span
for each production Ra → Rb Rc
if P[p,s,b] and P[l-p,s+p,c] then set P[l,s,a] = true
if P[n,1,1] is true then
I is member of language
else
I is not member of language
Olasılıksal CYK (en olası ayrıştırmayı bulmak için)
Tüm üretimlerin olasılıkları göz önüne alındığında en olası ayrıştırmayı kurtarmaya izin verir.
let the input be a string I consisting of n characters: a1 ... an.
let the grammar contain r nonterminal symbols R1 ... Rr, with start symbol R1.
let P[n,n,r] be an array of real numbers. Initialize all elements of P to zero.
let back[n,n,r] be an array of backpointing triples.
for each s = 1 to n
for each unit production Rv →as
set P[1,s,v] = Pr(Rv →as)
for each l = 2 to n -- Length of span
for each s = 1 to n-l+1 -- Start of span
for each p = 1 to l-1 -- Partition of span
for each production Ra → Rb Rc
prob_splitting = Pr(Ra →Rb Rc) * P[p,s,b] * P[l-p,s+p,c]
if P[p,s,b] > 0 and P[l-p,s+p,c] > 0 and P[l,s,a] < prob_splitting then
set P[l,s,a] = prob_splitting
set back[l,s,a] = <p,b,c>
Düzyazı olarak
Gayri açısından, bu algoritma giriş dizesi ve kümelerin olası her alt dize gördüğü uzunluğunun alt dize eğer gerçek olamayacak kadar gelen başlangıç terminal olmayan oluşturulabilir . 1 uzunluğundaki alt dizileri düşündükten sonra, 2 uzunluğundaki alt dizilere geçer ve bu böyle devam eder. Uzunluğunda 2 ve daha fazla oluşan altdizgelerin için, bazı üretim olup olmadığını görmek için iki parça, ve çekler içine altdizgenin olası her bölümü dikkate böyle birinci bölümüyle eşleşmesi ve ikinci bölümünü eşleşir. Eğer öyleyse, tüm alt diziyle eşleşen olarak kaydeder . Bu işlem tamamlandıktan sonra, giriş dizgisinin tamamını içeren alt dizgi başlangıç sembolü ile eşleşiyorsa, giriş dizgisi dilbilgisi tarafından üretilir.
Örnek
Bu örnek bir gramerdir:
Şimdi balığı çatalla yediği cümlesi CYK algoritması kullanılarak analiz ediliyor. Aşağıdaki tabloda, içinde , ı satır (1'de altındaki başlangıç) sayısıdır ve j sütun sayısı (1'de soldaki başlanır).
| S | ||||||
| başkan yardımcısı | ||||||
| S | ||||||
| başkan yardımcısı | PP | |||||
| S | NP | NP | ||||
| NP | V, Başkan Yardımcısı | Det. | n | P | Det | n |
| o | yer | a | balık | ile birlikte | a | çatal |
Okunabilirlik için, P için CYK tablosu burada, bir dizi terminal olmayan sembol içeren 2 boyutlu bir M matrisi olarak temsil edilir , öyle ki R k , eğer ve sadece, ise içindedir . Yukarıdaki örnekte, S başlangıç sembolü içinde olduğundan, cümle dilbilgisi tarafından oluşturulabilir.
Uzantılar
Ayrıştırma ağacı oluşturma
Yukarıdaki algoritma, yalnızca bir cümlenin dilde olup olmadığını belirleyecek bir tanıyıcıdır . İçine uzanan basit ayrıştırıcı da konstruktlarının çözümleme ağacı böylece, bunun yerine Düğüm üretmek için kullanıldı dizi elemanlarına bağlı olan mantıksal 1 olarak, dizinin elemanları olarak ayrıştırmak ağaç düğümleri depolayarak, ağaç yapısını oluşturmak için. Yalnızca bir ayrıştırma ağacı üretilecekse, her dizi öğesinde yalnızca böyle bir düğüm gereklidir. Bununla birlikte, belirsiz bir cümlenin tüm ayrıştırma ağaçları tutulacaksa, dizi elemanında, ayrıştırma işleminde karşılık gelen düğümün elde edilebileceği tüm yolların bir listesini depolamak gerekir. Bu bazen backpointers denen ikinci bir B[n,n,r] tablosuyla yapılır . Daha sonra sonuç, ortak ağaç parçalarının çeşitli ayrıştırmalar arasında çarpanlarına ayrıldığı, olası ayrıştırma ağaçlarının ortak bir ormanıdır. Bu paylaşılan orman, Lang (1994) tarafından gösterildiği gibi, yalnızca ayrıştırılan cümleyi üreten belirsiz bir dilbilgisi olarak okunabilir , ancak orijinal dilbilgisi ile aynı belirsizlik ve aynı ayrıştırma ağaçları, terminal olmayanların çok basit bir yeniden adlandırılmasına kadar. .
CNF olmayan bağlamdan bağımsız gramerleri ayrıştırma
Lange & Leiß (2009) tarafından belirtildiği gibi , Chomsky normal formuna bilinen tüm dönüşümlerin dezavantajı, dilbilgisi boyutunda istenmeyen bir şişkinliğe yol açabilmeleridir. Bir gramerin boyutu, kuralın boyutunun bir artı sağ tarafının uzunluğunun olduğu üretim kurallarının boyutlarının toplamıdır. Kullanımı özgün gramer boyutunu belirtmek için, en kötü durumda boyut fışkırma arasında değişebilir için kullanılan transformasyon algoritmasına bağlı. Lange ve Leiß, öğretimde kullanım için, "algoritmanın verimliliğinden, sunumunun netliğinden veya ispatların basitliğinden ödün vermeden" CYK algoritmasının hafif bir genelleştirilmesini önermektedir ( Lange & Leiß 2009 ).
Ağırlıklı bağlamdan bağımsız gramerleri ayrıştırma
Ağırlıklı ve stokastik bağlamdan bağımsız dilbilgisi kullanarak dizeleri ayrıştırmak için CYK algoritmasını genişletmek de mümkündür . Ağırlıklar (olasılıklar) daha sonra boole değerleri yerine P tablosunda depolanır, bu nedenle P[i,j,A], i'den j'ye kadar olan alt dizenin A'dan türetilebileceği minimum ağırlığı (maksimum olasılık) içerecektir. algoritma, bir dizgenin tüm ayrıştırmalarının en düşükten en yüksek ağırlığa (en yüksekten en düşük olasılığa) numaralandırılmasına izin verir.
Valiant'ın algoritması
En kötü durum çalışma süresi CYK taşımaktadır , nerede n | çözümlü dize ve uzunluğudur G | CNF gramer G'nin boyutudur . Bu, onu pratikte genel bağlamdan bağımsız dilleri tanımak için en verimli algoritmalardan biri yapar. Valiant (1975) , CYK algoritmasının bir uzantısını verdi. Algoritması, CYK algoritması ile aynı ayrıştırma tablosunu hesaplar; yine de gösterdi verimli çoğalması için algoritmalar arasında 0-1-girişlerle matrisleri bu hesaplaması gerçekleştirmek için kullanılabilir.
Bu matrisleri çarpmak için Coppersmith-Winograd algoritmasını kullanmak, asimptotik en kötü durum çalışma süresini verir . Bununla birlikte, Big O Notasyonu tarafından gizlenen sabit terim o kadar büyüktür ki Coppersmith-Winograd algoritması sadece günümüz bilgisayarlarında işlenemeyecek kadar büyük matrisler için değerlidir ( Knuth 1997 ) ve bu yaklaşım çıkarma gerektirir ve bu yüzden sadece tanımaya uygundur. Verimli matris çarpımına bağımlılıktan tamamen kaçınılamaz: Lee (2002) , zaman içinde çalışan bağlamdan bağımsız dilbilgisi için herhangi bir ayrıştırıcının, zaman içinde 0-1 girişli -matrislerin çarpımını hesaplayan bir algoritmaya etkin bir şekilde dönüştürülebileceğini kanıtlamıştır .
Ayrıca bakınız
Referanslar
Kaynaklar
- Sakai, Itiroo (1962). Evrensel çeviride sözdizimi . 1961 Uluslararası Dillerin Makine Çevirisi ve Uygulamalı Dil Analizi Konferansı, Teddington, İngiltere. II . Londra: Majestelerinin Kırtasiye Ofisi. s. 593–608.
- Kok, John ; Schwartz, Jacob T. (Nisan 1970). Programlama dilleri ve derleyicileri: Ön notlar (PDF) (Teknik rapor) (2. gözden geçirilmiş baskı). CIMS , NYU .
- Hopcroft, John E .; Ullman, Jeffrey D. (1979). Otomata Teorisine, Dillere ve Hesaplamaya Giriş . Okuma/MA: Addison-Wesley. ISBN'si 0-201-02988-X.
- Kasami, T. (1965). Bağlamdan bağımsız diller için verimli bir tanıma ve sözdizimi analizi algoritması (Teknik rapor). AFCRL . 65-758.
- Knuth, Donald E. (14 Kasım 1997). Bilgisayar Programlama Sanatı Cilt 2: Yarı Sayısal Algoritmalar (3. baskı). Addison-Wesley Profesyonel. P. 501. ISBN'si 0-201-89684-2.
- Lang, Bernard (1994). "Tanıma ayrıştırmaktan daha zor olabilir". Bilgisayar. akıllı 10 (4): 486-494. CiteSeerX 10.1.1.50.6982 . doi : 10.1111/j.1467-8640.1994.tb00011.x .
- Lange, Martin; Leis, Hans (2009). "CNF'ye ya da CNF'ye değil mi? CYK Algoritmasının Verimli Ancak Sunulabilir Bir Versiyonu" . Bilişim Didaktik . 8 .
- Lee, Lillian (2002). "Hızlı bağlamdan bağımsız dilbilgisi ayrıştırma, hızlı Boole matrisi çarpımı gerektirir". J. ACM . 49 (1): 1–15. arXiv : cs/0112018 . doi : 10.1145/505241.505242 .
- Sipser, Michael (1997). Hesaplama Teorisine Giriş (1. baskı). IPS. P. 99 . ISBN'si 0-534-94728-X.
- Valiant, Leslie G. (1975). "Kübik zamandan daha kısa sürede genel bağlamdan bağımsız tanıma" . J. Bilgisayar. Sist. bilim 10 (2): 308–314. doi : 10.1016/s0022-0000(75)80046-8 .
- Daha genç, Daniel H. (Şubat 1967). " N 3 zamanında bağlamdan bağımsız dillerin tanınması ve ayrıştırılması " . Bilgi vermek. Kontrol . 10 (2): 189–208. doi : 10.1016/s0019-9958(67)80007-x .