李彩玲 劉俊
(1.臨汾職業(yè)技術學院計算機系,山西 臨汾 041000;2.北京神舟航天軟件技術有限公司,北京 100094)
親屬關系在戶籍管理、公安案件偵查、知識圖譜等領域均有著重要的應用價值。親屬關系在計算機大規(guī)模應用之前就有應用,因此,要通過計算機分析處理親屬關系,需要設計恰當的計算機表示方法。
以戶籍制度為例,新中國成立之初便開始了戶籍制度的建設,戶籍信息中很重要的一個部分就是戶籍下屬的人與戶主的親屬關系。經過多年的發(fā)展,戶籍數據已經很大程度上實現了電子化。由于這些親屬關系的數據目前還是以傳統(tǒng)的關系數據庫存儲,戶口登記只記錄了戶籍下的個人同戶主的關系,而戶籍下兩個個人之間的關系則是缺失的,需要根據已有的關系進行推理產生。親屬關系數據要應用在案件偵查、知識圖譜領域,必然面臨親屬關系數據需要通過推理補全的情況。
陳振宇[1]等人設計了用于中文的親屬關系邏輯表達模型及其推理方法,以“自己、母、夫、父、妻、子、女、兄、弟、姐、妹”這11種關系為基本關系,定義了其他的常用關系。而后設計了相應的推理系統(tǒng),對于已知的關系集合S,首先將S中的所有關系全都按照定義轉化成前述11種基本關系表達的形式,然后對能夠連接的關系進行連接,最后通過預定義的含有14322 條規(guī)則的數據庫,把關系表達式還原成常用的親屬關系輸出。這一方法的缺陷在于邏輯謂詞的計算實際上會有大量的冗余計算,同時需要手工編寫的規(guī)則數量是比較大的且難以證明其完備性。
黃銳[2]基于本體概念構建了親屬關系的知識模型,涵蓋了簡單的親屬關系;同時加入了SWRL規(guī)則用于推理出親屬間的隱藏關系。這一方法引入了本體表示模型,在親屬關系的知識表示上有推動作用,但是其本質仍然是一個基于規(guī)則的系統(tǒng)。
盧達威[3]等人論述了親屬稱謂系統(tǒng)的復雜性和親屬推理的邊界等問題,指出一個親屬推理系統(tǒng)并非要表示所有的親屬關系,但是應該有形式化的定義,明確親屬推理系統(tǒng)的表示范圍。盧達威利用婚姻關系、生育關系、被生育關系、兄弟姐妹關系作為四個基本血緣關系,重新設計了親屬關系表達式。通過在血緣關系結構圖上尋找兩個與同一個人有親屬關系的人之間的最短的親屬關系路徑的方法進行親屬關系推理。其特點在于將圖結構引入了親屬關系的表示,利用圖中的路徑表示親屬關系,有很大的借鑒意義。其問題在于某些條件下親屬關系無法唯一確定的情況,比如表妹的母親和我本人的關系就是一個無法唯一確定的例子。
John H.Winkelman[4]論述了四種親屬關系的表示系統(tǒng),分別是關聯(lián)系統(tǒng)、語義特征系統(tǒng)、邏輯謂詞系統(tǒng)和基于集合映射的代數系統(tǒng)。使用關聯(lián)系統(tǒng)和語義特征系統(tǒng)表示親屬關系不能夠滿足實際要求;基于邏輯謂詞的系統(tǒng)因其解決問題并非按照人類思考的方式,往往缺乏有效的方式將多種關系進行合并,計算復雜;基于代數的系統(tǒng)由于符合人類思考過程、簡潔等優(yōu)點受到John H.Winkelman的推崇。
總體而言,相關的研究較少,主要使用了基于邏輯謂詞、本體等的關系表示模型;此外中文語境下的親屬關系與英文語境下還有些許不同,英文的研究成果無法直接應用于中文環(huán)境。因此,對該問題進行進一步的研究具有重要的理論與實踐意義。
親屬關系的表達可以通過邏輯謂詞來進行數學表達,即R(x,y),其中的x 和y 為人物變量,表示親屬關系中的主語和賓語,即為x稱呼y為R。例如,夫(韓梅,李雷)來表達韓梅和李雷的關系,表示韓梅稱呼李雷為夫。
親屬關系的代數推理是建立在完備的親屬關系知識庫的基礎上。完整、豐富的親屬認知模型和準確的親屬關系模型,對于親屬關系推演起到至關重要的作用。親屬認知模型的多元的屬性表達,在對于一些復雜親屬關系推演中歧義消解起到至關重要的作用。
區(qū)別于國外的uncle,國內對應稱呼為叔叔,伯伯。所以在構造親屬模型時,同輩的年齡大小也被考慮在系統(tǒng)模型推演中,對應的知識庫構建時年齡也被作為一項重要指標納入到性質庫的指標當中。
(1)親屬名詞
親屬名詞是親屬之間的稱謂,表達一種親屬關系,一種親屬關系的親屬名稱在不同的應用場景下有多種表達方式。例如,“父親”“爸爸”“爹”“家父”都是表示同一種親屬關系的親屬名詞,根據不同的場景才有不同的名詞表述。我們在構建親屬名詞針對同一種關系的親屬名詞進行了分類。例如:R1父親(x,y)=R2家父(x,y)。
(2)親屬關系
親屬關系是描述人物之間的社會聯(lián)系。通過邏輯謂詞進行表達R(x,y)。
性質庫是親屬關系以及親屬關系中所包含的隱含關系的集合。性質庫作為性質判斷的重要依據,在代數推理上是重要的理論依據。例如,兄長(x,y)=>男(x)∧男(y)∧(y>x)。親屬關系、親屬的各種屬性(性別、年齡)以及屬性關系的集合統(tǒng)稱為性質庫。
在親屬關系中,主語和賓語的關系是相互的。同時在漢語邏輯中存在大量的逆關系。這種主賓互換,關系轉換的運算叫逆判斷。在謂詞邏輯中可以通過求逆運算來實現。例如R父親(x,y)<=>R孩子(y,x)。R孩子即為R父親的逆判斷。
漢語中存在大量的親屬關系和逆判斷。例如父子<=>子父,夫妻<=>妻夫,兄弟<=>弟兄通過對每種親屬關系的逆判斷進行整理,完成逆判斷庫的構建。
親屬關系推演過程中,需要通過間隔多人的層層關系的推理傳遞完成。例如,R弟(x,y)∧R妻(y,z)=>R弟媳(x,z)。存在中間人的親屬關系的推理,通過兩層謂詞邏輯和共有的中間人,完成親屬邏輯的傳遞。通過對基本的傳遞信息的構建,來完成親屬代數關系推演中的關系推理。
代數表示模型的構建基于親屬關系的如下事實:
(1)每個親屬關系都有一個參考點,例如“小明的父親”“我的爺爺”。
(2)復雜的關系可以表達成一系列有序的簡單關系的組合。例如,“我的叔叔”是“我的爸爸的弟弟”,x表示我,y表示爸爸,z表示弟弟,R叔叔(x,y)=R爸爸(x,z)∧R弟弟(z,y)。
(3)親屬關系本身是一種從一個關系集合到另一個關系集合的映射。以自己為參考點,“父親”這一關系將“我”映射到“我的父親”這一個單元素集合;再對“我的父親”這一個單元素集合進行“哥哥”這一關系的映射,則映射的結果為“我的伯伯”這樣一個集合,它可能是空集、單元素集合或者多元素集合。
(4)每個親屬關系都可以定義一個逆關系,一個關系的逆關系可能唯一比如“丈夫”的逆關系是“妻子”;也可能不唯一,比如“父親”的逆關系為“兒子or 女兒”,R父親(x,y)<=>R孩子(y,x)∧(R男(x)∨R女(x))。
(5)復合的親屬關系滿足結合律,例如:父親的父親的母親=爺爺的母親=父親的奶奶,R父親(x,y)∧R父親(y,z)∧R母親(z,w)=R爺爺(x,z)∧R母親(z,w)=R父親(x,y)∧R奶奶(y,w)。
綜上,可以使用一個代數系統(tǒng)來描述親屬關系。為了建立這樣一個代數系統(tǒng),主要有兩個子任務:確立要考慮的親屬關系的集合,定義集合內元素之間的運算表。
首先確定要研究的親屬關系,中國是一個幅員遼闊的多民族國家,不同的地域和民族對親屬中國親屬關系主要分為血親和姻親兩大類[3],血親是指由生育關系確立的親屬關系,姻親指的是由婚姻產生的親屬關系。此外中國的親屬關系還要考慮長幼、性別等因素,這也是中國的親屬關系體系與西方的一個顯著的不同的地方,例如父親的兄長叫伯父,父親的弟弟叫叔父;又比如父親的姐妹叫姑姑,而母親的姐妹叫姨母。親屬關系的體系繁雜,并且其中的遵循原則并非在所有的關系上都普遍適用,例如伯父和叔父是由和父親的長幼關系區(qū)分,但是姑母無論和父親長幼關系如何都叫姑母。這使得親屬之間的運算關系很難用簡單的一些規(guī)則定義出來,因此要定義親屬關系的運算規(guī)則,應該采用運算表的方式定義。
表示二元運算*的運算表是一個二維表格,二元運算*的運算表的行列標號均由集合R中的所有元素構成,在行列交匯的格子內,記錄相對應行列的元素進行*運算后的結果。因此本文需定義的運算表是一個56*56的表格,只要將這一表格填滿即完成親屬關系的代數表示模型的構建。inv運算的運算表是一個元素數目和R集合基數相等數目的字典,由R中元素作為鍵,inv運算的結果作為值。如表2和表3分別展示了部分inv運算表和親屬關系的二元運算*的運算表的稱謂均有差異,但是其中依然有些原則是普適的。為了應用于實際,必須將全國各地的親屬關系稱謂標準化。本文將在國標GBT-4761-2008[5]家庭關系代碼中包含的親屬關系的基礎上進行后續(xù)的工作,此舉能夠保證模型可以方便地運用于大多數場景。

表1 納入考慮的親屬關系集合

表2 求逆運算inv運算表(部分)

表3 親屬關系乘法運算表(部分)
GBT-4761-2008 中有兩種親屬關系代碼,用一位數字表示的親屬關系代碼和用兩位數字表示的親屬關系代碼,由于一位數字代碼表達的親屬關系較為粗略,因此本文采用兩位數字代碼表示的親屬關系作為研究集合。不過這一關系集合中包含一些不利于處理的關系,需要進行刪減。如其中包含的“配偶”“妻”“夫”這三個關系,互相有包含關系,刪去“配偶”這一關系不會影響最終模型的表達能力,還可以減少冗余信息。經過調整之后最終確立如表1 所示共計56 種關系組成的關系集合。
確立了以上的關系集合,記為R,?A∈R,可以定義求逆運算inv,inv(A)的運算結果是R的一個子集,這一運算可以通過一個行數與R 中元素個數相同運算表來定義。接下來要在R 上定義親屬關系的二元運算*(讀作親屬關系乘法),這個運算有如下性質:
(1)“本人”是R中的單位元,對任意A∈R,有本人*A=A*本人=A;
(2)?A∈R,inv(A)=φ,滿足 本人∈φ;
護理工作辛苦繁瑣、排班制度不穩(wěn)定調動大,護理人員社會地位低、不受尊重是在廣大護生中的普遍印象。許多人對護理工作存在偏見,把為病人提供日常生活照顧、打針、發(fā)藥作為護理工作的全部。護理本科在校生主要是在校內課堂上學習專業(yè)基礎知識以及在實驗室學習操作技術,并沒有在臨床上與病人進行面對面的交流溝通,因此,對于即將從事的職業(yè)或多或少會缺乏信心,甚至出現焦慮、恐懼等心理。
(3)*運算滿足結合律;
(4)任意A,B∈R,代數式A*B的運算結果是一個集合φ,(φ∈R);
(5)由于*的運算結果是一個集合,對于一個集合φ,(φ∈R)和?A∈R之間,同樣需要定義運算,定義如下:

(6)對于兩個集合φ1,φ2(φ1,φ2?R),定義兩者之間的*運算:

在親屬關系的代數表示模型建立完成之后,即可應用這一表示模型進行親屬關系的推理。本文所述的推理,主要解決如下問題:給定一個由n個人組成的集合,已知其中部分成員之間的親屬關系(用前述R集合中的關系表述),要通過推理回答集合中任意兩個成員之間有何種親屬關系。
首先,集合成員之間的關系用圖來表示是非常自然的,由于親屬關系是有方向的,因此應該用有向圖來表述親屬關系,每個人用一個頂點表示,兩個人之間有某種親屬關系,則在兩人之間連上箭頭并在箭頭上標注關系種類,下稱此圖為親屬關系圖。根據代數表示模型,每個關系都能求逆,當已知a到b有親屬關系A時,可以得出b到a有親屬關系inv(A),因此,實際上親屬關系圖中任意兩個頂點之間的箭頭都是成對出現的。中國的親屬關系系統(tǒng)中,性別是一個重要的考慮因素,在將已知信息表示成親屬關系圖的過程中,如果親屬關系能夠斷定人物的性別,應當對人物性別做標記,便于推理時獲得更加精確的備選關系集合。
要通過已知的親屬關系找到未知的兩個人之間的親屬關系,可以理解成在親屬關系圖中找到兩人之間的一條路徑,然后將路徑上的每一條邊上的關系用*運算連接起來,結果就是兩人之間的關系。當然如果不存在這樣一條路徑,那就說明當前信息不足以推斷出兩人之間的親屬關系;如果存在多條路徑,那么每一條都能夠表示兩人之間的親屬關系,但是兩條不同路徑獲得的信息量不一樣,得出的備選的關系集合會有不同,但均包含真正的關系。
在獲得了兩人之間的路徑后,沿著路徑依次取出每條邊上的關系集合,用“*”連接在一起構成一個代數式子,這一代數式就是兩者之間的親屬關系表達式,但是這一表達式往往不符合習慣表達,還要根據運算表進行化簡。
根據以上論述,提出如下親屬關系推理算法:
算法1 親屬關系推理算法
(1)begin
(2)預先定義求逆運算表INV,親屬關系乘法(*)運算表MUL
(3)Graph G; //親屬關系圖
(4)Dict Gender; //標記性別的字典
(5)for relation in relationInputs:
(6)對每個輸入的關系,在圖中添加相應邊,邊的附屬數據域存儲關系名稱的集合;
(7)如果關系包含性別信息,在Gender字典中記錄;
(8)end for
(9)for relation in relationInputs:
對每個輸入的關系,在圖中添加與之相應的逆關系的邊;
根據Gender 中的性別信息刪除邊的附屬數據域中不符合性別限定的關系;
(10)end for
(11)//完成親屬關系圖的構造
(12)Input:想要查詢關系的兩人A、B
(13)Path=圖G中A、B兩人之間的一條路徑;
(14)AlgebricExp=Path對應的代數式;
(15)result=AlgebricExp[1];
(16)for i=2 to length(AlgebricExp):
(17)result=relationMultiply(result,AlgebricExp[i]);
(18)//relationMultiply是親屬關系乘法運算的實現
(19)在result中刪除不符合性別限定關系的元素;
(20)end for
(21)output result
(22)end
已知:B是A的兒子,C是B的女兒,E是A的女兒,G是E的兒子,G是C的表兄弟,E是F的妻子。求問:F是C的何種親屬?
解決步驟如下:
(1)建立一個圖,把已知關系作為附帶關系的邊填到圖中,得到如圖1所示親屬關系圖,同時在此過程中將會確定性別信息:B、G、F為男性,C、E為女性。

圖1 已知親屬關系圖
(2)補全親屬關系圖中的逆關系對應的邊:以B、C 為例,C是B的女兒,查詢inv運算表可知女兒的逆關系為“{父親,母親}”,已知B 是男性,排除“母親”,因此C 指向B 的箭頭應該標注父親。以此類推可以得到如圖2的親屬關系圖。

圖2 補全逆關系后的親屬關系圖
(3)尋找C到F的路徑確定C和F的親屬關系:C到F有兩條路徑,CGEF和CBAEF。
(4)先看CGEF 這一條路徑,轉化成親屬關系代數式為“表兄弟*母親*夫”,通過計算表進行如下化簡計算:
表兄弟*母親*夫={姑母,舅母,姨母}*夫={姑父,姨父,舅父}
因此可以得出F是C的姑父、姨父或者舅父。
(5)再看CBAEF這一條路徑,轉化成親屬關系代數式為“父親*{父親,母親}*女*夫”,通過計算表進行如下化簡計算:
父親*{父親,母親}*女*夫={爺爺,奶奶}*女*夫=姑母*夫=姑父
因此可以得出F是C的姑父。
可以看到這兩種路徑得到了不一樣的運算結果,F 實際上是C的姑父,兩個計算路徑得出的結果集合都包含正確的答案。事實上這兩者均是正確的,只是它們推理時考慮到的信息不一樣,得出了精確度不同的結果。現實生活中,倘若C 告訴他人“E 是我表兄弟的母親,F 是E 的丈夫”,依據這句話根本不足以判斷F是C的姑父,因為決定F是C的姑父、姨父還是舅父的關鍵信息是E 和C 的父親具有相同的父親或者母親,而CGEF這條關系路徑則忽略了這一關鍵信息。要找出最精確的答案,目前本文還沒能給出有效方案,但是在圖中節(jié)點較少且邊比較稀疏的時候,可以使用一個暴力搜索的方法:求出所有的路徑,選擇結果集元素個數最少的一個。在節(jié)點數多、邊稠密的情況下,暴力搜索的理論最差算法復雜度為O(n!),此外還可以采取求出一條最短路徑的方案,這樣雖然可能降低結果的精準程度,但是規(guī)避了算法復雜度的影響。
本文通過總結人們日常表述親屬關系的方式的特征,將親屬關系本身看成是一種把一個親屬關系集合映射到另一個親屬關系集合的映射規(guī)則,進而發(fā)現這些規(guī)則之間的復合滿足一些代數運算的性質,因而建立了基于代數系統(tǒng)的親屬關系表示系統(tǒng)。在國標GBT-4761-2008 所包含的親屬關系的基礎上確立了要研究的親屬關系的集合,然后通過計算表在此集合上定義了求逆運算和親屬關系的二元運算(*),最后提出了通過親屬關系圖表示已知親屬關系知識的方法,并且在此基礎上提出了用親屬關系圖中兩個節(jié)點的路徑來表示兩節(jié)點的親屬關系的推理算法,通過偽代碼和例子的方式闡明了算法的運行過程,證明了算法的可行性。
本文提出的方法基于對人類思考親屬關系問題的過程的模仿,同時借助了代數學的理論,為研究親屬關系的表示和推理問題提供了一個新的視角,但是本方法也有結果精確度受中間運算過程的影響等問題,這些問題還需要進一步研究。