Earley vektöründen sözdizimi ağaçlarının ormanını nasıl yeniden kurabilirim?


9

Earley vektörünü tanıyıcı olarak kullanmak oldukça basittir: ipin sonuna ulaşıldığında, 0 konumunda başlayan tamamlanmış bir aksiyomatik üretimi kontrol etmeniz gerekir. En az bir tane varsa, o zaman dize kabul edilir.

Ayrıştırma ağaç (lar) ını yeniden oluşturmak için Earley vektörünü kullanmak daha az belirgindir. Aslında, bir algoritmik prosedürün nasıl çalışacağını anlayamıyorum, ayrıca bulduğum tek referanslar ya belirsiz ya da süper teknikti. Birisi ona ışık tutabilir mi?


2
Bulduğunuz ve belirsiz olduğunu düşündüğünüz ve aşırı teknik olduğunu düşündüğünüz referansları listelemeniz size yardımcı olacaktır. Aksi takdirde, cevabın zaten bulduğunuz referanslara bir işaretçi olması muhtemeldir.
Gezici Mantık

1
Vektör dediğin şey, Earley'in orijinal gazetesinde vektör olarak adlandırdığı şey olmayabilir. Veya tam olarak aynı rolü oynamamış olabilir. Yazarlar algoritmalarda varyasyonlar ortaya koyarlar. Bilmenin bir yolu yoktur, çünkü kullandığınız belgelere herhangi bir referans vermezsiniz ve yine de bunlara erişemeyebiliriz. Yardımcı olabilecek, tanımlar konusunda daha açık olmaktır. Cevap verirken, Earley'inkiyle aynı tanımları kullandığınızı varsaydım.
babou

@babou, "Earley vector" olarak adlandırdığım , ayrıştırıcı tarafından oluşturulan veri yapısının tablo şeklinde temsilidir. Örgün Diller profesörüm tarafından atıfta bulunurken kullanılan terimdi. Birincil dilimin İngilizce olmadığı unutulmamalıdır, bu yüzden bu sadece terminolojiyi çevirmek için kötü bir girişim olabilir. Bahsettiğim teknik referans, Earley'in makalesinin kendisidir. Ona yaklaştım, ama benim gibi gerçek bir acemi için biraz korkutucuydu.
Stefano Sanfilippo

Profesörünüzün "Earley vector" un makalesinde Earley'nin "vector" dediği ile aynı yapıda mı kullanıldığını kontrol etmek isteyebilirsiniz. İletişim için faydalı olabilir. Geri kalanı için, gördüğünüz gibi, ayrıştırma ağaçlarını kurtarabilmek için ekstra bilgi tutmalısınız, ancak Earley gerçekten ayrıntılara girmiyor. Şimdi başka algoritmalar var ve Earley'in algoritmasının karmaşıklıklarının bu tür tekniklerin temel fikirlerini gizlemesinden korkuyorum. İyi şanslar.
babou

Açıklamam yardımcı oldu mu veya teknik bölümün daha ayrıntılı bir açıklamasına mı ihtiyacınız var?
babou

Yanıtlar:


9

Earley'in makalesinden terminoloji ve notasyonlar kullanıyorum . Okuduğunuz açıklamanın farklı olması mümkündür.

Genel CF ayrıştırma algoritmalarının ilk önce bir tanıyıcı şeklinde sunulması sık görülür ve daha sonra ayrışan ağaçlar ve ayrışan ormanlar oluşturmak için gereken bilgi yönetiminin sonradan düşünülen bir şekilde eklenmesi gerekir. Bunun bir nedeni, paylaşımlı ormanı inşa etmek için gereken bilgilerin saklanmasının kübik alanı ; burada , ayrıştırılan giriş dizesinin uzunluğudur, ancak alan gereksinimi tanıma için yalnızca karedir. , bu bilgi korunmadığında. Bu alan karmaşıklığının artmasının nedeni oldukça basittir: ayrıştırma ormanı boyutu kübik olabilir.O(n3)nO(n2)

En kötü durum zaman karmaşıklığı iyi bilindiği gibi .O(n3)

Earley'in algoritması için en iyi referans elbette Earley'in makalesidir , ancak ayrıştırma ormanını oluşturmak konusunda çok açık değildir. Bu aslında dağınık bir iş olabilir, çok daha fazla bölüm 7 sayfa 101 hızlı konuşma ortaya çıkacaktır. Doğru olması için, Earley ayrışan orman veya ormandan değil, " olası tüm ayrıştırma ağaçlarının faktörlü gösterimi " nden bahsetmektedir . Bunun için iyi bir neden var: dilbilgisine göre bir orman üretmeye çalışırsa, bağlı olduğu uzay (dolayısıyla zaman) karmaşıklığı ye tırmanır, burada en uzun boyuttadır kural sağ taraf. Bu nedenle diğer algoritmalar ikili formda gramer kullanır (mutlaka Chomsky Normal Form (CNF) değil).O(ns+1)s

Aslında, Earley ikili formu dolaylı olarak kullanır , çünkü bu kübik zaman karmaşıklığı için gereklidir. Bu, devletlerdeki kural noktasının en önemli rollerinden biridir. Fakat bu örtük ikili biçim, orijinal olana değil, ikilileştirilmiş dilbilgisine göre ayrıştırmalar ve ormanlar üretir. Bu, aşağıda daha ayrıntılı olarak açıklanmaktadır.

Ormanın nasıl elde edildiğini anlamanın iyi bir yolu muhtemelen daha basit bir durumda CYK algoritmasına bakmaktır . Genellikle tanıyıcı olarak da tanımlanır ve ayrıştırıcı yönü sonuna eklenir. Vikipedi açıklamasına bakabilirsiniz. Ormanı inşa etmek için gerekli olan bilgiler "backpointers" tablosunda sakladıkları bilgidir. Backpointers esasen bir kuralın bir dizesinin bileşenlerini oluşturan alt dizelere (ilişkili bir sembol) işaretçilerdir. Bir alt dizeyi ayrıştırmanın tüm olası yollarını verirler. CYK'nin ikili form, genellikle CNF kullandığını hatırlayın, böylece işler daha basittir. CYK ayrıştırıcısı temelde Earley ile aynı dinamik programlama yapısına sahiptir, ancak çok daha basittir. Bu yüzden iyi anlamak önemli bir yardımcı olabilir.

Earley'in algoritmasına geri dönersek, kabul etmeye karar vermek veya ayrıştırılmış ağaçlar ve ormanlar inşa etmek için Earley vektörüne ihtiyacınız olduğuna inanmıyorum. Earley'in makalesinde vektör dediği şey, uygulamanın üçüncü paragrafında yalnızca sayfa 97'de görünür. Daha iyi bir karmaşıklık elde etmek için belirli bir dize k pozisyonuna geri bakan durumların aranmasını hızlandırmak için sadece bir cihazdır. Ancak tüm bilgiler, devlet listeleri olarak uygulanan durum kümelerinde bulunur. Bununla birlikte, bu bilgi ayrıştırma ağaçlarının ormanını oluşturmak için yeterli değildir, çünkü algoritma bir durumun elde edilebileceği yolları izlemez. Aslında, vektör, nasıl bulunduğundan bağımsız olarak, halihazırda bulunan bir durumu verimli bir şekilde atmak için bile kullanılır.

Earley'in makalesinin 7. bölümünde, “tanıyıcıyı bir ayrıştırıcıya dönüştürmek”, yani ayrışan ağaçları kurtarmak için tamamlamaların nasıl yapıldığını takip etmek gerektiğini açıklar.

işlemini her gerçekleştirdiğimizde durumu ekleyerek (ileriyi görmezden gelme), bu durumda örneğinden durumuna bir işaretçi oluştururuzoperasyonu yapmamıza neden olan . Bu, nin olarak ayrıştırıldığını gösterir . D'nin belirsiz olması durumunda, her tamamlayıcı işlemi için ya neden olan bir dizi işaretçi olacaktır belirli bir durum kümesine eklenecek. her sembolün de işaretçileri olacaktır (terminal değilse), vb., Böylece için türev ağacını temsil eder .EαD.βgDDγ.fDγEαD.βgγD

Not bu metin, içinde ve sağ taraftaki sembol tahmin edilmişti gibi kural tanınması (yan başladı elden bıraktığı yerden işaret. Yani çözümlü dizesinde endeksleri olan dize endeksi olduğu tanınması başladı ve indeks sona erdi .fgfDγg

Böyle bir göstergeden (alıntıda açıklandığı gibi) , kural örneğindeki nin kendisi , not giriş dizesini dizininden dizinine ayrıştıran bir ağaç (veya orman) olarak geliştirilebilir . nin hemen altındaki düğümler kuralı tarafından verilir . yolunu tamamlayarak sonra nin son sembolününDEαD.βgwf+1gwf+1:gDDγDγ.fDelde edildi ve böylece olası ayrıştırma ağaçları hakkında daha fazla bilgi. Ayrıca, bir earleir durum kümesinde sondan önce sembolü tanıyan tamamlamaya bakarak, nasıl elde edildiğini vb.

Kağıtta belirtildiği gibi gerekli tüm işaretçileri tuttuğunuzu varsayarak, tüm paylaşılan ağaç temsillerini, ayrıştırıcı tarafından tanınan son sembolden başlayarak alabilirsiniz, ki bu elbette dilbilgisinin ilk sembolüdür.

Ama dağınık kısmı da atladım . Belirsiz bir dilbilgisi için sağ taraf 2 daha uzun olan bir kural ve başka bir kural olduğunu varsayalım .UXYZWUV

İyi ayrıştırıcı olacağını ortaya çıkabilir içine , içine ve her iki ve içine . Bu nedenle, , hem hem de , .wf+1:gXwg+1:hYwh+1:iwh+1:jZUXYZwf+1:iwf+1:jU

Daha sonra, aynı zamanda, her iki olabilir ve içine de ayrıştırma . Daha sonra, kuralıyla , dizesi , dilbilgisinin belirsizliğine karşılık gelen iki farklı şekilde ayrılır .wi+1:kwj+1:kVWUVwf+1:kW

Tabii ki, tekrarlanan hesaplamaları önlemek için, Earley'in algoritması iki ayrıştırma hesaplamasını olabildiğince paylaşmaya çalışacaktır. Aslında paylaşacağı şey, ve 'nin ve tanınması (ve ayrıştırılması) . Ama aslında biraz daha yapacak: tanıyan iki ayrı çözümün başlangıcını kuralıyla paylaşacak . Demek istediğim , durum kümesinde yalnızca bir kez (tanımladığım şeye göre) . İki bölümün ortak bir parçası olacak. Tabii ki, işler ayrıştırılırken geçici olarak farklılaşacaktır.wf+1:gwg+1:hXYUUXYZUXY.ZfShZ , alt dizilere karşılık geldiği için, her şey W'ye ayrıştığında, W durumu yeniden başlatıldığında tekrar birleşene kadar , durum kümesinde iki kez üretilir .WUV.fSk

Yani sözdizimi ağaçlarının ormanı, bazı düğümlerin ilk iki kenarını paylaşabilen, ancak üçüncü kenarı paylaşamayan tür Siyam ikiz alt ağaçlarıyla çok garip olabilir. Başka bir deyişle, çok garip bir yapı olabilir. Bu, Earley'in neden daha spesifik olmadan " olası tüm ayrıştırma ağaçlarının faktörlü bir temsili " olarak adlandırdığını açıklayabilir .

Siyam ikizlerini, dilbilgisini değiştirmeden cerrahi olarak ayırmaya çalışmak, karmaşıklığın artmasına neden olacaktır. Bunu yapmanın doğru yolu dilbilgisini ikilileştirmektir.

Umarım bu sana yardımcı olmuştur. Bilmeme izin ver. Ancak, CYK ayrışmasının iyi anlaşılmasının yardımcı olabileceği konusunda ısrar ediyorum. Earley'den daha basit olan ve tüm CF dillerini verimli bir şekilde ayrıştırabilen başka algoritmalar da vardır.

Bu ayrıştırma ormanı sorunu hakkında verdiğim diğer iki cevapta daha genel bilgiler bulabilirsiniz: /cstheory/7374#18006 ve https://linguistics.stackexchange.com/questions/4619#6120 . Ancak Earley'in algoritmasının belirli ayrıntılarına girmezler.


CYK ayrıştırma işleminin yanı sıra GLR ayrıştırma işlemine de değer.
Takma ad

1
@Pseudonym Genel CF ayrıştırma işleminin çeşitli biçimlerini bilmek ve anlamak kesinlikle zarar vermez ve cevap sonunda iki referansta olduğu kadar öneriyorum. Ancak CYK seçimim şans eseri değildi. Earley algoritmasıyla, dilbilgisinin Push-Down Automaton'a (GLR, GLL, GPrec'te olduğu gibi) derlenmesiyle üretilen tabloları kullanmak yerine doğrudan dilbilgisi kullanarak yorumlayıcı olma özelliğini paylaşır. Dolayısıyla, tanıma süreci ile ağaç / orman üretimi arasındaki ilişki daha açık bir şekilde görülebilir. CKY aynı zamanda bir istisna dışında en basit algoritmadır.
babou
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.