自然語言處理(四)——下推自動機接受的語言

一、概念

下推自動機的定義:一個不確定的PDA可以表達成一個7元組: M = (Σ, Q, Γ, δ, q0, Z0, F) 其中,Σ 是輸入符號的有窮集合; Q 是狀態的有限集合; q0 ∈ Q 是初始狀態; Γ 爲下推存儲器符號的有窮集合; Z0∈Γ 爲最初出現在下推存儲器頂端的開始符號; F 是終止狀態集合,F ⊆ Q; δ 是從 Q×(Σ∪{ε})×Γ 到 Q×Γ* 的子集的映射。

映射關係 δ(q, a, Z) = {(q1, γ1), (q2, γ2), …, (qm, γm)} 其中, q1, q2, …, qm∈Q, a∈Σ, Z∈Γ, γ1, γ2,…,γm∈Γ*。 該映射的意思是:當PDA處於狀態 q,面臨輸入符號 a時,自動機將進入到 qi, i = 1, 2, …, m 狀態,並以 γi 來代替下推存儲器(棧)頂端符號Z,同時將輸入頭 指向下一個字符 。當 Z 被 γi 取代時,γi 的符號按照 從左到右的順序依次從下向上推入到存儲器。

特殊情況下,δ(q, ε, Z)={(q1, γ1), (q2, γ2), …, (qm, γm)} 時,輸入頭位置不移動,只用於處理下推存儲器內部 的操作,叫作 “ε移動”。

這些定義我看得快炸了,沒理解這是什麼意思。下面是一個圖,可能比較直觀的顯示出,下推自動機與有限自動機的區別就是多出一個下推存儲器。

以上的定義都是教材的內容,如果光看理論,我反正是一頭霧水,不知所云。不過結合一個例子可能會有所理解。下面的例子是判斷一個句子是否能夠被下推自動機所接受。

二、下推自動機接受的語言

下推自動機 M 所接受的語言定義爲: T(M) = {x|x: (q0, Z0) (q, M γ), γ ∈Γ*, q ∈F }。下面通過這個例子來走一遍過程。看着下面這些符號實在是頭大,不過通過具體的例子分析也不難理解。

對於輸入 abbcbba 這個句子。下推自動機 是怎麼樣判斷這個句子是否合法呢?它的處理步驟如下:

(一)、#是開始符號,0是初始狀態。首先從輸入帶的第一個字符讀入。輸入了a,根據規則 1。將A壓入棧。狀態仍然爲0;

(二)、狀態爲0,輸入b。根據規則 2。將B壓入棧,狀態仍然爲0.

(三)、狀態爲0,輸入b。根據規則 2。將B壓入棧,狀態仍然爲0.

(四)、狀態爲0,輸入c。根據規則 3。將ε(空串)壓入棧中,也就是什麼都不做,狀態變爲1.

(五)、狀態爲1,輸入b。根據規則 5。將B彈出棧,狀態仍然爲1.

(六)、狀態爲1,輸入b。根據規則 5。將B彈出棧,狀態仍然爲1.

(七)、狀態爲1,輸入b。根據規則 4。將A彈出棧,狀態仍然爲1。

到此爲止,所有的字符讀取完畢,此時檢查到棧裏面也只有開始字符,狀態爲1(中止狀態)。因此abbcbba被此下推自動機所接受。

最後,我這裏面所用到的語言可能不準確,但都是爲了便於自己理解,,算法的實現過程可能有錯誤,如果各位看到有什麼錯誤遺漏不當之處,還望不吝賜教,拜謝。

參考資料有:宗成慶的《統計自然語言處理》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章