臺語的自然語言處理隨想
以下只是隨想的廢話,沒有經過實證,或許也不可行。
要處理臺語的變調特性,首先需要瞭解一個詞或是片語的詞性,才能夠利用Brill tagger這樣rule-based的方式來標註何時該變調,何時不該變調。如果是白話字或是教育部台羅,可以用「Brill-tagger」這種方法,藉由字典標註詞性。而藉由字典標記詞性之後,常用的詞還可以利用「漢字—羅馬字—詞性」的詞典,找出對應的漢字(如果是「食物」或是「植物」si̍t-bu̍t這種同音情況,就只能夠人工校對)。至於罕用的複詞,可以拆成n個音(複詞時n=2),比如$s_0$, $s_1$,我們可以知道$s_0$的同音字有哪些:
$同音字 of s_0 = c_{0,0}, c_{0,1}, …, c_{0,m}$
$同音字 of s_1 = c_{1,0}, c_{1,1}, …, c_{1,m}$
假設我們有雙音節詞,如果不是複詞的情況,機率獨立,我們要找出
$max_{m, n} P(c_{0,m}, c_{1,n}))$
我們就必須得知,$c_{0,m}$後面接的文字$c_x$的機率表,有些字出現機率很低的只能給$0.1$這種權重(假設$c_y$在語料庫出現2次,指定權重為$2$)。
然後算出$P(c_{0,m})\cdot P(下一個字是c_{1,n}|前一個字是c_{0,m})$
複詞的話就算出$P(特定複詞出現的機率)$
這樣漸次找出機率最大的解來求解。
如果是漢字或漢羅的斷詞法,也可以用這樣的方法,找到最大機率的組合,斷詞,然後用字典轉成羅馬字(雖然因為用字派別不同或同音字,也有類似tuā-lâng vs tāi-jîn;tsàn-bí vs o-ló的問題),若是要保存更多資訊可以用$(漢字, 羅馬字)$這個tuple,最後再POS標記然後變調。不過用機率的方法涉及馬可夫鏈,這我沒學好忘記了。
但是全漢字,可能還有一種方法,就是利用臺語的句法,以及臺語詞性的詞典,對文字進行語法樹的分析(分析語是優勢,但是還是有很多特異的句法組合),找出許多可能的剖析語法樹,也可以一併獲知各語法樹中各單詞的詞性。然後就可以標註變調規則了。不過這邊涉及編譯理論,我沒學好。