李彩玲 劉俊
(1.臨汾職業(yè)技術(shù)學(xué)院計算機系,山西 臨汾 041000;2.北京神舟航天軟件技術(shù)有限公司,北京 100094)
親屬關(guān)系在戶籍管理、公安案件偵查、知識圖譜等領(lǐng)域均有著重要的應(yīng)用價值。親屬關(guān)系在計算機大規(guī)模應(yīng)用之前就有應(yīng)用,因此,要通過計算機分析處理親屬關(guān)系,需要設(shè)計恰當(dāng)?shù)挠嬎銠C表示方法。
以戶籍制度為例,新中國成立之初便開始了戶籍制度的建設(shè),戶籍信息中很重要的一個部分就是戶籍下屬的人與戶主的親屬關(guān)系。經(jīng)過多年的發(fā)展,戶籍?dāng)?shù)據(jù)已經(jīng)很大程度上實現(xiàn)了電子化。由于這些親屬關(guān)系的數(shù)據(jù)目前還是以傳統(tǒng)的關(guān)系數(shù)據(jù)庫存儲,戶口登記只記錄了戶籍下的個人同戶主的關(guān)系,而戶籍下兩個個人之間的關(guān)系則是缺失的,需要根據(jù)已有的關(guān)系進行推理產(chǎn)生。親屬關(guān)系數(shù)據(jù)要應(yīng)用在案件偵查、知識圖譜領(lǐng)域,必然面臨親屬關(guān)系數(shù)據(jù)需要通過推理補全的情況。
陳振宇[1]等人設(shè)計了用于中文的親屬關(guān)系邏輯表達(dá)模型及其推理方法,以“自己、母、夫、父、妻、子、女、兄、弟、姐、妹”這11種關(guān)系為基本關(guān)系,定義了其他的常用關(guān)系。而后設(shè)計了相應(yīng)的推理系統(tǒng),對于已知的關(guān)系集合S,首先將S中的所有關(guān)系全都按照定義轉(zhuǎn)化成前述11種基本關(guān)系表達(dá)的形式,然后對能夠連接的關(guān)系進行連接,最后通過預(yù)定義的含有14322 條規(guī)則的數(shù)據(jù)庫,把關(guān)系表達(dá)式還原成常用的親屬關(guān)系輸出。這一方法的缺陷在于邏輯謂詞的計算實際上會有大量的冗余計算,同時需要手工編寫的規(guī)則數(shù)量是比較大的且難以證明其完備性。
黃銳[2]基于本體概念構(gòu)建了親屬關(guān)系的知識模型,涵蓋了簡單的親屬關(guān)系;同時加入了SWRL規(guī)則用于推理出親屬間的隱藏關(guān)系。這一方法引入了本體表示模型,在親屬關(guān)系的知識表示上有推動作用,但是其本質(zhì)仍然是一個基于規(guī)則的系統(tǒng)。
盧達(dá)威[3]等人論述了親屬稱謂系統(tǒng)的復(fù)雜性和親屬推理的邊界等問題,指出一個親屬推理系統(tǒng)并非要表示所有的親屬關(guān)系,但是應(yīng)該有形式化的定義,明確親屬推理系統(tǒng)的表示范圍。盧達(dá)威利用婚姻關(guān)系、生育關(guān)系、被生育關(guān)系、兄弟姐妹關(guān)系作為四個基本血緣關(guān)系,重新設(shè)計了親屬關(guān)系表達(dá)式。通過在血緣關(guān)系結(jié)構(gòu)圖上尋找兩個與同一個人有親屬關(guān)系的人之間的最短的親屬關(guān)系路徑的方法進行親屬關(guān)系推理。其特點在于將圖結(jié)構(gòu)引入了親屬關(guān)系的表示,利用圖中的路徑表示親屬關(guān)系,有很大的借鑒意義。其問題在于某些條件下親屬關(guān)系無法唯一確定的情況,比如表妹的母親和我本人的關(guān)系就是一個無法唯一確定的例子。
John H.Winkelman[4]論述了四種親屬關(guān)系的表示系統(tǒng),分別是關(guān)聯(lián)系統(tǒng)、語義特征系統(tǒng)、邏輯謂詞系統(tǒng)和基于集合映射的代數(shù)系統(tǒng)。使用關(guān)聯(lián)系統(tǒng)和語義特征系統(tǒng)表示親屬關(guān)系不能夠滿足實際要求;基于邏輯謂詞的系統(tǒng)因其解決問題并非按照人類思考的方式,往往缺乏有效的方式將多種關(guān)系進行合并,計算復(fù)雜;基于代數(shù)的系統(tǒng)由于符合人類思考過程、簡潔等優(yōu)點受到John H.Winkelman的推崇。
總體而言,相關(guān)的研究較少,主要使用了基于邏輯謂詞、本體等的關(guān)系表示模型;此外中文語境下的親屬關(guān)系與英文語境下還有些許不同,英文的研究成果無法直接應(yīng)用于中文環(huán)境。因此,對該問題進行進一步的研究具有重要的理論與實踐意義。
親屬關(guān)系的表達(dá)可以通過邏輯謂詞來進行數(shù)學(xué)表達(dá),即R(x,y),其中的x 和y 為人物變量,表示親屬關(guān)系中的主語和賓語,即為x稱呼y為R。例如,夫(韓梅,李雷)來表達(dá)韓梅和李雷的關(guān)系,表示韓梅稱呼李雷為夫。
親屬關(guān)系的代數(shù)推理是建立在完備的親屬關(guān)系知識庫的基礎(chǔ)上。完整、豐富的親屬認(rèn)知模型和準(zhǔn)確的親屬關(guān)系模型,對于親屬關(guān)系推演起到至關(guān)重要的作用。親屬認(rèn)知模型的多元的屬性表達(dá),在對于一些復(fù)雜親屬關(guān)系推演中歧義消解起到至關(guān)重要的作用。
區(qū)別于國外的uncle,國內(nèi)對應(yīng)稱呼為叔叔,伯伯。所以在構(gòu)造親屬模型時,同輩的年齡大小也被考慮在系統(tǒng)模型推演中,對應(yīng)的知識庫構(gòu)建時年齡也被作為一項重要指標(biāo)納入到性質(zhì)庫的指標(biāo)當(dāng)中。
(1)親屬名詞
親屬名詞是親屬之間的稱謂,表達(dá)一種親屬關(guān)系,一種親屬關(guān)系的親屬名稱在不同的應(yīng)用場景下有多種表達(dá)方式。例如,“父親”“爸爸”“爹”“家父”都是表示同一種親屬關(guān)系的親屬名詞,根據(jù)不同的場景才有不同的名詞表述。我們在構(gòu)建親屬名詞針對同一種關(guān)系的親屬名詞進行了分類。例如:R1父親(x,y)=R2家父(x,y)。
(2)親屬關(guān)系
親屬關(guān)系是描述人物之間的社會聯(lián)系。通過邏輯謂詞進行表達(dá)R(x,y)。
性質(zhì)庫是親屬關(guān)系以及親屬關(guān)系中所包含的隱含關(guān)系的集合。性質(zhì)庫作為性質(zhì)判斷的重要依據(jù),在代數(shù)推理上是重要的理論依據(jù)。例如,兄長(x,y)=>男(x)∧男(y)∧(y>x)。親屬關(guān)系、親屬的各種屬性(性別、年齡)以及屬性關(guān)系的集合統(tǒng)稱為性質(zhì)庫。
在親屬關(guān)系中,主語和賓語的關(guān)系是相互的。同時在漢語邏輯中存在大量的逆關(guān)系。這種主賓互換,關(guān)系轉(zhuǎn)換的運算叫逆判斷。在謂詞邏輯中可以通過求逆運算來實現(xiàn)。例如R父親(x,y)<=>R孩子(y,x)。R孩子即為R父親的逆判斷。
漢語中存在大量的親屬關(guān)系和逆判斷。例如父子<=>子父,夫妻<=>妻夫,兄弟<=>弟兄通過對每種親屬關(guān)系的逆判斷進行整理,完成逆判斷庫的構(gòu)建。
親屬關(guān)系推演過程中,需要通過間隔多人的層層關(guān)系的推理傳遞完成。例如,R弟(x,y)∧R妻(y,z)=>R弟媳(x,z)。存在中間人的親屬關(guān)系的推理,通過兩層謂詞邏輯和共有的中間人,完成親屬邏輯的傳遞。通過對基本的傳遞信息的構(gòu)建,來完成親屬代數(shù)關(guān)系推演中的關(guān)系推理。
代數(shù)表示模型的構(gòu)建基于親屬關(guān)系的如下事實:
(1)每個親屬關(guān)系都有一個參考點,例如“小明的父親”“我的爺爺”。
(2)復(fù)雜的關(guān)系可以表達(dá)成一系列有序的簡單關(guān)系的組合。例如,“我的叔叔”是“我的爸爸的弟弟”,x表示我,y表示爸爸,z表示弟弟,R叔叔(x,y)=R爸爸(x,z)∧R弟弟(z,y)。
(3)親屬關(guān)系本身是一種從一個關(guān)系集合到另一個關(guān)系集合的映射。以自己為參考點,“父親”這一關(guān)系將“我”映射到“我的父親”這一個單元素集合;再對“我的父親”這一個單元素集合進行“哥哥”這一關(guān)系的映射,則映射的結(jié)果為“我的伯伯”這樣一個集合,它可能是空集、單元素集合或者多元素集合。
(4)每個親屬關(guān)系都可以定義一個逆關(guān)系,一個關(guān)系的逆關(guān)系可能唯一比如“丈夫”的逆關(guān)系是“妻子”;也可能不唯一,比如“父親”的逆關(guān)系為“兒子or 女兒”,R父親(x,y)<=>R孩子(y,x)∧(R男(x)∨R女(x))。
(5)復(fù)合的親屬關(guān)系滿足結(jié)合律,例如:父親的父親的母親=爺爺?shù)哪赣H=父親的奶奶,R父親(x,y)∧R父親(y,z)∧R母親(z,w)=R爺爺(x,z)∧R母親(z,w)=R父親(x,y)∧R奶奶(y,w)。
綜上,可以使用一個代數(shù)系統(tǒng)來描述親屬關(guān)系。為了建立這樣一個代數(shù)系統(tǒng),主要有兩個子任務(wù):確立要考慮的親屬關(guān)系的集合,定義集合內(nèi)元素之間的運算表。
首先確定要研究的親屬關(guān)系,中國是一個幅員遼闊的多民族國家,不同的地域和民族對親屬中國親屬關(guān)系主要分為血親和姻親兩大類[3],血親是指由生育關(guān)系確立的親屬關(guān)系,姻親指的是由婚姻產(chǎn)生的親屬關(guān)系。此外中國的親屬關(guān)系還要考慮長幼、性別等因素,這也是中國的親屬關(guān)系體系與西方的一個顯著的不同的地方,例如父親的兄長叫伯父,父親的弟弟叫叔父;又比如父親的姐妹叫姑姑,而母親的姐妹叫姨母。親屬關(guān)系的體系繁雜,并且其中的遵循原則并非在所有的關(guān)系上都普遍適用,例如伯父和叔父是由和父親的長幼關(guān)系區(qū)分,但是姑母無論和父親長幼關(guān)系如何都叫姑母。這使得親屬之間的運算關(guān)系很難用簡單的一些規(guī)則定義出來,因此要定義親屬關(guān)系的運算規(guī)則,應(yīng)該采用運算表的方式定義。
表示二元運算*的運算表是一個二維表格,二元運算*的運算表的行列標(biāo)號均由集合R中的所有元素構(gòu)成,在行列交匯的格子內(nèi),記錄相對應(yīng)行列的元素進行*運算后的結(jié)果。因此本文需定義的運算表是一個56*56的表格,只要將這一表格填滿即完成親屬關(guān)系的代數(shù)表示模型的構(gòu)建。inv運算的運算表是一個元素數(shù)目和R集合基數(shù)相等數(shù)目的字典,由R中元素作為鍵,inv運算的結(jié)果作為值。如表2和表3分別展示了部分inv運算表和親屬關(guān)系的二元運算*的運算表的稱謂均有差異,但是其中依然有些原則是普適的。為了應(yīng)用于實際,必須將全國各地的親屬關(guān)系稱謂標(biāo)準(zhǔn)化。本文將在國標(biāo)GBT-4761-2008[5]家庭關(guān)系代碼中包含的親屬關(guān)系的基礎(chǔ)上進行后續(xù)的工作,此舉能夠保證模型可以方便地運用于大多數(shù)場景。
表1 納入考慮的親屬關(guān)系集合
表2 求逆運算inv運算表(部分)
表3 親屬關(guān)系乘法運算表(部分)
GBT-4761-2008 中有兩種親屬關(guān)系代碼,用一位數(shù)字表示的親屬關(guān)系代碼和用兩位數(shù)字表示的親屬關(guān)系代碼,由于一位數(shù)字代碼表達(dá)的親屬關(guān)系較為粗略,因此本文采用兩位數(shù)字代碼表示的親屬關(guān)系作為研究集合。不過這一關(guān)系集合中包含一些不利于處理的關(guān)系,需要進行刪減。如其中包含的“配偶”“妻”“夫”這三個關(guān)系,互相有包含關(guān)系,刪去“配偶”這一關(guān)系不會影響最終模型的表達(dá)能力,還可以減少冗余信息。經(jīng)過調(diào)整之后最終確立如表1 所示共計56 種關(guān)系組成的關(guān)系集合。
確立了以上的關(guān)系集合,記為R,?A∈R,可以定義求逆運算inv,inv(A)的運算結(jié)果是R的一個子集,這一運算可以通過一個行數(shù)與R 中元素個數(shù)相同運算表來定義。接下來要在R 上定義親屬關(guān)系的二元運算*(讀作親屬關(guān)系乘法),這個運算有如下性質(zhì):
(1)“本人”是R中的單位元,對任意A∈R,有本人*A=A*本人=A;
(2)?A∈R,inv(A)=φ,滿足 本人∈φ;
護理工作辛苦繁瑣、排班制度不穩(wěn)定調(diào)動大,護理人員社會地位低、不受尊重是在廣大護生中的普遍印象。許多人對護理工作存在偏見,把為病人提供日常生活照顧、打針、發(fā)藥作為護理工作的全部。護理本科在校生主要是在校內(nèi)課堂上學(xué)習(xí)專業(yè)基礎(chǔ)知識以及在實驗室學(xué)習(xí)操作技術(shù),并沒有在臨床上與病人進行面對面的交流溝通,因此,對于即將從事的職業(yè)或多或少會缺乏信心,甚至出現(xiàn)焦慮、恐懼等心理。
(3)*運算滿足結(jié)合律;
(4)任意A,B∈R,代數(shù)式A*B的運算結(jié)果是一個集合φ,(φ∈R);
(5)由于*的運算結(jié)果是一個集合,對于一個集合φ,(φ∈R)和?A∈R之間,同樣需要定義運算,定義如下:
(6)對于兩個集合φ1,φ2(φ1,φ2?R),定義兩者之間的*運算:
在親屬關(guān)系的代數(shù)表示模型建立完成之后,即可應(yīng)用這一表示模型進行親屬關(guān)系的推理。本文所述的推理,主要解決如下問題:給定一個由n個人組成的集合,已知其中部分成員之間的親屬關(guān)系(用前述R集合中的關(guān)系表述),要通過推理回答集合中任意兩個成員之間有何種親屬關(guān)系。
首先,集合成員之間的關(guān)系用圖來表示是非常自然的,由于親屬關(guān)系是有方向的,因此應(yīng)該用有向圖來表述親屬關(guān)系,每個人用一個頂點表示,兩個人之間有某種親屬關(guān)系,則在兩人之間連上箭頭并在箭頭上標(biāo)注關(guān)系種類,下稱此圖為親屬關(guān)系圖。根據(jù)代數(shù)表示模型,每個關(guān)系都能求逆,當(dāng)已知a到b有親屬關(guān)系A(chǔ)時,可以得出b到a有親屬關(guān)系inv(A),因此,實際上親屬關(guān)系圖中任意兩個頂點之間的箭頭都是成對出現(xiàn)的。中國的親屬關(guān)系系統(tǒng)中,性別是一個重要的考慮因素,在將已知信息表示成親屬關(guān)系圖的過程中,如果親屬關(guān)系能夠斷定人物的性別,應(yīng)當(dāng)對人物性別做標(biāo)記,便于推理時獲得更加精確的備選關(guān)系集合。
要通過已知的親屬關(guān)系找到未知的兩個人之間的親屬關(guān)系,可以理解成在親屬關(guān)系圖中找到兩人之間的一條路徑,然后將路徑上的每一條邊上的關(guān)系用*運算連接起來,結(jié)果就是兩人之間的關(guān)系。當(dāng)然如果不存在這樣一條路徑,那就說明當(dāng)前信息不足以推斷出兩人之間的親屬關(guān)系;如果存在多條路徑,那么每一條都能夠表示兩人之間的親屬關(guān)系,但是兩條不同路徑獲得的信息量不一樣,得出的備選的關(guān)系集合會有不同,但均包含真正的關(guān)系。
在獲得了兩人之間的路徑后,沿著路徑依次取出每條邊上的關(guān)系集合,用“*”連接在一起構(gòu)成一個代數(shù)式子,這一代數(shù)式就是兩者之間的親屬關(guān)系表達(dá)式,但是這一表達(dá)式往往不符合習(xí)慣表達(dá),還要根據(jù)運算表進行化簡。
根據(jù)以上論述,提出如下親屬關(guān)系推理算法:
算法1 親屬關(guān)系推理算法
(1)begin
(2)預(yù)先定義求逆運算表INV,親屬關(guān)系乘法(*)運算表MUL
(3)Graph G; //親屬關(guān)系圖
(4)Dict Gender; //標(biāo)記性別的字典
(5)for relation in relationInputs:
(6)對每個輸入的關(guān)系,在圖中添加相應(yīng)邊,邊的附屬數(shù)據(jù)域存儲關(guān)系名稱的集合;
(7)如果關(guān)系包含性別信息,在Gender字典中記錄;
(8)end for
(9)for relation in relationInputs:
對每個輸入的關(guān)系,在圖中添加與之相應(yīng)的逆關(guān)系的邊;
根據(jù)Gender 中的性別信息刪除邊的附屬數(shù)據(jù)域中不符合性別限定的關(guān)系;
(10)end for
(11)//完成親屬關(guān)系圖的構(gòu)造
(12)Input:想要查詢關(guān)系的兩人A、B
(13)Path=圖G中A、B兩人之間的一條路徑;
(14)AlgebricExp=Path對應(yīng)的代數(shù)式;
(15)result=AlgebricExp[1];
(16)for i=2 to length(AlgebricExp):
(17)result=relationMultiply(result,AlgebricExp[i]);
(18)//relationMultiply是親屬關(guān)系乘法運算的實現(xiàn)
(19)在result中刪除不符合性別限定關(guān)系的元素;
(20)end for
(21)output result
(22)end
已知:B是A的兒子,C是B的女兒,E是A的女兒,G是E的兒子,G是C的表兄弟,E是F的妻子。求問:F是C的何種親屬?
解決步驟如下:
(1)建立一個圖,把已知關(guān)系作為附帶關(guān)系的邊填到圖中,得到如圖1所示親屬關(guān)系圖,同時在此過程中將會確定性別信息:B、G、F為男性,C、E為女性。
圖1 已知親屬關(guān)系圖
(2)補全親屬關(guān)系圖中的逆關(guān)系對應(yīng)的邊:以B、C 為例,C是B的女兒,查詢inv運算表可知女兒的逆關(guān)系為“{父親,母親}”,已知B 是男性,排除“母親”,因此C 指向B 的箭頭應(yīng)該標(biāo)注父親。以此類推可以得到如圖2的親屬關(guān)系圖。
圖2 補全逆關(guān)系后的親屬關(guān)系圖
(3)尋找C到F的路徑確定C和F的親屬關(guān)系:C到F有兩條路徑,CGEF和CBAEF。
(4)先看CGEF 這一條路徑,轉(zhuǎn)化成親屬關(guān)系代數(shù)式為“表兄弟*母親*夫”,通過計算表進行如下化簡計算:
表兄弟*母親*夫={姑母,舅母,姨母}*夫={姑父,姨父,舅父}
因此可以得出F是C的姑父、姨父或者舅父。
(5)再看CBAEF這一條路徑,轉(zhuǎn)化成親屬關(guān)系代數(shù)式為“父親*{父親,母親}*女*夫”,通過計算表進行如下化簡計算:
父親*{父親,母親}*女*夫={爺爺,奶奶}*女*夫=姑母*夫=姑父
因此可以得出F是C的姑父。
可以看到這兩種路徑得到了不一樣的運算結(jié)果,F(xiàn) 實際上是C的姑父,兩個計算路徑得出的結(jié)果集合都包含正確的答案。事實上這兩者均是正確的,只是它們推理時考慮到的信息不一樣,得出了精確度不同的結(jié)果。現(xiàn)實生活中,倘若C 告訴他人“E 是我表兄弟的母親,F(xiàn) 是E 的丈夫”,依據(jù)這句話根本不足以判斷F是C的姑父,因為決定F是C的姑父、姨父還是舅父的關(guān)鍵信息是E 和C 的父親具有相同的父親或者母親,而CGEF這條關(guān)系路徑則忽略了這一關(guān)鍵信息。要找出最精確的答案,目前本文還沒能給出有效方案,但是在圖中節(jié)點較少且邊比較稀疏的時候,可以使用一個暴力搜索的方法:求出所有的路徑,選擇結(jié)果集元素個數(shù)最少的一個。在節(jié)點數(shù)多、邊稠密的情況下,暴力搜索的理論最差算法復(fù)雜度為O(n!),此外還可以采取求出一條最短路徑的方案,這樣雖然可能降低結(jié)果的精準(zhǔn)程度,但是規(guī)避了算法復(fù)雜度的影響。
本文通過總結(jié)人們?nèi)粘1硎鲇H屬關(guān)系的方式的特征,將親屬關(guān)系本身看成是一種把一個親屬關(guān)系集合映射到另一個親屬關(guān)系集合的映射規(guī)則,進而發(fā)現(xiàn)這些規(guī)則之間的復(fù)合滿足一些代數(shù)運算的性質(zhì),因而建立了基于代數(shù)系統(tǒng)的親屬關(guān)系表示系統(tǒng)。在國標(biāo)GBT-4761-2008 所包含的親屬關(guān)系的基礎(chǔ)上確立了要研究的親屬關(guān)系的集合,然后通過計算表在此集合上定義了求逆運算和親屬關(guān)系的二元運算(*),最后提出了通過親屬關(guān)系圖表示已知親屬關(guān)系知識的方法,并且在此基礎(chǔ)上提出了用親屬關(guān)系圖中兩個節(jié)點的路徑來表示兩節(jié)點的親屬關(guān)系的推理算法,通過偽代碼和例子的方式闡明了算法的運行過程,證明了算法的可行性。
本文提出的方法基于對人類思考親屬關(guān)系問題的過程的模仿,同時借助了代數(shù)學(xué)的理論,為研究親屬關(guān)系的表示和推理問題提供了一個新的視角,但是本方法也有結(jié)果精確度受中間運算過程的影響等問題,這些問題還需要進一步研究。