本發(fā)明涉及一種基于文法模板的實體抽取方法。
背景技術(shù):
實體識別是自然語言處理中的一個重要基礎(chǔ)工具,其主要任務(wù)是識別文本中具有特定意義的實體,如人名、地名、機構(gòu)名、專有名詞等,因而是信息抽取、信息檢索、機器翻譯、問答系統(tǒng)等多種自然語言處理技術(shù)必不可少的組成部分。
實體識別的過程主要包括兩個部分:實體邊界識別、確定實體類別(人名、地名或其他)。英語中的實體具有比較明顯的形式標(biāo)志(即實體中的每個詞的第一個字母要大寫),所以實體邊界識別相對容易,任務(wù)的重點是確定實體的類別。和英語相比,漢語命名實體識別任務(wù)更加復(fù)雜,而且相對于實體類別標(biāo)注子任務(wù),實體邊界的識別更加困難。
目前實體識別的主要技術(shù)方法分為:基于規(guī)則和詞典的方法、基于統(tǒng)計的方法、二者混合的方法。
基于規(guī)則和詞典,則是語言學(xué)專家手工構(gòu)造規(guī)則模板和字典庫,以模式和字符串匹配為主要手段。
基于統(tǒng)計的方法,則是利用人工標(biāo)注的語料進行訓(xùn)練,標(biāo)注語料時不需要廣博的語言學(xué)知識,但標(biāo)注時間和語料的大小成正比,方法主要包括:隱馬爾可夫模型、最大熵、支持向量機、條件隨機場等。
混合方法則是上述二者的融合。
基于規(guī)則和字典的方法需要人工編輯大量模板和詞庫,維護代價高,且規(guī)則多是傳統(tǒng)意義的正則表達式,沒有上下文信息,識別過程需要依次遍歷所有的規(guī)則庫和字典庫,效率不佳。
基于統(tǒng)計的方法雖然利用了機器學(xué)習(xí),但只對通用的實體效果較好(如人名),難于兼顧準(zhǔn)確率和召回率,并且模型的更新需要重新訓(xùn)練,從而不能實時的解決問題。
且此兩種方法均對特定領(lǐng)域的實體識別效果不佳,如單個數(shù)字160,二者雖然能識別出為一個數(shù)字,但是對特定領(lǐng)域來說,需要更加精細的類別劃分才能為應(yīng)用系統(tǒng)所用,如數(shù)字160到底是電話,還是身高等,此時則需要更多的信息方能知曉。
技術(shù)實現(xiàn)要素:
針對目前實體識別的問題,特別是在特定領(lǐng)域中的特殊實體識別的缺陷,我們提出了一種基于文法模板抽取實體的方法。用戶通過定義帶上下文的文法模板,系統(tǒng)動態(tài)并行地尋找最佳文法匹配,從而高效地提取出其中特定意義的實體。在根據(jù)本發(fā)明的技術(shù)方案中,能引用已有文法或自身文法,并且支持正則、普通、及其組合,表達能力接近自然語言;抽象出三個匹配過程,采用最長消耗字符的匹配策略,高效地尋找最佳匹配;并且根據(jù)文法模板匹配結(jié)果進行二次加工,抽取所需的實體。
根據(jù)本發(fā)明的一個方面,提供了一種基于文法模板的實體抽取方法包括以下步驟:定義帶上下文的文法模板,使得所述文法模板之間能夠相互引用并且支持正則表達式、普通字符、及其組合;將所述文法模板中定義的每個文法轉(zhuǎn)為文法樹,針對所述文法樹的結(jié)點的多個分支結(jié)點中的每一個進行匹配,找出其中消耗字符最多的一個分支結(jié)點 作為最佳匹配;并且根據(jù)文法模板的匹配結(jié)果進行類別過濾,以抽取所需的實體。
根據(jù)本發(fā)明的一個實施例,基于文法模板的實體抽取方法還包括從入口文法開始匹配的以下步驟:判斷是否還有待匹配字符串。如果沒有,則匹配完成,如果有,則將待匹配字符串根據(jù)文法樹進行匹配。如果匹配失敗,則將待匹配字符串移動一個字符并且重新執(zhí)行上述步驟。如果匹配成功,則將待匹配字符串設(shè)置為成功匹配后剩余的未匹配的字符串并且重新執(zhí)行上述步驟。
根據(jù)本發(fā)明的一個實施例,基于文法模板的實體抽取方法還包括從某個文法樹開始匹配的以下步驟:循環(huán)遍歷文法樹的每一個分支結(jié)點,并將待匹配字符串根據(jù)各個分支結(jié)點分別進行匹配,記錄其中匹配成功且剩余的未匹配字符串長度最短的作為匹配狀態(tài)。如果沒有匹配成功的分支結(jié)點,則將所述匹配狀態(tài)設(shè)置為失敗狀態(tài)。退出并返回所述匹配狀態(tài)。
根據(jù)本發(fā)明的一個實施例,基于文法模板的實體抽取方法還包括在某個文法樹的內(nèi)部結(jié)點開始匹配的以下步驟:查看當(dāng)前結(jié)點類型,根據(jù)不同結(jié)點類型分別進行匹配,并記錄第一匹配狀態(tài)。如果第一匹配狀態(tài)為失敗狀態(tài),則退出并返回第一匹配狀態(tài)。如果當(dāng)前結(jié)點還有待匹配的分支結(jié)點,則循環(huán)遍歷當(dāng)前結(jié)點的每一個分支結(jié)點,并將剩余的未匹配字符串根據(jù)各個分支結(jié)點分別進行匹配,記錄其中匹配成功且剩余的未匹配字符串長度最短的作為第二匹配狀態(tài),如果所述當(dāng)前結(jié)點沒有待匹配的分支結(jié)點或分支結(jié)點均匹配失敗,則直接將第二匹配狀態(tài)設(shè)置為失敗狀態(tài)。如果所述當(dāng)前結(jié)點不為可結(jié)束結(jié)點,則當(dāng)所述第二匹配狀態(tài)為失敗狀態(tài)時,將所述第一匹配狀態(tài)設(shè)置為失敗狀態(tài)。如果所述第一匹配狀態(tài)和所述第二匹配狀態(tài)均成功,則將所述第一匹配狀態(tài)設(shè)置為所述第二匹配狀態(tài),退出并返回第一匹配狀態(tài)。
根據(jù)本發(fā)明的一個實施例,其中能夠?qū)崟r地對所述文法樹進行修改。
根據(jù)本發(fā)明的一個實施例,其中根據(jù)文法模板的匹配結(jié)果進行類別過濾還包括指定其它的類別和指定不同的類別范圍。
附圖說明
附圖用于更好地理解本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。其中:
圖1是根據(jù)本發(fā)明實施例的基于文法模板的實體抽取方法的示意流程圖;
圖2是根據(jù)本發(fā)明實施例的基于文法模板的實體抽取方法中的具體的文法模板匹配步驟的示意流程圖;以及
圖3是根據(jù)本發(fā)明實施例的基于文法模板的實體抽取方法中的具體的在某個文法樹的內(nèi)部結(jié)點開始匹配的步驟的示意流程圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明的示范性實施例做出說明,其中包括本發(fā)明實施例的各種細節(jié)以助于理解,應(yīng)當(dāng)將它們認為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)認識到,可以對這里描述的實施例做出各種改變和修改,而不會背離本發(fā)明的范圍和精神。同樣,為了清楚和簡明,以下的描述中省略了對公知功能和結(jié)構(gòu)的描述。
圖1是根據(jù)本發(fā)明實施例的一種基于文法模板的實體抽取方法的示意流程圖。本發(fā)明的技術(shù)方案的重點在于文法模板的定義和文法模板的匹配,從而提取相關(guān)實體,因此下面分別對文法模板定義、文法模板匹配及實體抽取進行詳細闡述。
如圖1所示,基于文法模板的實體抽取方法包括:步驟S01,定義帶上下文的文法模板,使得所述文法模板之間能夠相互引用并且支 持正則表達式、普通字符、及其組合;步驟S02,將所述文法模板中定義的每個文法轉(zhuǎn)為文法樹,針對所述文法樹的結(jié)點的多個分支結(jié)點中的每一個進行匹配,找出其中消耗字符最多的一個分支結(jié)點作為最佳匹配;以及步驟S03,根據(jù)文法模板的匹配結(jié)果進行類別過濾,以抽取所需的實體。
圖2是根據(jù)本發(fā)明實施例的基于文法模板的實體抽取方法中的具體的文法模板匹配步驟的示意流程圖。根據(jù)本發(fā)明的實施例上述三個匹配步驟分別為:findInStart、findInTrie、findInNode。其中,findInStart表示從入口文法開始匹配,findInTrie表示從某個文法樹開始匹配,findInNode表示在某個文法樹的內(nèi)部結(jié)點開始匹配。
根據(jù)本發(fā)明的一個實施例,從入口文法開始匹配的過程包括:判斷是否還有待匹配字符串。如果沒有,則匹配完成,如果有,則將待匹配字符串根據(jù)文法樹進行匹配。如果匹配失敗,則將待匹配字符串移動一個字符并且重新執(zhí)行上述步驟。如果匹配成功,則將待匹配字符串設(shè)置為成功匹配后剩余的未匹配的字符串并且重新執(zhí)行上述步驟。
根據(jù)本發(fā)明的一個實施例,從某個文法樹開始匹配的過程包括:循環(huán)遍歷文法樹的每一個分支結(jié)點,并將待匹配字符串根據(jù)各個分支結(jié)點分別進行匹配,記錄其中匹配成功且剩余的未匹配字符串長度最短的作為匹配狀態(tài)。如果沒有匹配成功的分支結(jié)點,則將所述匹配狀態(tài)設(shè)置為失敗狀態(tài)。退出并返回所述匹配狀態(tài)。
圖3是根據(jù)本發(fā)明實施例的基于文法模板的實體抽取方法中的具體的在某個文法樹的內(nèi)部結(jié)點開始匹配的步驟的示意流程圖。根據(jù)本發(fā)明的一個實施例,在某個文法樹的內(nèi)部結(jié)點開始匹配的過程包括:查看當(dāng)前結(jié)點類型,根據(jù)不同結(jié)點類型分別進行匹配,并記錄第一匹配狀態(tài)。如果第一匹配狀態(tài)為失敗狀態(tài),則退出并返回第一匹配狀態(tài)。 如果當(dāng)前結(jié)點還有待匹配的分支結(jié)點,則循環(huán)遍歷當(dāng)前結(jié)點的每一個分支結(jié)點,并將剩余的未匹配字符串根據(jù)各個分支結(jié)點分別進行匹配,記錄其中匹配成功且剩余的未匹配字符串長度最短的作為第二匹配狀態(tài),如果所述當(dāng)前結(jié)點沒有待匹配的分支結(jié)點或分支結(jié)點均匹配失敗,則直接將第二匹配狀態(tài)設(shè)置為失敗狀態(tài)。如果所述當(dāng)前結(jié)點不為可結(jié)束結(jié)點,則當(dāng)所述第二匹配狀態(tài)為失敗狀態(tài)時,將所述第一匹配狀態(tài)設(shè)置為失敗狀態(tài)。如果所述第一匹配狀態(tài)和所述第二匹配狀態(tài)均成功,則將所述第一匹配狀態(tài)設(shè)置為所述第二匹配狀態(tài),退出并返回第一匹配狀態(tài)。
在根據(jù)本發(fā)明的一個實施例的基于文法模板的實體抽取方法中還能夠?qū)崟r地對所述文法樹進行修改。以及在根據(jù)本發(fā)明的一個實施例的基于文法模板的實體抽取方法中根據(jù)文法模板的匹配結(jié)果進行類別過濾還包括指定其它的類別和指定不同的類別范圍。
以下進一步參考附圖,詳細說明根據(jù)本發(fā)明的根據(jù)本發(fā)明的基于文法模板的實體抽取方法中的文法模板匹配的具體細節(jié)的描述。
(1)文法模板定義
本發(fā)明提出的文法模板本質(zhì)上是一個規(guī)則庫,但是其可帶上下文,且模板之間可相互引用,從而表達能力接近自然語言,且因為可相互引用從而減少了文法模板的數(shù)量,具體的規(guī)則以如下身高的文法為例說明。
[num]={
r'\d+'
r'^[零一二三四五六七八九十百兩]+'
}
[hight_prefix]={
身高
高
}
[hight_num]={
[num]
}
[hight_unit]={
厘米
cm
}
[hight]={
[hight_prefix]是[hight_num]
[hight_prefix]是[hight_num][hight_unit]
[hight_num]的[hight_prefix]
[hight_num][hight_unit]的[hight_prefix]
}
[start]={
[hight]
}
其意義如下:
上述例子中用中括號指出引用已有文法,用r開頭表示一個正則表達式,其他的則為普通的字符而已,如身高、厘米。其中start為入口文法,表示識別過程從start開始,從而指定僅需識別的文法,避免無意義文法的識別(本例中單獨識別hight_unit或hight_num、hight_prefix均是沒有意義的,因為只有在文法hight中方能體現(xiàn)其的意義)。
因此任意一個文法(grammar)可定義如下:
[grammar]={
regx
chars
[other_grammar]
regx和chars和[other_grammar]的任意組合
}
其中regx表示正則表達式,chars表示普通字符,[other_grammar]表示引用已定義文法的other_grammar(注意other_grammar其實也可引用自身,因此具有強大的表達能力)。
(2)文法模板匹配
文法模板的匹配過程主要是將文法模板中定義的每個文法轉(zhuǎn)為文法樹(trie),待識別過程轉(zhuǎn)移至該文法時則開始在該文法樹上進行匹配,但因為文法樹的結(jié)點可有多個分支,因此需要在每個可能的分支進行匹配,找出其中消耗字符最多的一個分支作為匹配,如果找不到,則回到原先開始匹配的位置,向前移動一個字符開始下一次匹配。其中因為一個文法可引用其他的文法,因此當(dāng)識別過程轉(zhuǎn)移至引用結(jié)點時,需要相應(yīng)的轉(zhuǎn)移至其引用的文法樹進行匹配。其中可以實時地對所述文法樹進行修改。
因此上述匹配的過程可抽象為三個過程:findInStart、findInTrie、findInNode。findInStart表示從入口文法開始匹配,findInTrie表示從某個文法樹開始匹配,findInNode表示在某個文法樹的內(nèi)部結(jié)點開始匹配。具體的步驟如下;
findInStart:
步驟11:是否還有待匹配字符串,無則轉(zhuǎn)步驟15,有則下一步;
步驟12:將待匹配字符串根據(jù)start文法樹(findInTrie過程)進行匹配,匹配失敗則轉(zhuǎn)步驟14,成功則下一步;
步驟13:將待匹配字符串設(shè)置為步驟12中成功匹配后剩余的未匹配的字符串,并轉(zhuǎn)步驟11;
步驟14:將帶待匹配字符串移動一個字符,轉(zhuǎn)步驟11;
步驟15:匹配完成。
findInTrie:
步驟21:循環(huán)遍歷文法樹的每一個分支結(jié)點node,并將待匹配字符串根據(jù)各個node結(jié)點分別進行匹配,記錄其中匹配成功且剩余的未匹配字符串長度最短的作為匹配狀態(tài)state,如果沒有結(jié)點匹配成功則置state為匹配失敗,下一步;
步驟22:退出并返回匹配狀態(tài)state。
findInNode(如圖3所示):
步驟31:查看當(dāng)前結(jié)點類型(正則、普通字符、內(nèi)部引用文法樹),根據(jù)不同結(jié)點類型分別進行匹配,并記錄匹配狀態(tài)state1(匹配成功與否和剩余的未匹配字符串),繼續(xù)下一步;
步驟32:如果state1的匹配狀態(tài)失敗,則轉(zhuǎn)步驟36;
步驟33:如果當(dāng)前結(jié)點還有分支結(jié)點,則循環(huán)遍歷該結(jié)點的每一個分支結(jié)點,并將剩余的未匹配字符串根據(jù)各個分支結(jié)點分別進行匹配,記錄其中匹配成功且剩余的未匹配字符串長度最短的作為匹配狀態(tài)state2,如果當(dāng)前結(jié)點沒有分支結(jié)點或分支結(jié)點均匹配失敗則直接置state2為失敗狀態(tài),繼續(xù)下一步;
步驟34:如果當(dāng)前結(jié)點不為可結(jié)束結(jié)點,則當(dāng)state2的匹配狀態(tài)失敗時,設(shè)置state1的匹配狀態(tài)為失敗,繼續(xù)下一步;
步驟35:如果state1和state2的匹配狀態(tài)均成功,則將state1置為state2,繼續(xù)下一步;
步驟36:退出并返回匹配狀態(tài)state1。
以上文所述的身高文法為例說明,假設(shè)待匹配字符串為“身高是162cm”,則進行匹配后與文法模板“[hight_prefix]是[hight_num][hight_unit]”對應(yīng),因此hight_prefix=身高,hight_num=162,hight_unit=cm,也即最后文法匹配后返回“[hight_prefix:身高][hight_num:162][hight_unit:cm]”。
(3)實體抽取
實體抽取是根據(jù)系統(tǒng)需求指定所需的實體類別,然后在文法模板匹配的結(jié)果上進行過濾得到的。具體的步驟如下:
根據(jù)系統(tǒng)需求,指定所需的實體類別(與文法模板定義對應(yīng))types;
依次查看匹配結(jié)果列表中的每個結(jié)果,保留那些匹配類別在已指定的types里面,得到實體抽取結(jié)果;
退出完成,返回實體抽取結(jié)果。
如系統(tǒng)指定實體類別為hight_num、hight_unit,則文法模板匹配結(jié)果若為“[hight_prefix:身高][hight_num:162][hight_unit:cm]”過濾得到“[hight_num:162][hight_unit:cm]”,因而抽取了實體hight_num=162,hight_unit=cm。
當(dāng)然實體的抽取不一定是簡單的類別過濾,可以有更多復(fù)雜的邏輯,例如指定其它的類別和指定不同的類別范圍),但核心思想是在文法模板匹配后得到的結(jié)果中進行二次加工所得,具體的抽取邏輯可根據(jù)應(yīng)用場所不同而已。
上述具體實施方式,并不構(gòu)成對本發(fā)明保護范圍的限制。本領(lǐng)域技術(shù)人員應(yīng)該明白的是,取決于設(shè)計要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進等,均應(yīng)包含在本發(fā)明保護范圍之內(nèi)。