翟 霄 潘海為 謝曉芹 張志強(qiáng) 韓啟龍
(哈爾濱工程大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,哈爾濱,150001)
近年來(lái),由于醫(yī)院信息系統(tǒng)(Hospital information system,HIS)的普及,醫(yī)療機(jī)構(gòu)掌握了海量的醫(yī)學(xué)數(shù)據(jù),如何利用這些數(shù)據(jù)進(jìn)行醫(yī)學(xué)信息檢索、數(shù)據(jù)挖掘引起了越來(lái)越多的關(guān)注。因此,如何更有效地表示和存儲(chǔ)醫(yī)學(xué)數(shù)據(jù)使其更適合進(jìn)行信息檢索和數(shù)據(jù)挖掘,以及更快速地加載醫(yī)學(xué)數(shù)據(jù)成為迫切需要解決的問(wèn)題。
醫(yī)學(xué)數(shù)據(jù)包括多種類(lèi)型:(1)檢查手段產(chǎn)生的測(cè)量數(shù)值,如體溫、血壓、血氧飽和度和化驗(yàn)值等;(2)儀器記錄的信號(hào),如心電圖、腦電圖等;(3)醫(yī)學(xué)影像設(shè)備生成的圖像,如X線圖像、CT圖像和MRI圖像等;(4)文本形式呈現(xiàn)的報(bào)告結(jié)果,如醫(yī)生結(jié)合自身醫(yī)學(xué)知識(shí)給出的針對(duì)測(cè)量數(shù)值、信號(hào)、圖像的解釋和醫(yī)生做出的病理診斷等;(5)敘述性的數(shù)據(jù),如醫(yī)生記錄的主訴(患者口述的病情);(6)元數(shù)據(jù)文本,如關(guān)于器官、藥物、疾病以及治療方法的知識(shí)、醫(yī)療設(shè)備的參數(shù)等;(7)社會(huì)特征,如醫(yī)院的機(jī)構(gòu)信息、醫(yī)生和患者的個(gè)人信息等。上述的部分類(lèi)型本身還含有不同結(jié)構(gòu)的數(shù)據(jù),例如醫(yī)學(xué)影像數(shù)據(jù),除了圖像內(nèi)容,還包含成像參數(shù)等文本數(shù)據(jù)。這些不同類(lèi)型的醫(yī)學(xué)數(shù)據(jù)來(lái)自不同的渠道,擁有相對(duì)完整且獨(dú)立的語(yǔ)義,雖然互為差異,但是能夠相互印證相互補(bǔ)充[1],都從特定的角度表達(dá)了醫(yī)學(xué)信息的內(nèi)容和特點(diǎn),構(gòu)成了多樣且互補(bǔ)的數(shù)據(jù)集合。文獻(xiàn)[2]定義模態(tài)為描述同一事物的不同方法或角度,基于該定義,本文將這些來(lái)自多個(gè)渠道且具有相對(duì)獨(dú)立語(yǔ)義的醫(yī)學(xué)數(shù)據(jù)稱(chēng)為多模態(tài)醫(yī)學(xué)數(shù)據(jù)。
多模態(tài)融合通過(guò)分析多模態(tài)數(shù)據(jù)中各個(gè)模態(tài)的數(shù)據(jù)在表達(dá)能力或者信息傾向上的相關(guān)性和互補(bǔ)性,達(dá)到對(duì)數(shù)據(jù)高層語(yǔ)義的深層次理解,從而可以更好地實(shí)現(xiàn)信息檢索或數(shù)據(jù)挖掘。文本領(lǐng)域的研究表明,多模態(tài)融合的檢索系統(tǒng)通??扇〉脙?yōu)于單模態(tài)檢索系統(tǒng)的表現(xiàn)[3]。當(dāng)前,在一些領(lǐng)域已經(jīng)開(kāi)展了多模態(tài)數(shù)據(jù)分析的探索性研究[4-7],這些研究的思路主要考慮從不同模態(tài)的數(shù)據(jù)中分別提取特征,構(gòu)成多模態(tài)特征空間,發(fā)展具有多模態(tài)特征的模式發(fā)現(xiàn)理論與方法[1]。對(duì)當(dāng)前研究進(jìn)行分類(lèi),主要集中在3個(gè)方面:基于多核學(xué)習(xí)的多模態(tài)數(shù)據(jù)分類(lèi)[8],基于多字典協(xié)同表達(dá)的多模態(tài)數(shù)據(jù)建模[9]和基于深度學(xué)習(xí)的多模態(tài)數(shù)據(jù)融合[10]。但是,這些研究都還沒(méi)有涉及如何對(duì)不同模態(tài)的數(shù)據(jù)本身進(jìn)行融合后的表示和存儲(chǔ),而這需要在存儲(chǔ)醫(yī)學(xué)數(shù)據(jù)時(shí)能夠?qū)?shù)據(jù)中的模態(tài)統(tǒng)一建模并充分體現(xiàn)模態(tài)與模態(tài)之間的關(guān)系。
現(xiàn)有醫(yī)學(xué)數(shù)據(jù)的處理技術(shù)主要面向特定類(lèi)型醫(yī)學(xué)數(shù)據(jù)的存儲(chǔ)和查詢(xún),例如醫(yī)學(xué)影像存檔與通信系統(tǒng)(Picture archiving and communication systems, PACS),它是HIS系統(tǒng)的重要組成部分,也是現(xiàn)有醫(yī)學(xué)影像數(shù)據(jù)處理的典型技術(shù)。它是一個(gè)由相關(guān)設(shè)備和技術(shù)組成的綜合系統(tǒng),可以進(jìn)行醫(yī)學(xué)影像數(shù)據(jù)的獲取、存儲(chǔ)、檢索和展示[11]。PACS通常使用關(guān)系型數(shù)據(jù)庫(kù)對(duì)醫(yī)學(xué)影像數(shù)據(jù)中的病人信息、成像參數(shù)等數(shù)據(jù)進(jìn)行存儲(chǔ),并使用文件系統(tǒng)存儲(chǔ)影像文件。關(guān)系型數(shù)據(jù)庫(kù)在系統(tǒng)建立之初就一次性完成全部實(shí)體和實(shí)體間關(guān)系的定義,而這樣只能適應(yīng)系統(tǒng)建立之初對(duì)于存儲(chǔ)和查詢(xún)的需求。由于特定類(lèi)型醫(yī)學(xué)數(shù)據(jù)中的數(shù)據(jù)種類(lèi)和數(shù)據(jù)之間的關(guān)系是有限且顯然的,所以在系統(tǒng)建立之初一次性完成實(shí)體和關(guān)系的定義是合理的,但是多模態(tài)醫(yī)學(xué)數(shù)據(jù)的模態(tài)融合并不是靜態(tài)的定義,而是一個(gè)動(dòng)態(tài)描述模態(tài)及模態(tài)間關(guān)系的過(guò)程,這就需要數(shù)據(jù)庫(kù)對(duì)于數(shù)據(jù)間的拓?fù)浣Y(jié)構(gòu)具有較強(qiáng)的表達(dá)能力和足夠的靈活性,能夠描述復(fù)雜的數(shù)據(jù)間關(guān)系并動(dòng)態(tài)適應(yīng)新加載的模態(tài)和新發(fā)現(xiàn)的模態(tài)間關(guān)系。此外,在進(jìn)行多模態(tài)或跨模態(tài)查詢(xún)時(shí),關(guān)系數(shù)據(jù)庫(kù)會(huì)產(chǎn)生大量的表連接操作,而這是降低關(guān)系數(shù)據(jù)庫(kù)查詢(xún)效率的主要因素。
隨著關(guān)系數(shù)據(jù)在社交網(wǎng)絡(luò)等領(lǐng)域中的應(yīng)用越來(lái)越廣泛,圖數(shù)據(jù)庫(kù)逐漸成為關(guān)系數(shù)據(jù)處理中的研究熱點(diǎn)。圖數(shù)據(jù)庫(kù)應(yīng)用于數(shù)據(jù)之間的關(guān)聯(lián)或者拓?fù)潢P(guān)系相比數(shù)據(jù)本身更加重要或者同等重要的領(lǐng)域。首先,在圖數(shù)據(jù)庫(kù)中,數(shù)據(jù)和數(shù)據(jù)間的關(guān)系通常位于同一層次[12],所有的數(shù)據(jù)都存儲(chǔ)在一張圖中,圖中的點(diǎn)與邊可以進(jìn)行增添或修改,所以數(shù)據(jù)的拓?fù)浣Y(jié)構(gòu)具有很強(qiáng)的靈活性,能夠適應(yīng)各種拓?fù)渥兓?。此外,由于圖數(shù)據(jù)庫(kù)引入了一定程度的抽象,使圖類(lèi)型數(shù)據(jù)的建模更加自然、直觀,查詢(xún)語(yǔ)言和操作直接基于圖結(jié)構(gòu)[13],因此也避免了關(guān)系數(shù)據(jù)庫(kù)易產(chǎn)生大量表連接操作的缺陷。為了達(dá)到模態(tài)融合的目的,本文采用圖數(shù)據(jù)庫(kù)存儲(chǔ)多模態(tài)醫(yī)學(xué)數(shù)據(jù)。由于面對(duì)的是海量數(shù)據(jù),所以數(shù)據(jù)加載過(guò)程中有必要使用并行策略。本文提出了一種并行加載醫(yī)學(xué)數(shù)據(jù)的算法,該算法利用單機(jī)環(huán)境下的并行策略將多模態(tài)醫(yī)學(xué)數(shù)據(jù)加載至圖數(shù)據(jù)庫(kù)中,具有較好的數(shù)據(jù)處理效率。
通過(guò)使用圖數(shù)據(jù)庫(kù),來(lái)自不同模態(tài)的數(shù)據(jù)以及它們之間的關(guān)系被以點(diǎn)和邊的形式存儲(chǔ)在同一個(gè)圖結(jié)構(gòu)中,這從存儲(chǔ)層面實(shí)現(xiàn)了不同模態(tài)數(shù)據(jù)的融合。但是,也正由于不同模態(tài)的數(shù)據(jù)被無(wú)差別地存儲(chǔ)為同一個(gè)圖結(jié)構(gòu)中的點(diǎn)和邊,導(dǎo)致在訪問(wèn)這些點(diǎn)或邊時(shí),無(wú)法明確它們所屬的模態(tài)或模態(tài)間的關(guān)系,也就無(wú)法根據(jù)不同模態(tài)的特點(diǎn)讀取其對(duì)應(yīng)的數(shù)據(jù)。在關(guān)系型數(shù)據(jù)庫(kù)中,由于數(shù)據(jù)以表的形式分別存儲(chǔ),每張表都具有已知的表結(jié)構(gòu),所以在查詢(xún)關(guān)系型數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)時(shí),數(shù)據(jù)所屬的實(shí)體或者關(guān)系是顯然的。通過(guò)對(duì)比,可以看出,由于圖數(shù)據(jù)庫(kù)側(cè)重了數(shù)據(jù)之間關(guān)聯(lián)的表達(dá),而數(shù)據(jù)之間的關(guān)聯(lián)因其復(fù)雜而靈活的特點(diǎn)無(wú)法借助實(shí)體關(guān)系模型進(jìn)行定義,進(jìn)而也就不具備類(lèi)似關(guān)系型數(shù)據(jù)中的表結(jié)構(gòu),這樣便導(dǎo)致圖數(shù)據(jù)庫(kù)實(shí)際上缺少對(duì)所存儲(chǔ)數(shù)據(jù)的類(lèi)型進(jìn)行描述的元數(shù)據(jù)。
圖1 Facebook實(shí)體圖Fig.1 Entity graph of Facebook
現(xiàn)有利用圖數(shù)據(jù)庫(kù)處理圖數(shù)據(jù)的技術(shù)主要有在線查詢(xún)類(lèi)和離線挖掘類(lèi)兩類(lèi)。在線查詢(xún)類(lèi)的如TAO[14]和FlockDB[15],都應(yīng)用于社交網(wǎng)絡(luò)中。由于社交網(wǎng)絡(luò)中的數(shù)據(jù)全部來(lái)源于社交網(wǎng)站,數(shù)據(jù)的采集渠道相對(duì)單一,所以數(shù)據(jù)種類(lèi)有限且相對(duì)固定。如圖1是Facebook實(shí)體圖的一個(gè)示意片段[16],實(shí)體的種類(lèi)包括用戶(hù)、頁(yè)面和位置等,不同實(shí)體之間的關(guān)系是固定的,使用這些數(shù)據(jù)的方式也是明確的,所以此類(lèi)圖數(shù)據(jù)庫(kù)并沒(méi)用對(duì)數(shù)據(jù)所屬的模態(tài)及模態(tài)間關(guān)系進(jìn)行分析和描述。離線挖掘類(lèi)的如Pregel[17],更強(qiáng)調(diào)底層計(jì)算模型的設(shè)計(jì),而數(shù)據(jù)的類(lèi)型、采集渠道和對(duì)應(yīng)的語(yǔ)義則是由使用這些技術(shù)的用戶(hù)負(fù)責(zé)維護(hù)和解釋的,同樣沒(méi)有提供對(duì)數(shù)據(jù)所屬模態(tài)以及模態(tài)之間關(guān)系進(jìn)行描述的方法。相比社交網(wǎng)絡(luò)中的數(shù)據(jù),醫(yī)學(xué)數(shù)據(jù)存在大量不同的類(lèi)型,不同類(lèi)型的數(shù)據(jù)之間也存在著復(fù)雜的關(guān)系,所以對(duì)醫(yī)學(xué)數(shù)據(jù)所屬模態(tài)以及模態(tài)間關(guān)系進(jìn)行抽象和表示是必要的,這也是對(duì)醫(yī)學(xué)數(shù)據(jù)進(jìn)行模態(tài)融合從而提高信息檢索和數(shù)據(jù)挖掘效果的本質(zhì)原因。
為了解決這個(gè)問(wèn)題,本文提出了一種數(shù)據(jù)模型,即模態(tài)結(jié)構(gòu)圖。該模型以圖的形式對(duì)醫(yī)學(xué)數(shù)據(jù)所屬的不同模態(tài)和模態(tài)間關(guān)系進(jìn)行描述。具體來(lái)說(shuō),對(duì)圖數(shù)據(jù)庫(kù)中存儲(chǔ)著具體數(shù)據(jù)的“大圖”按照它們所屬的模態(tài)或模態(tài)間關(guān)系進(jìn)行投影,可以得到數(shù)據(jù)所屬的模態(tài)與模態(tài)間關(guān)系的“小圖”,這個(gè)“小圖”就是模態(tài)結(jié)構(gòu)圖。在模態(tài)結(jié)構(gòu)圖中,點(diǎn)代表一個(gè)模態(tài),點(diǎn)的屬性描述該模態(tài)具有的屬性,點(diǎn)與點(diǎn)之間的邊代表模態(tài)與模態(tài)之間的關(guān)系,邊的屬性描述該關(guān)系所具有的屬性,圖數(shù)據(jù)庫(kù)中的點(diǎn)和邊都是模態(tài)結(jié)構(gòu)圖中點(diǎn)和邊的實(shí)例。以下給出關(guān)于模態(tài)、模態(tài)間關(guān)系和模態(tài)結(jié)構(gòu)圖的具體定義。
定義1模態(tài)mode可以用五元組{Name,Dep,Pro,Uni,UniT}表示。其中,Name為模態(tài)名稱(chēng);Dep={〈Namei,DepTi〉|i∈{1,…,n}}表示該模態(tài)所依賴(lài)的其他模態(tài),其中Namei是被依賴(lài)模態(tài)的名稱(chēng),DepTi∈{唯一依賴(lài),非唯一依賴(lài)},表示依賴(lài)類(lèi)型,唯一依賴(lài)表示被依賴(lài)模態(tài)對(duì)應(yīng)的點(diǎn)只能擁有一個(gè)當(dāng)前模態(tài)的點(diǎn),而非唯一依賴(lài)則可以有多個(gè);Pro是該模態(tài)的屬性集合;Uni?Pro是具有唯一性的屬性集合,集合中屬性的值在規(guī)定范圍內(nèi)具有唯一性;UniT∈{全局唯一,依賴(lài)唯一},表示唯一性屬性的適用范圍,其中全局唯一指Uni中的屬性值在整個(gè)圖數(shù)據(jù)庫(kù)中唯一存在,依賴(lài)唯一則指在依賴(lài)同一個(gè)的點(diǎn)的范圍內(nèi)唯一存在。
例1由于醫(yī)學(xué)數(shù)據(jù)中多種模態(tài)的數(shù)據(jù)往往都和患者的個(gè)人信息等社會(huì)特征相關(guān)聯(lián),所以首先建立一個(gè)社會(huì)特征模態(tài)M1用來(lái)表示醫(yī)學(xué)數(shù)據(jù)中關(guān)于患者的個(gè)人信息。M1=〈Patient,?,Pro,Uni,UniT〉,其中Dep為空集表示該模態(tài)不依賴(lài)于其他模態(tài);Pro={"ID", "Name", "Sex", "Age"},Pro中屬性的值都可以從HIS中按照對(duì)應(yīng)的格式分別采集到;Uni={″ID″},ID屬性作為該模態(tài)的唯一性屬性且UniT選擇全局唯一,確保病人的ID屬性值在數(shù)據(jù)庫(kù)范圍內(nèi)不會(huì)重復(fù)。然后建立一個(gè)敘述性的文本模態(tài)M2用來(lái)表示由醫(yī)生記錄的病人主訴,M2=〈"Complaint",Dep,Pro,?,Null〉,其中Dep={〈"Patient",DepT〉},DepT選擇非唯一依賴(lài),因?yàn)橐粋€(gè)病人每進(jìn)行1次診斷,就會(huì)生成1份主訴;Pro={"Content"},該屬性只能采集到不含格式的文本數(shù)據(jù);由于只根據(jù)文本無(wú)法判斷數(shù)據(jù)是否唯一,所以該模態(tài)的Uni為空集,UniT無(wú)效。由于醫(yī)學(xué)數(shù)據(jù)中很多信號(hào)數(shù)據(jù)、圖像數(shù)據(jù)都是用來(lái)描述某一器官的,所以還可以再建立一個(gè)元數(shù)據(jù)模態(tài)M3表示腦部器官,M3=〈"Head",Dep,Pro,?,Nul〉, 其中Dep={〈"Patient",DepT〉},DepT選擇唯一依賴(lài),因?yàn)橐粋€(gè)病人只能擁有一顆頭顱;Pro中的屬性可以從相關(guān)的醫(yī)學(xué)知識(shí)庫(kù)中進(jìn)行采集,獲得能夠描述腦部器官的相關(guān)參數(shù);Uni為空集,因?yàn)閺尼t(yī)學(xué)元數(shù)據(jù)中獲取的數(shù)據(jù)無(wú)法區(qū)分出不同的腦部器官,UniT無(wú)效。然后再建立一個(gè)醫(yī)學(xué)圖像模態(tài)M4=〈"Image",Dep,Pro,Uni,UniT〉,其中Dep={〈"Head",DepT〉},DepT選擇非唯一依賴(lài),因?yàn)閷?duì)同一器官的的影像檢查會(huì)生成多張圖像;Pro中除了圖像的內(nèi)容,還包括圖像的寬度、高度、采樣數(shù)等圖像的格式數(shù)據(jù),這些數(shù)據(jù)都可以從DICOM等類(lèi)型文件中采集到,Uni選擇圖像像素作為唯一性屬性且UniT選擇全局唯一,因?yàn)閳D像內(nèi)容本身是獨(dú)一無(wú)二的。最后,再建立一個(gè)文本報(bào)告形式的模態(tài)M5用來(lái)表示病人的診斷結(jié)果,M5=〈"Diagnosis",Dep,Pro,Uni,UniT〉,其中Dep={〈"Patient",DepT1〉,〈"Complaint",DepT2〉,〈"Image",DepT3〉},DepT1,DepT2和DepT3都選擇非唯一依賴(lài),因?yàn)椴∪丝梢該碛胁恢挂环菰\斷結(jié)果;Pro={″Content″},該屬性也只能采集到不含格式的文本數(shù)據(jù);其Uni也為空集,UniT也無(wú)效。
定義2模態(tài)間關(guān)系Relation可以用六元組〈Name,BegM,EndM,Type,Pro,Uni〉表示,其中,Name為關(guān)系名稱(chēng);BegM為該關(guān)系所關(guān)聯(lián)的起點(diǎn)模態(tài);EndM為該關(guān)系所關(guān)聯(lián)的終點(diǎn)模態(tài);Type∈{單邊,重邊}為關(guān)系類(lèi)型,其中單邊表示在起點(diǎn)模態(tài)和終點(diǎn)模態(tài)對(duì)應(yīng)的點(diǎn)之間只能存在一條當(dāng)前關(guān)系對(duì)應(yīng)的邊,重邊則可以存在多條;Pro,Uni和Mode中的意義相同,且當(dāng)Type選擇為單邊時(shí),Uni無(wú)效。
例2建立例1中M1和M2的模態(tài)間關(guān)系〈"Describe",M1,M2,Type,Pro,Null〉,該模態(tài)間關(guān)系的名稱(chēng)為“Describe”;起點(diǎn)模態(tài)為M1,終點(diǎn)模態(tài)為M2,表示主訴數(shù)據(jù)是由患者敘述的;Type選擇為單邊,即一個(gè)表示患者的社會(huì)特征模態(tài)對(duì)應(yīng)的點(diǎn)和一個(gè)表示患者主訴的敘述性模態(tài)對(duì)應(yīng)的點(diǎn)之間只能存在一條叫做“Describe”的邊;Pro={"Date"},表示病人敘述主訴的日期;Uni無(wú)效。
定義3模態(tài)結(jié)構(gòu)圖可以用二元組〈{Mode},{Relation}〉表示,其中{Mode}是全部的模態(tài)集合,{Relation}是全部的模態(tài)間關(guān)系的集合。
圖2 模態(tài)結(jié)構(gòu)圖示例 Fig.2 Example of modal stru-cture graph
例3建立例1所述模態(tài)的模態(tài)關(guān)系圖,如圖2所示。其中M1和M2之間存在“描述”關(guān)系;M1和M3之間存在“所屬”關(guān)系;M3和M4之間存在“成像”關(guān)系;M2和M5,M4和M5之間存在“參考”關(guān)系;M1和M5之間存在“診斷”關(guān)系。
從底層數(shù)據(jù)存儲(chǔ)的角度來(lái)看,由于模態(tài)結(jié)構(gòu)圖提供了圖數(shù)據(jù)庫(kù)所缺少的元數(shù)據(jù),所以借助模態(tài)結(jié)構(gòu)圖,圖數(shù)據(jù)庫(kù)除了本身就具備的對(duì)復(fù)雜拓?fù)潢P(guān)系強(qiáng)大的表達(dá)能力,還擁有了關(guān)系型數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)良好的定義能力。因此,基于模態(tài)結(jié)構(gòu)圖和圖數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢(xún)與檢索就同時(shí)具備了圖數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)兩者的優(yōu)勢(shì):(1)如引言中所述,相比關(guān)系型數(shù)據(jù)庫(kù),圖數(shù)據(jù)庫(kù)在執(zhí)行多模態(tài)、跨模態(tài)的查詢(xún)與檢索時(shí),具有非常顯著的效率優(yōu)勢(shì),而且查詢(xún)語(yǔ)言也十分直觀;(2)由于真實(shí)多模態(tài)醫(yī)學(xué)數(shù)據(jù)中的拓?fù)潢P(guān)系非常復(fù)雜,例如存在大量的孤立數(shù)據(jù)點(diǎn)或互相不連通的數(shù)據(jù)點(diǎn)集,所以在查詢(xún)與檢索時(shí),僅憑數(shù)據(jù)間的相互關(guān)系無(wú)法完整地對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行查詢(xún)與檢索,但是圖數(shù)據(jù)庫(kù)中的數(shù)據(jù)按照其所屬的模態(tài)或模態(tài)間關(guān)系都映射到了模態(tài)結(jié)構(gòu)圖,所以仍然可以通過(guò)數(shù)據(jù)所屬的模態(tài)訪問(wèn)到所有該模態(tài)的數(shù)據(jù),進(jìn)而完成對(duì)數(shù)據(jù)的查詢(xún)與檢索。從上層數(shù)據(jù)語(yǔ)義的角度來(lái)看,由于模態(tài)結(jié)構(gòu)圖同時(shí)也是模態(tài)語(yǔ)義獨(dú)立性和相互關(guān)聯(lián)性的一種抽象和表達(dá),所以其本身就是一種以圖結(jié)構(gòu)表示的多模態(tài)融合策略。借助模態(tài)結(jié)構(gòu)圖,可以有效地描述基于數(shù)據(jù)融合的查詢(xún)與檢索需求,進(jìn)而在此基礎(chǔ)上設(shè)計(jì)相應(yīng)的檢索與查詢(xún)算法。
綜上所述,通過(guò)圖數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)并借助模態(tài)結(jié)構(gòu)圖對(duì)數(shù)據(jù)所屬模態(tài)或模態(tài)間關(guān)系進(jìn)行描述,多模態(tài)醫(yī)學(xué)數(shù)據(jù)可以實(shí)現(xiàn)從存儲(chǔ)層面到語(yǔ)義層面的模態(tài)融合。
圖3 多模態(tài)并行加載算法整體流程圖Fig.3 Flowchart of multimode parallel loading algorithm
圖3是多模態(tài)并行加載算法的整體流程圖。并行加載算法在圖中虛線所示的線程池中運(yùn)行,分為數(shù)據(jù)抽取和數(shù)據(jù)加載兩個(gè)階段。當(dāng)批量的醫(yī)學(xué)數(shù)據(jù)文件輸入后,線程池中的空閑線程會(huì)隨機(jī)取得一個(gè)尚未加載的文件進(jìn)入數(shù)據(jù)抽取階段。在數(shù)據(jù)抽取階段,線程首先根據(jù)模態(tài)結(jié)構(gòu)圖并借助指定的數(shù)據(jù)字典將屬于不同模態(tài)或者模態(tài)間關(guān)系的數(shù)據(jù)從文件中抽取出來(lái),并整合成對(duì)應(yīng)點(diǎn)或邊的數(shù)據(jù)集合,然后把從一個(gè)文件中抽取出的全部數(shù)據(jù)集合組成一個(gè)圖更新事務(wù)序列,最后,將這個(gè)序列發(fā)送給一個(gè)空閑線程進(jìn)入數(shù)據(jù)加載階段。在數(shù)據(jù)加載階段,線程在圖數(shù)據(jù)庫(kù)中建立各個(gè)數(shù)據(jù)集合對(duì)應(yīng)的點(diǎn)或邊,完成整個(gè)加載過(guò)程。
由于并行加載算法需要根據(jù)具體的模態(tài)結(jié)構(gòu)圖和數(shù)據(jù)字典才能對(duì)批量醫(yī)學(xué)數(shù)據(jù)進(jìn)行建模和提取,進(jìn)而將數(shù)據(jù)加載進(jìn)圖數(shù)據(jù)庫(kù)中,所以在執(zhí)行加載算法之前,首先需要給出待加載數(shù)據(jù)的模態(tài)結(jié)構(gòu)圖和數(shù)據(jù)字典。在預(yù)處理過(guò)程中,由人工對(duì)待加載醫(yī)學(xué)數(shù)據(jù)的模態(tài)組成和數(shù)據(jù)融合的需求進(jìn)行綜合分析,并按照第1節(jié)中模態(tài)結(jié)構(gòu)圖的定義給出具體的模態(tài)結(jié)構(gòu)圖。通過(guò)查詢(xún)各種模態(tài)數(shù)據(jù)對(duì)應(yīng)的行業(yè)標(biāo)準(zhǔn)或者數(shù)據(jù)本身的特點(diǎn),人工可以很容易地生成解析不同模態(tài)數(shù)據(jù)的數(shù)據(jù)字典。
由于模態(tài)之間存在依賴(lài)關(guān)系,所以需要根據(jù)模態(tài)結(jié)構(gòu)圖中這些關(guān)系遍歷模態(tài)結(jié)構(gòu)圖生成模態(tài)的加載順序。線程的數(shù)據(jù)抽取和加載都將按照這個(gè)順序依次處理模態(tài)結(jié)構(gòu)圖中的全部模態(tài)。算法的偽代碼見(jiàn)算法1。
算法1加載順序構(gòu)建算法
輸入:模態(tài)網(wǎng)絡(luò)N
輸出:加載順序表L
(1) while (L.size() < N.Mode.size())
(2) current = L.size();
(3) for each mode in N.Mode
(4) if (mode未加入L)
(5) 初始化可添加標(biāo)識(shí)flag為true
(6) list = mode.Dep;
(7) for eachmin list
(8) if (m未加入L)
(9) flag= false;
(10) if (flag)
(11) 向L中加入mode;
(12) if (L.size() == current && L.size() < N.Mode.size())
(13) 模態(tài)結(jié)構(gòu)圖存在依賴(lài)環(huán)構(gòu)建失敗并退出
(14) returnL
算法1不斷遍歷模態(tài)網(wǎng)絡(luò)N中的全部模態(tài),找出其中還未加入L的模態(tài),判斷它的依賴(lài)模態(tài)是否已全部加入L,若是則將該模態(tài)也加入L,否則繼續(xù)遍歷,直到L中所含模態(tài)數(shù)量等于N中的模態(tài)數(shù)量時(shí)停止,這時(shí)L即為按照模態(tài)間的依賴(lài)關(guān)系進(jìn)行排序所得的列表。其中步驟(2)中current在每次遍歷開(kāi)始時(shí)都賦值為當(dāng)前L中模態(tài)的數(shù)量,在每次遍歷結(jié)束時(shí),比較當(dāng)前L中所含模態(tài)數(shù)量和current,若兩者相等,則可知本次遍歷沒(méi)有任何一個(gè)模態(tài)被加入L,若此時(shí)仍有模態(tài)未加入L,則可知人工給出的模態(tài)結(jié)構(gòu)圖存在依賴(lài)環(huán),而存在依賴(lài)環(huán)的模態(tài)結(jié)構(gòu)圖是無(wú)法被用來(lái)加載數(shù)據(jù)的,算法退出。
模態(tài)結(jié)構(gòu)圖只是對(duì)多模態(tài)醫(yī)學(xué)數(shù)據(jù)中所包含的模態(tài)及其關(guān)系進(jìn)行建模后形成的一個(gè)數(shù)據(jù)模型,在進(jìn)行具體數(shù)據(jù)的加載時(shí),需要根據(jù)該模型得到每個(gè)文件中各個(gè)模態(tài)及其關(guān)系對(duì)應(yīng)的具體數(shù)據(jù)。本文給出了一個(gè)根據(jù)模態(tài)結(jié)構(gòu)圖定義從數(shù)據(jù)文件中抽取具體數(shù)據(jù)的算法,該算法在數(shù)據(jù)文件中尋找并抽取出每一個(gè)模態(tài)和模態(tài)間關(guān)系的屬性的值,拼裝成待創(chuàng)建的點(diǎn)和邊對(duì)應(yīng)的屬性集合,最后這些屬性集合組成了一個(gè)圖更新事務(wù)序列作為該算法的輸出。該抽取算法的偽代碼見(jiàn)算法2。
算法2DataExtract
輸入:模態(tài)網(wǎng)絡(luò)N,加載順序表L,文件F,數(shù)據(jù)字典D
輸出:圖更新事務(wù)序列UpdateSeq
(1) for eachminL
(2) 初始化屬性值列表valueList
(3) for each pro in m.Pro
(4) 根據(jù)D在F中找到pro的值value
(5) valueList [pro] = value
(6) 生成圖更新事務(wù)T
T=
(7) 將T加入U(xiǎn)pdateSeq
(8) for eachrin N.Relations
(9) 初始化屬性值列表valueList
(10) for each pro in r.Pro
(11) 根據(jù)D在F中找到pro的值value
(12) value [pro] = value
(13) 生成圖更新事務(wù)T
T=
(14) 將T加入U(xiǎn)pdateSeq
(15) return UpdateSeq
算法2中按照模態(tài)加載順序表中的順序,循環(huán)執(zhí)行步驟(2—7),抽取出每個(gè)模態(tài)的屬性值,生成包含模態(tài)名稱(chēng)、依賴(lài)模態(tài)、屬性值、唯一性屬性和唯一性適用范圍的新建點(diǎn)事務(wù)T,并加入圖更新事務(wù)序列UpdateSeq。同樣地,循環(huán)執(zhí)行步驟(9—14),抽取出每個(gè)模態(tài)間關(guān)系的屬性值,生成包含關(guān)系名稱(chēng)、起點(diǎn)模態(tài)、終點(diǎn)模態(tài)、關(guān)系類(lèi)型、關(guān)系屬性值和唯一性屬性的新建邊事務(wù),并加入U(xiǎn)pdateSeq。
通過(guò)數(shù)據(jù)提取,一個(gè)數(shù)據(jù)文件被轉(zhuǎn)換成了一個(gè)圖更新事務(wù)序列,該序列將繼續(xù)被分發(fā)給線程池中的一個(gè)空閑線程,該線程將按照序列中的順序依次執(zhí)行其中的圖更新事務(wù)完成數(shù)據(jù)的加載。
由于線程池中的若干線程同時(shí)執(zhí)行圖更新事務(wù),待新建點(diǎn)的依賴(lài)點(diǎn)及其唯一性屬性和待新建邊的唯一性屬性就成為了線程間的臨界資源,線程需要以互斥的方式訪問(wèn)這些數(shù)據(jù),所以并行算法需要選擇一種協(xié)調(diào)線程運(yùn)行的機(jī)制保護(hù)這些臨界資源不被破壞。常用的機(jī)制包括互斥量等線程同步機(jī)制和線程通信機(jī)制。在并行加載過(guò)程中,臨界資源的使用有如下特點(diǎn):(1)同時(shí)訪問(wèn)臨界資源的線程在加載過(guò)程中是隨機(jī)出現(xiàn)的,事先無(wú)法判斷哪些線程會(huì)同時(shí)訪問(wèn)某個(gè)臨界資源;(2)線程在臨界區(qū)內(nèi)只對(duì)數(shù)據(jù)庫(kù)中某些數(shù)據(jù)的狀態(tài)進(jìn)行檢查,并不需要在線程間傳遞數(shù)據(jù)或者其他復(fù)雜操作,所以線程進(jìn)入臨界區(qū)內(nèi)的時(shí)間非常短;(3)所有臨界資源的數(shù)量都是1,并且線程對(duì)于臨界資源的訪問(wèn)是有序的。根據(jù)這些特點(diǎn)可知,臨界資源被同時(shí)訪問(wèn)的隨機(jī)性將增大線程間通信的復(fù)雜程度,而資源使用的單一性和短暫性將使線程通信的作用得不到真正的發(fā)揮;同時(shí),臨界資源的有序訪問(wèn)和數(shù)量的單一性避免了線程同步可能出現(xiàn)的死鎖風(fēng)險(xiǎn)。因此,文中采用線程同步中的互斥量實(shí)現(xiàn)加載算法的并行化。
并行加載算法在執(zhí)行接收到的圖更新事務(wù)序列中的每一個(gè)事務(wù)時(shí),若事務(wù)為新建點(diǎn)事務(wù),則首先調(diào)用圖4中所示算法建立該點(diǎn);若事務(wù)為新建邊事務(wù),則調(diào)用算法3建立該邊。其中,并行加載算法在執(zhí)行每一個(gè)圖更新事務(wù)序列時(shí),創(chuàng)建兩個(gè)互斥量列表MList1和MList2,其中MList1中的互斥量用來(lái)同步多個(gè)線程以互斥的方式訪問(wèn)數(shù)據(jù)庫(kù)中的點(diǎn),MList2中的互斥量用來(lái)同步多個(gè)線程對(duì)某個(gè)唯一性屬性的互斥訪問(wèn)。同時(shí),由于MList1和MList2本身也是臨界資源,所以并行加載算法還需要?jiǎng)?chuàng)建兩個(gè)互斥量M1和M2來(lái)確保對(duì)MList1和MList2的修改是互斥的。除此之外,并行加載算法還創(chuàng)建 nodeList記錄當(dāng)前已成功建立的點(diǎn),從而在之后執(zhí)行新建邊事務(wù)時(shí)仍然可以找到這些點(diǎn)。
圖4所示算法首先檢查待建立點(diǎn)的依賴(lài)關(guān)系及唯一性是否符合模態(tài)結(jié)構(gòu)圖的定義,如果滿足則在圖數(shù)據(jù)庫(kù)中建立該點(diǎn)。首先檢查待創(chuàng)建點(diǎn)依賴(lài)關(guān)系是否正確,若全部依賴(lài)點(diǎn)的依賴(lài)關(guān)系和“依賴(lài)唯一”的屬性都滿足模態(tài)結(jié)構(gòu)的定義,則開(kāi)始在圖數(shù)據(jù)庫(kù)中建立該點(diǎn)。其中,為了檢查和確保待建立點(diǎn)的依賴(lài)關(guān)系正確,需要對(duì)待建立點(diǎn)的依賴(lài)點(diǎn)對(duì)應(yīng)的互斥量進(jìn)行加鎖,圖4中自t.Dep賦值開(kāi)始的全部流程均處于或可能處于依賴(lài)點(diǎn)對(duì)應(yīng)互斥量加鎖的范圍內(nèi);為了確保點(diǎn)的全局唯一屬性的全局唯一性,同樣需要對(duì)全局唯一性屬性對(duì)應(yīng)的互斥量進(jìn)行加鎖,圖中name為空分支的全部流程除了可能處于依賴(lài)點(diǎn)對(duì)應(yīng)互斥量加鎖的范圍外,還有可能處于全局唯一性屬性對(duì)應(yīng)互斥量的加鎖范圍內(nèi)。name為空的流程中的 “依賴(lài)邊”不存儲(chǔ)具體數(shù)據(jù),只用來(lái)表示依賴(lài)關(guān)系,其他流程正是利用“依賴(lài)邊”完成了對(duì)依賴(lài)關(guān)系的檢查。
圖4 新建點(diǎn)算法流程圖Fig.4 Flowchart of new node creation algorithm
算法3CreateEdge
輸入:新建邊事務(wù)T, 已建立點(diǎn)列表nodeList,點(diǎn)鎖列表MList1
(1) beginID = nodeList[T. BegM.Name]
(2) endID = nodeList[T.EndM.Name]
(3) if (beginID和endID均存在)
(4) 對(duì)MList1[beginID]加鎖
(5) 對(duì)MList1[endID]加鎖
(6) if (T.Type為單邊)
(7) if (ID為beginID和ID為endID的點(diǎn)之間不存在名稱(chēng)為T(mén).Name的邊)
(8) 建立T.Name的邊
(9) else
(10) if (ID為beginID和ID為endID的點(diǎn)之間不存在Uni為T(mén).Uni的邊)
(11) 建立T.Name的邊
(12) 對(duì)MList1[beginID]解鎖
(13) 對(duì)MList1[endID]解鎖
算法3根據(jù)邊的類(lèi)型采取不同策略完成兩點(diǎn)間邊的建立。其中,步驟(1—2)從nodeList中獲取當(dāng)前邊需要連接的起點(diǎn)和終點(diǎn)的ID;步驟(3)判斷起點(diǎn)和終點(diǎn)是否存在,若存在,步驟(4—8)建立當(dāng)前邊,其中,步驟(4—5)首先鎖定這兩個(gè)點(diǎn)對(duì)應(yīng)的互斥量,然后步驟(6)判斷邊的類(lèi)型,若為單邊,則(7)檢查兩點(diǎn)間是否已存在當(dāng)前類(lèi)型的邊,已存在則不再建立當(dāng)前邊,否則步驟(8)建立當(dāng)前邊;若為重邊,則步驟(10)檢查兩點(diǎn)間是否已存在相同唯一性屬性的邊,若已存在,同樣不再建立當(dāng)前邊。
圖5 生成用于加載的數(shù)據(jù)文件序列 Fig.5 Generation of data files sequence for loading
為了評(píng)估模態(tài)結(jié)構(gòu)圖在具體建模過(guò)程中的合理性、并行加載算法的正確性和執(zhí)行效率,本文使用真實(shí)腦部CT的DICOM文件進(jìn)行建模和加載實(shí)驗(yàn)。DICOM文件除了包括CT圖像、成像參數(shù)、醫(yī)院和患者信息的社會(huì)特征,部分文件還包含有診斷數(shù)據(jù)。DICOM文件涵蓋了醫(yī)學(xué)數(shù)據(jù)中較有代表性的多個(gè)模態(tài),所以使用其進(jìn)行實(shí)驗(yàn)具有一定的說(shuō)服力。實(shí)驗(yàn)環(huán)境:操作系統(tǒng)版本OS X EI Capitan 10.11.4;內(nèi)存16 GB;處理器2.2 GHz Intel Core i7,物理四核,虛擬八核。
在5個(gè)數(shù)據(jù)集和5個(gè)線程池上分別執(zhí)行并行加載算法。圖6給出了圖數(shù)據(jù)庫(kù)中存儲(chǔ)的部分?jǐn)?shù)據(jù)的可視化顯示結(jié)果。由圖6可知,加載算法按照模態(tài)結(jié)構(gòu)圖正確地完成了數(shù)據(jù)的加載,主要體現(xiàn)為圖數(shù)據(jù)庫(kù)中的點(diǎn)和邊上的屬性均按照模態(tài)結(jié)構(gòu)圖中的定義被正確地從數(shù)據(jù)文件中提取,不同模態(tài)對(duì)應(yīng)的點(diǎn)也被對(duì)應(yīng)的邊正確連接,不同模態(tài)間的依賴(lài)關(guān)系也符合模態(tài)結(jié)構(gòu)圖中的規(guī)定。
表1給出了算法的執(zhí)行時(shí)間。圖7給出了算法運(yùn)行時(shí)間隨著數(shù)據(jù)集大小和線程個(gè)數(shù)變化的變化趨勢(shì)。從表1可以看出,當(dāng)線程數(shù)量增大,算法的運(yùn)行時(shí)間不斷下降,但隨著線程數(shù)量越來(lái)越大,運(yùn)行時(shí)間的下降幅度變得越來(lái)越不明顯,甚至當(dāng)線程數(shù)量從8線程變?yōu)?6線程時(shí),運(yùn)行時(shí)間反而有所增加。這是由于硬件環(huán)境能夠提供的同時(shí)運(yùn)行的線程數(shù)是一定的,當(dāng)線程數(shù)增大時(shí),并行帶來(lái)的系統(tǒng)開(kāi)銷(xiāo)也在不斷增加,所以算法運(yùn)行時(shí)間的減少幅度隨著線程數(shù)的增加會(huì)趨于不顯著,當(dāng)線程數(shù)超過(guò)了硬件環(huán)境能夠提供的最大并行線程數(shù)時(shí),系統(tǒng)開(kāi)銷(xiāo)的增長(zhǎng)幅度超過(guò)了算法運(yùn)行時(shí)間的減少幅度,導(dǎo)致了運(yùn)行時(shí)間不降反升。從圖7可以看出,當(dāng)線程數(shù)較少時(shí),隨著數(shù)據(jù)集逐漸增大,算法運(yùn)行時(shí)間的增長(zhǎng)速度在加快。這是由于數(shù)據(jù)集越大,需要維護(hù)的互斥量就越多,遍歷尋找某個(gè)互斥量所需要的時(shí)間就越長(zhǎng),由此增加的運(yùn)行時(shí)間比較顯著;當(dāng)線程數(shù)較多時(shí),隨著數(shù)據(jù)集的增大,雖然每個(gè)線程尋找指定互斥量的時(shí)間依然在增加,但多線程的并行執(zhí)行在一定程度上抵消了由此增加的運(yùn)行時(shí)間。
圖8給出了對(duì)批量DICOM文件進(jìn)行順序加載和隨機(jī)加載的運(yùn)行時(shí)間差值的變化趨勢(shì)。從實(shí)驗(yàn)結(jié)果可以看到,隨著數(shù)據(jù)集的增大,隨機(jī)加載相比順序加載減少的運(yùn)行時(shí)間呈增長(zhǎng)趨勢(shì),但是增長(zhǎng)逐漸趨于平緩且在數(shù)據(jù)集大小為520個(gè)文件后,不再繼續(xù)增長(zhǎng)。原因是當(dāng)數(shù)據(jù)集較小時(shí),其中的大部分DICOM文件都來(lái)自同一個(gè)患者的腦部切片序列,不論是順序加載還是隨機(jī)加載,線程間對(duì)互斥量的競(jìng)爭(zhēng)仍然非常頻繁;當(dāng)數(shù)據(jù)集增大后,由于數(shù)據(jù)集中的DICOM文件屬于多個(gè)患者,這時(shí)隨機(jī)加載就降低了不同線程在同一時(shí)刻需要鎖定同一個(gè)互斥量的概率,但當(dāng)數(shù)據(jù)集繼續(xù)增大,由于數(shù)據(jù)集中屬于每個(gè)患者的DICOM文件個(gè)數(shù)基本相同,所以這個(gè)概率將逐漸趨于穩(wěn)定。
由實(shí)驗(yàn)結(jié)果可知,當(dāng)選擇合適的線程數(shù)后,隨著數(shù)據(jù)集逐漸增大,算法運(yùn)行時(shí)間的增長(zhǎng)速度近似線性,同時(shí)結(jié)合算法的優(yōu)化策略和算法加載不同大小數(shù)據(jù)集所消耗的絕對(duì)時(shí)長(zhǎng),可知該算法能夠在較短時(shí)間內(nèi)完成批量多模態(tài)醫(yī)學(xué)數(shù)據(jù)的建模和加載。
圖6 圖數(shù)據(jù)的可視化
Fig.6 Visualization of graph data
表1算法的執(zhí)行時(shí)間
圖8 算法優(yōu)化前后運(yùn)行時(shí)間差值的變化趨勢(shì)
Fig.8 Trend of running time difference before and after optimization
本文基于醫(yī)學(xué)數(shù)據(jù)中數(shù)據(jù)類(lèi)型的多樣性,分析了醫(yī)學(xué)數(shù)據(jù)的多模態(tài)特性,同時(shí)針對(duì)該特性,分析了模態(tài)融合對(duì)于數(shù)據(jù)的表示和存儲(chǔ)的重要意義。為了實(shí)現(xiàn)數(shù)據(jù)表示和存儲(chǔ)階段的模態(tài)融合,通過(guò)對(duì)比現(xiàn)有技術(shù),提出了使用圖數(shù)據(jù)庫(kù)表示和存儲(chǔ)醫(yī)學(xué)數(shù)據(jù),同時(shí)為了解決圖數(shù)據(jù)庫(kù)缺乏元數(shù)據(jù)的缺陷,又提出了一種新的數(shù)據(jù)模型,即模態(tài)結(jié)構(gòu)圖,用于多模態(tài)醫(yī)學(xué)數(shù)據(jù)的建模和表示。該模型以點(diǎn)和邊表示數(shù)據(jù)中的不同模態(tài)及其相互關(guān)系,為圖數(shù)據(jù)庫(kù)提供了關(guān)于所存儲(chǔ)數(shù)據(jù)的元數(shù)據(jù),同時(shí)也提供了一種圖結(jié)構(gòu)的模態(tài)融合方案?;诖四P?,提出了一種并行加載算法,該算法以并行的方式抽取出分屬不同模態(tài)和模態(tài)間關(guān)系的數(shù)據(jù)并存儲(chǔ)至圖數(shù)據(jù)庫(kù)中。實(shí)驗(yàn)結(jié)果表明,并行加載算法能夠保證數(shù)據(jù)按照模態(tài)結(jié)構(gòu)圖的定義正確建模并具有較好的數(shù)據(jù)處理效率。下一步將主要研究如何利用圖數(shù)據(jù)庫(kù)中的多模態(tài)數(shù)據(jù)和模態(tài)結(jié)構(gòu)圖構(gòu)建索引結(jié)構(gòu)進(jìn)而實(shí)現(xiàn)多模態(tài)、跨模態(tài)的信息檢索以及如何在模態(tài)融合后的數(shù)據(jù)中進(jìn)行數(shù)據(jù)挖掘。