規則比對

自然語言

前言

簡介

歷史

理論篇

知識表達

語法理論

語意理論

語用理論

方法篇

規則比對

機率統計

神經網路

應用篇

語料建構

全文檢索

自動分類

自動摘要

機器翻譯

問答系統

中文處理

程式篇

交談程式

英漢翻譯

維基語料

搜尋引擎

相關資源

語料辭典

程式工具

相關網站

相關文獻

網頁列表

統計資訊

最新修改

訊息

相關網站

參考文獻

最新修改

簡體版

English

中文規則與句子間的快速比對方法

傳統的 knowledge base 系統通常是以 Horn clause 或 First Order Logic 為主的推理方式,但是在自然語言的處理上,文法規則的使用幾乎是不可或缺的,因此、文法規則與句子之間快速的比對就成了自然語言處理的一個重要課題,在中文裡、文法通常較不明確,使用上不像英文文法那樣嚴謹,因此、必須採用較能在大尺度上抓住概念的規則來作句子的剖析,而這種規則與句子之間的比對,在暴力式的搜尋方法上,將會造成演算法的複雜度呈指數成長,因此、我們採取的動態規劃的方式以進行規則與句子之間的比對,本方法主要是對 Sun Wu 與 Udi Member 在 1992 年所提出的方法進行擴充,使其能應用在中文規則知識庫的系統上。

為求彈性,中文比對的規則常有遠接的情況發生,例如:
"一隻貓","一隻小狗","一隻可愛的狗","一隻非常可愛的小花貓" 中的量詞『隻』和動物主體之間,就可能隔上好幾個字,要完整寫出一個中文句子的規則並不容易,通常只能寫出一個概念所相對應的中文規則,在上述的例句中,主要的概念是動物的量詞通常使用『隻』字,這個概念可以利用下列規則來表達: nec<0..3>{頭.條.隻}<0..7>貓,規則中的nec 是數詞,{頭.條.隻} 是量詞,數詞和量詞之間可以隔上 0到3個字元,量詞與animal之間可以隔上0到7個字元,這些字元與所要表達的概念並無關連,因此我們不需指明,如此會比較符合自我完整性的原則。

被比對的句子可以被拆解成一串候選詞的集合,例如:"一隻又一隻可愛的貓" 可拆解成 {一, 隻, 隻, 可, 愛, 可愛, 的, 小, 花, 貓},這些候選詞之間有前後關係,令 s(t) 代表 t 後面所可以接的候選詞,p(t) 代表 t 後面所可以接的候選詞,上例中的 s(.) 與 p(.) 函數列舉如下:

s(一) = 隻, s(隻) = {非, 非常} s(非) = 常, s(常) = {可, 可愛}, s(非常) = {可, 可愛}, s(可) = 愛, s(愛) = 的, s(可愛) = 的, s(的) = 小, s(小) = 花, s(花) = 貓
p(隻) = 一, p(非) = 隻, p(非常) = 隻…

本方法共分為兩個階段,在第一階段,演算法首先根據每個候選詞與樣元的關係做出 S 陣列:

可愛
Nec 1 0 0 1 0 0 0 0 0 0
{頭|條|隻} 0 1 0 0 1 0 0 0 0 0
Animal 0 0 0 0 0 0 0 0 0 1

接著利用下列公式,以動態規劃的方式計算比對結果的 R 陣列

可愛
Nec 1 0 0 1 0 0 0 0 0 0
{頭|條|隻}<0..5> 0 1 1 1 1 1 1 1 1 0
Animal 0 0 0 0 0 0 0 0 0 1

比對成功。

若被比對的句子改為 "一隻又一隻可愛的花"

可愛
Nec 1 0 0 1 0 0 0 0 0 0
{頭|條|隻}<0..5> 0 1 1 1 1 1 1 1 1 0
Animal 0 0 0 0 0 0 0 0 0 0

則比對將會失敗。

吳昇[Wu92] 的方法對規則比對很有用處。

    R1    R2    R3    R4    R5    R6    R7    R8    R9    R10    R11        S1    S2    S3    S4
    他    有    一    隻    很    可    愛    的    小    花    貓        一     隻     貓    #
Nec            1                                        1    0    0    0
隻                1                                    0    1    0    0
*                    1    1    1    1    1    1    1        1    1    1    1
Animal                                            1        0    0    1    0
Rj+1 = Rshift(Rj) & St(j+1)
Allowing error :
R0d = 11..100…000
Rj+1d =Rshift[Rjd] AND Sc OR Rshift[Rjd-1] OR Rshift[Rj+1d-1] OR Rjd-1
    =Rshift[Rjd] AND Sc OR Rshift[Rjd OR Rj+1d-1] OR Rjd-1

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License