翟增林 王天一
(貴州大學(xué)大數(shù)據(jù)與信息工程學(xué)院 貴陽(yáng) 550025)
近年來(lái)隨著人工智能的快速發(fā)展,深度學(xué)習(xí)已經(jīng)在疾病診斷領(lǐng)域取得較好的成果,然而深度學(xué)習(xí)以數(shù)據(jù)為驅(qū)動(dòng),其自動(dòng)特征提取的方法雖然提高了效率,但往往缺乏專家經(jīng)驗(yàn)和知識(shí),無(wú)法發(fā)掘疾病與癥狀間隱含的關(guān)聯(lián)關(guān)系。而知識(shí)圖譜技術(shù)能夠以結(jié)構(gòu)化的形式表示人類知識(shí),通過知識(shí)表示和知識(shí)推理技術(shù),可以給人工智能系統(tǒng)提供可處理的先驗(yàn)知識(shí)[3]。因此,可以利用知識(shí)圖譜中潛在的信息指導(dǎo)神經(jīng)網(wǎng)絡(luò)模型的學(xué)習(xí),模擬羊病專家的診斷過程,實(shí)現(xiàn)對(duì)羊主要疾病的診斷。
基于以上研究現(xiàn)狀,本文提出融合知識(shí)圖譜與深度學(xué)習(xí)的羊病診斷方法。首先根據(jù)羊病專家知識(shí)構(gòu)建知識(shí)圖譜,再利用圖神經(jīng)網(wǎng)絡(luò)融合知識(shí)圖譜信息將癥狀描述文本轉(zhuǎn)化為詞向量,最后使用LSTM 學(xué)習(xí)癥狀描述文本的單個(gè)漢字特征,強(qiáng)化模型文本語(yǔ)義表示能力。實(shí)驗(yàn)表明本文通過羊病知識(shí)圖譜嵌入為L(zhǎng)STM 提供先驗(yàn)知識(shí),使得模型在訓(xùn)練時(shí)能夠更全面的學(xué)習(xí)癥狀文本特征,從而提升診斷效果,并能夠?qū)崿F(xiàn)羊病的初步診斷。
知識(shí)圖譜(Knowledge Graph,KG)通過“實(shí)體-關(guān)系-實(shí)體”三元組信息表示現(xiàn)實(shí)世界中的抽象概念,實(shí)體之間通過關(guān)系相互連接構(gòu)成網(wǎng)狀結(jié)構(gòu),通過三元組的形式可將物理世界中的每一條知識(shí)描述為KG=
領(lǐng)域知識(shí)圖譜可以解決特定領(lǐng)域的知識(shí)推理問題。針對(duì)羊病領(lǐng)域沒有開源知識(shí)圖譜的問題,本文首先通過爬蟲爬取羊養(yǎng)殖百科、論壇等網(wǎng)站中羊病領(lǐng)域的相關(guān)數(shù)據(jù)。針對(duì)養(yǎng)殖百科中的結(jié)構(gòu)化數(shù)據(jù),通過設(shè)計(jì)關(guān)系抽取模板將結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為三元組的形式;對(duì)于從論壇中獲取到的非結(jié)構(gòu)化數(shù)據(jù),通過中文分詞工具jieba[8],中文命名實(shí)體識(shí)別工具LTP[9]和中文知識(shí)圖譜關(guān)系抽取工具DeepKE從非結(jié)構(gòu)化文本中自動(dòng)抽取三元組知識(shí)。
經(jīng)過以上處理共得到3854 組三元組信息,其中包含2626 個(gè)節(jié)點(diǎn),涉及疾病-癥狀、疾病-病因、疾病-別稱、疾病-含義、疾病-治療等12種關(guān)系,部分三元組表示結(jié)果如表1 所示,最后將所有三元組信息存入neo4j圖數(shù)據(jù)庫(kù)中,得到羊病知識(shí)圖譜,部分知識(shí)圖譜可視化結(jié)果如圖1所示。
對(duì)兩組臨床相關(guān)指標(biāo)(手術(shù)時(shí)間、術(shù)中出血量、骨愈合時(shí)間、髖關(guān)節(jié)功能Harris評(píng)分、住院時(shí)間)、骨折復(fù)位丟失率、并發(fā)癥發(fā)生率實(shí)行觀察和記錄。
表1 部分三元組表示
圖1 知識(shí)圖譜可視化結(jié)果
融合知識(shí)圖譜與深度學(xué)習(xí)的羊病診斷模型主要由癥狀文本處理模塊、羊病知識(shí)圖譜嵌入模塊、長(zhǎng)短期記憶網(wǎng)絡(luò)(Long Short Term Memory,LSTM)特征提取模塊和輸出模塊四部分組成,其模型結(jié)構(gòu)如圖2 所示。其中,癥狀文本處理模塊包括Word2vec 字級(jí)別編碼和癥狀文本詞特征編碼,羊病知識(shí)圖譜嵌入模塊包括羊病知識(shí)圖譜特征提取與融合的GCN(Graph convolution neural network,GCN)編碼模塊,雙向LSTM 模塊提取Word2vec 編碼后的癥狀字特征,單向LSTM 提取GCN 編碼后的癥狀詞與羊病知識(shí)圖譜融合特征,最后將兩部分特征進(jìn)行拼接,使用Softmax 分類器計(jì)算診斷結(jié)果的概率分布,完成基于癥狀的疾病診斷。
圖2 融合知識(shí)圖譜與深度學(xué)習(xí)的羊病診斷模型
癥狀是描述病羊因患有某種疾病而表現(xiàn)出的異常狀態(tài),這些狀態(tài)容易被飼養(yǎng)人員觀察到并以文本的形式記錄。為了從多個(gè)維度學(xué)習(xí)這些文本的特征,本文分別從字與詞兩個(gè)角度出發(fā),對(duì)于疾病癥狀文本當(dāng)中的單個(gè)漢字,使用Word2vec 的Skip-gram 模型[10],將漢字表示成連續(xù)稠密的字向量,通過這種方式得到的字向量能夠蘊(yùn)含文本中各個(gè)漢字之間的語(yǔ)義關(guān)系。對(duì)于疾病癥狀文本中的詞,它與羊病知識(shí)圖譜當(dāng)中的節(jié)點(diǎn)相同,因此可以與知識(shí)圖譜中圖結(jié)構(gòu)特征進(jìn)行融合,通過設(shè)計(jì)字表,將詞語(yǔ)中出現(xiàn)該漢字的位置標(biāo)標(biāo)記1,未出現(xiàn)該漢字的位置標(biāo)記為0,得到疾節(jié)點(diǎn)特征矩陣,可以作為GCN 的輸入,假設(shè)字表為Ω={發(fā),腹,口,瀉,瘡,熱},則“發(fā)熱”可以表示為{1,0,0,0,0,1}。
圖神經(jīng)網(wǎng)絡(luò)(Graph Neural Network,GNN)由戈里(Gori)等[11]提出,是一種處理圖結(jié)構(gòu)數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)模型,而知識(shí)圖譜本身就是一種圖結(jié)構(gòu)數(shù)據(jù),因此可以采用圖構(gòu)建知識(shí)和數(shù)據(jù)之間的關(guān)聯(lián)。圖卷積神經(jīng)網(wǎng)絡(luò)[12]是卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)在非歐式空間的一種拓展[13],它能很好地對(duì)知識(shí)圖譜中圖結(jié)構(gòu)信息進(jìn)行融合,通過加入GCN 可以增加模型對(duì)自然語(yǔ)言文本中詞語(yǔ)間關(guān)聯(lián)性的學(xué)習(xí)能力,提高特征向量的稠密度。本文利用GCN 編碼的功能,通過聚合羊病知識(shí)圖譜中疾病與癥狀之間的節(jié)點(diǎn)特征與結(jié)構(gòu)特征信息,學(xué)習(xí)知識(shí)圖譜疾病與癥狀的節(jié)點(diǎn)嵌入表示。
圖神經(jīng)網(wǎng)絡(luò)的核心是消息傳遞,通過聚合鄰居節(jié)點(diǎn)的信息完成當(dāng)前節(jié)點(diǎn)特征的更新。例如在圖3所示的疾病-癥狀子圖中,疾病Xi作為中心節(jié)點(diǎn),其特征通過聚合周圍一階鄰居節(jié)點(diǎn)特征即癥狀的特征進(jìn)行更新。
圖3 疾病-癥狀子圖
其中,Aij表示消息傳遞系數(shù),可由鄰接矩陣得到,Xj表示癥狀的特征,通過節(jié)點(diǎn)特征矩陣得到。節(jié)點(diǎn)的更新不僅要考慮鄰居節(jié)點(diǎn)的特征,還需要考慮自身的特征,可以通過自身特征矩陣與一個(gè)單位矩陣相加,實(shí)現(xiàn)自連接的作用,將自身特征添加進(jìn)來(lái)。
其中,?表示帶有自連接的鄰接矩陣。在實(shí)際情況中,節(jié)點(diǎn)間關(guān)系連接的數(shù)量并不相同,因此需要根據(jù)不同節(jié)點(diǎn)與其他節(jié)點(diǎn)連接的密切程度設(shè)定不同的權(quán)重來(lái)限制每一個(gè)節(jié)點(diǎn)信息傳輸。GCN 巧妙的利用度矩陣解決了這個(gè)問題,通過自連接度矩陣對(duì)帶有自連接的鄰接矩陣?進(jìn)行特征歸一化后再進(jìn)行消息聚合。
通過這種方式得到的節(jié)點(diǎn)特征能夠根據(jù)鄰居節(jié)點(diǎn)的數(shù)量進(jìn)行有選擇的特征提取。將單次次節(jié)點(diǎn)聚合后與權(quán)重矩陣W相乘,再經(jīng)過一個(gè)非線性激活函數(shù)Sigmoid,得到下一層的節(jié)點(diǎn)特征。
通過GCN 可以得到聚合了知識(shí)圖譜中圖特征信息的疾病癥狀節(jié)點(diǎn)表示。
LSTM是一種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)[14],它可以選擇性的保留或遺忘某些輸入信息,防止模型訓(xùn)練時(shí)可能產(chǎn)生的梯度消失的問題,獲得更長(zhǎng)的記憶。對(duì)于羊病診斷問題,LSTM 可以按照時(shí)間先后順序記住用戶輸入的癥狀,之后通過神經(jīng)網(wǎng)絡(luò)的訓(xùn)練賦予每種癥狀不同的權(quán)重,從而完成羊病診斷。LSTM單元結(jié)構(gòu)圖如圖4所示。
圖4 LSTM單元結(jié)構(gòu)圖
LSTM 單元包括輸入門、輸出門和遺忘門三個(gè)主要部分。輸入門會(huì)根據(jù)上一時(shí)刻LSTM 的隱藏狀態(tài)ht-1和當(dāng)前時(shí)刻的輸入xt,通過學(xué)習(xí)參數(shù)矩陣Wi計(jì)算來(lái)決定有多少信息更新到細(xì)胞狀態(tài)Ct中。
對(duì)于候選信息,可以通過將上一時(shí)刻LSTM的隱藏狀態(tài)ht-1和當(dāng)前時(shí)刻的輸入xt進(jìn)行拼接后再與可學(xué)習(xí)的參數(shù)矩陣Wc相乘,最后經(jīng)過非線性激活函數(shù)tanh 后得到。
遺忘門控制上一層細(xì)胞狀態(tài)Ct-1中的需要丟棄的信息。其輸出結(jié)果ft與上一時(shí)刻LSTM 的隱藏狀態(tài)ht-1和當(dāng)前輸入xt有關(guān),通過學(xué)習(xí)參數(shù)矩陣Wf來(lái)決定需要保留和舍棄的信息。
經(jīng)過上述過程的計(jì)算,LSTM 單元既能夠通過輸入門向細(xì)胞狀態(tài)Ct-1中添加新的信息,又能利用遺忘門取出過往信息中心不重要的部分,完成細(xì)胞狀態(tài)Ct的更新。
輸出門用于輸出當(dāng)前細(xì)胞狀態(tài)Ct有多少作為當(dāng)前輸出,通過可學(xué)習(xí)的矩陣Wo,計(jì)算出輸出門ot控制細(xì)胞狀態(tài)的輸出。
最后,隱藏狀態(tài)ht可表述為
雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(Bi-directional Long Short-Term Memory,Bi-LSTM)[15]是LSTM 的擴(kuò)展,其結(jié)構(gòu)如圖5 所示,它不僅能捕獲文本序列的正向信息,也可以學(xué)習(xí)反向信息。例如對(duì)于輸入文本“共濟(jì)失調(diào)”,正向網(wǎng)絡(luò)LSTML會(huì)依次輸入“共”,“濟(jì)”,“失”,“調(diào)”得到四個(gè)狀態(tài)向量{hL0,hL1,hL2,hL3},而反向網(wǎng)絡(luò)LSTMR會(huì)依次輸入“調(diào)”,“失”,“濟(jì)”,“共”得到四個(gè)狀態(tài)向量{hR0,hR1,hR2,hR3}。最后將兩部分狀態(tài)向量進(jìn)行拼接得到習(xí)得上下文癥狀的字特征{[hL0,hR3],[hL1,hR2],[hL2,hR1],[hL3,hR0]}。
圖5 Bi-LSTM結(jié)構(gòu)圖
該模塊的任務(wù)是輸出每條癥狀文本最有可能對(duì)應(yīng)的K種疾病,并給出每種疾病出現(xiàn)的概率。將LSTM特征提取模塊得到的癥狀文本特征與知識(shí)圖譜特征進(jìn)行拼接后,再經(jīng)過線性變換并輸入到激活函數(shù)ReLU 中得到特征表示。
式中o1,o2表示由特征提取模塊得到的向量,W表示維度為d×c的權(quán)重矩陣,d為o1,o2拼接后的特征維度,c為疾病的總數(shù)。最后使用Softmax預(yù)測(cè)每種癥狀的概率,并對(duì)結(jié)果做歸一化處理。
羊病診斷的關(guān)鍵點(diǎn)在于從具體癥狀到疾病的推理,本文首先利用neo4j 提供的Cypher 查詢語(yǔ)句提取羊病知識(shí)圖中所有頭尾實(shí)體分別為疾病與癥狀的三元組數(shù)據(jù),構(gòu)成由152 種疾病和861 種癥狀組成的疾病-癥狀子圖,再根據(jù)子圖中每種疾病連接的癥狀,使用python編程語(yǔ)言編寫代碼生成癥狀文本數(shù)據(jù)。本文假設(shè)羊只不會(huì)同時(shí)患有多種疾病,數(shù)據(jù)集實(shí)現(xiàn)步驟如下:
Step1.通過Cypher查詢語(yǔ)句獲得疾病-癥狀子圖KGsub=
Step2.分別提取152種疾病及其相連的所有癥狀,構(gòu)成152 個(gè)集合Qi={hi,t1,t2,…,tk},再對(duì)集合中的癥狀t按照個(gè)數(shù)為1~5,比例為1∶3∶3∶2∶1進(jìn)行100 次隨機(jī)采樣,模擬真實(shí)情況下羊只可觀測(cè)到的癥狀的數(shù)量。
Step3. 將采樣得到的癥狀信息與疾病進(jìn)行組合得到訓(xùn)練所需的文本數(shù)據(jù),并去除重復(fù)的數(shù)據(jù)。
通過上述處理,最終得到11724 組癥狀疾病數(shù)據(jù),并按照7∶1∶2 劃分訓(xùn)練集、驗(yàn)證集、測(cè)試集。部分樣本數(shù)據(jù)如表2 所示:癥狀為0 表示采樣得到的癥狀數(shù)量不足5個(gè)時(shí)用0填充。
表2 部分樣本數(shù)據(jù)展示
實(shí)驗(yàn)所用的硬件配置為:AMD(R)Ry?zen5-5600X CPU@3.70 GHz,32 GB 內(nèi)存,GPU 為NVIDIA(R)GeForce RTX 3060Ti;實(shí)驗(yàn)所用軟件環(huán)境 為 Windows10 操 作 系 統(tǒng),Python3.8,Py?torch1.10.0,Cuda11.3。
本次實(shí)驗(yàn)采用TopK 推薦常用指標(biāo)精確率(Precisiond@K)和召回率(Recalld@K)來(lái)衡量模型的性能,計(jì)算公式分別如下。
其中predsd是模型預(yù)測(cè)的疾病列表,posd為癥狀文本記錄中各癥狀在羊病知識(shí)圖譜中相鄰疾病節(jié)點(diǎn)所構(gòu)成集合的交集,negd表示癥狀文本記錄中各癥狀在羊病知識(shí)圖譜中相鄰疾病節(jié)點(diǎn)所構(gòu)成集合的并集再減去posd得到的集合。精確率也叫查準(zhǔn)率,即讓模型的預(yù)測(cè)結(jié)果盡可能不出錯(cuò)的概率,可以作為Top1 推薦的指標(biāo)來(lái)判斷模型的好壞。召回率也叫查全率,高召回率意味著模型會(huì)盡力找到每一個(gè)可能被找到的對(duì)象,在羊病診斷中可以作為評(píng)價(jià)診斷廣度的指標(biāo)。
為了分析加入知識(shí)圖譜特征對(duì)神經(jīng)網(wǎng)絡(luò)的影響,本文分別與自然語(yǔ)言處理中常用的遞歸神經(jīng)網(wǎng)絡(luò)DeepRNN[16]、LSTM 與Bi-LSTM 進(jìn)行對(duì)比,計(jì)算四種模型在測(cè)試集中Top1,Top2,Top3 精確率與召回率,實(shí)驗(yàn)結(jié)果如表3 所示??梢钥闯?,本文的方法通過將文本特征和知識(shí)圖譜特征進(jìn)行融合后得到的各項(xiàng)評(píng)價(jià)指標(biāo)均優(yōu)于其他模型的結(jié)果,表明該方法能夠在羊只疾病診斷中取得不錯(cuò)的效果。
表3 四種方法對(duì)比結(jié)果
此外,本文分別對(duì)測(cè)試集中不同癥狀數(shù)量的文本信息預(yù)測(cè)出的結(jié)果進(jìn)行Top1,Top3,Top5 的精確率與召回率的計(jì)算,實(shí)驗(yàn)結(jié)果如表4 所示。對(duì)于羊病診斷問題,隨著輸入癥狀數(shù)量的增加,其Top1 診斷精確率也會(huì)增加。
表4 不同癥狀數(shù)量測(cè)試結(jié)果
在實(shí)際生產(chǎn)實(shí)踐中,本文所提出的模型能夠在給出3 個(gè)以上癥狀時(shí)的Top1 精確率接近100%,由于本文假設(shè)羊只不會(huì)同時(shí)患有多種疾病,即羊只可確診患有某種疾病。當(dāng)輸入癥狀只有1 個(gè)時(shí),本文模型雖然不能準(zhǔn)確地預(yù)測(cè)羊只所患疾病,但較高的召回率仍可以給養(yǎng)殖人員提供候選疾病以及每種疾病可能出現(xiàn)的概率。輸入癥狀小于3 個(gè)時(shí)使用Top3 推薦,輸入癥狀大于等于3 個(gè)時(shí)采用Top1 推薦,部分診斷結(jié)果如表5所示。
表5 部分診斷結(jié)果
本文提出了一種融合羊病知識(shí)圖譜和癥狀文本特征的羊病診斷模型,首先根據(jù)專家知識(shí)構(gòu)建羊病知識(shí)圖譜,使用GCN 聚合知識(shí)圖譜與癥狀描述文本的詞語(yǔ)特征,提高了模型獲取高層文本特征的能力。然后使用LSTM 學(xué)習(xí)癥狀描述文本的單個(gè)漢字特征,強(qiáng)化了模型文本語(yǔ)義表示能力,提高對(duì)不同類型疾病的診斷準(zhǔn)確率。該模型與其他僅基于文本特征的診斷模型相比,在精確率與召回率上均有的提升,在輸入癥狀不足的情況下也有較好的召回率。本文所提出模型能夠根據(jù)癥狀有效判斷出羊只可能患有的疾病及其概率,有助于減少因羊患病造成的經(jīng)濟(jì)損失。