有限狀態機與分詞


有限狀態機

什么是有限狀態機

DFA-確定性有限自動機

DFA M是一個五元組:


其中, 是輸入事件的有窮集合;Q是狀態的有限集合; 是初始狀態; 是終止狀態集合; 是Q與 的笛卡兒積到Q(下一個狀態)的映射,它支配着有限狀態控制的行為,有時也稱為狀態轉移函數。

在NLP中,事件通常是輸入一個字符或者字符串。

NFA-不確定性有限自動機

如果將DFA中的替換成笛卡兒積到冪集的映射,DFA就變成了NFA了。

NFA和DFA最大的區別就是映射函數, 在DFA中,當前事件和輸入確定后,下一個狀態也是確定的,在NFA中,當前事件和狀態確定后,下一個狀態可以選擇一個狀態集合中的任何一個狀態作為下一個狀態。

來點干貨來說明確定性有限自動機和不確定性有限自動機的區別,比如說

  • 有一個男孩,單身(狀態)
    • 遇到了一個心怡的女孩子(事件),展開了追求(狀態)
      • 女孩答應了男孩的追求(事件),男孩和女孩進入甜蜜的二人世界(狀態)
        • 兩人一生一世,然后直到死了(結束狀態)
        • 相處一段事件兩人覺得不合適分手(事件),男孩重新又變成了單身狗(狀態)
    • 女孩沒有答應男孩的追求(事件),男孩仍然是單身狗(狀態)
    • 一直遇不到心怡的女孩(事件),單身一輩子(狀態),然后悄悄的走了(結束狀態)

但是呢,還有一個電視里的男孩,他的人生軌跡是這樣的

  • 有一個男孩
    • 如果單身(狀態)
      • 遇到一個心怡的女孩(事件),他可能選擇追她、追她的閨蜜、羞辱她獲得她的關注……(狀態集合)
    • 已經有女朋友了(狀態)
      • 遇到了一個新的女孩(事件),他可能選擇保持忠誠、出軌后跪舔女友、劈腿后換新女友……(狀態集合)
      • 沒有遇到新的女孩(事件),他可能選擇聊騷、追求女友的閨蜜、做二十四孝老公……(狀態集合)
    • ……

第一個男孩就是確定性男友機,第二個男孩就是不確定性男友機,哦,不,是確定性有限自動機和不確定性有限自動機。

DFA和NFA合稱有限自動機(FA),也稱有限狀態機(FSM)

FST-有限狀態轉換機

如果FA在完成狀態轉移的同時產生一個輸出,那么就被稱作有限狀態轉換機。

說人話

上面的定義讓人頭疼不已,現在開始說人話,有限狀態機其實非常建檔,用一句話概括就是

current state + event = next state

從當前狀態+事件=下一個狀態,這個狀態轉移的過程就是通過狀態轉移函數實現,由於狀態和事件都是有限的,所以被稱作有限狀態機。

最長正向匹配分詞

有限狀態機可以被用來實現最長匹配分詞,

事件集合()={所有可能輸入的字符},
狀態集合(Q)={詞典中所有詞的前綴(包括詞本身),單個字符,以及空字符串}
初始狀態()=空字符串
狀態轉移函數()={如果當前狀態對應的字符+輸入字符在狀態集合中,則狀態轉移到當前狀態對應的字符和輸入字符,否則,狀態轉移到輸入字符,並把前一個狀態對應的字符串最為一個詞輸出}

算法

我們通過詞典把狀態轉移函數保存成一個HashMap(字典),以方便后面的狀態轉移使用,我們把這個字典稱作前綴狀態字典。

Build pdict (構造前綴追她字典)

Input: dicts={word1, word2, ..., wordn)$
Output: 前綴狀態字典pdict
pdict <- 空字典
for word in dicts:
pdict[word] = 1
word_len = word的長度
for j in {word_len, ..., 1}:
subword = word[:j]
if subword not in pdict:
pdict[subword] = 1

正向最大匹配(狀態轉移和輸出)

Input: pdict, sentence={c1c2...cN}
Output: 正向最大匹配的分詞結果words=[word1, word2, ..., wordn]
N = sentence的長度
words = []
subword = ""
for i in {0, 1, ..., N-1}:
subword += sentence[i]
if subword not in pdict:
if len(subword) == 1:
words.append(subword[:-1])
subword = sentence[i]
else:
words.append(subword)
subword = ""
if len(subword) > 0:
words.append(subword)
# words即所需的分詞

以上即最大正向匹配分詞的全部算法,源代碼因為版權問題,就不貼了。

進一步思考

如何在最大匹配的算法基礎上,利用有限狀態機實現全切分詞呢?

歡迎關注我的微信公眾號

直覺與邏輯-二維碼
直覺與邏輯-二維碼

微信公眾號: 直覺與邏輯

微信號: roy-qu

掃描上述二維碼即可關注我的微信公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM