杜永興 牛麗靜 秦 嶺 李寶山
(內(nèi)蒙古科技大學(xué)信息工程學(xué)院 內(nèi)蒙古 包頭 014010)
計(jì)算文本相似度是研究疾病智能診斷的一種重要的方法。目前VSM空間向量模型和TF-IDF方法提取關(guān)鍵詞技術(shù)廣泛應(yīng)用在人病智能導(dǎo)醫(yī)系統(tǒng)中。林予松等[1]采取了用戶關(guān)注度來(lái)計(jì)算癥狀的權(quán)重,設(shè)計(jì)了人工智能導(dǎo)醫(yī)系統(tǒng)。徐奕楓等[2]提出基于疾病類(lèi)間分布的癥狀權(quán)重改進(jìn)算法,改善了傳統(tǒng)TF-IDF算法提取疾病的效果,取得了不錯(cuò)的成績(jī)。Teshnehlab等[3]首先通過(guò)主成分分析減少特征,然后使用基于深度神經(jīng)網(wǎng)絡(luò)算法對(duì)結(jié)腸癌分類(lèi),其分類(lèi)準(zhǔn)確度為0.6。Cheng[4]通過(guò)物聯(lián)網(wǎng)和人工智能自動(dòng)化設(shè)計(jì)一個(gè)可以及時(shí)解決動(dòng)物園里的動(dòng)物身體出現(xiàn)異常情況的系統(tǒng),幫助動(dòng)物管理員更系統(tǒng)地管理照顧動(dòng)物。以上系統(tǒng)的設(shè)計(jì)都有著顯著的成果,但它們需要用戶在系統(tǒng)中選擇相應(yīng)的癥狀,不能實(shí)現(xiàn)對(duì)用戶所輸入的文本內(nèi)容進(jìn)行理解。在設(shè)計(jì)中實(shí)現(xiàn)理解用戶輸入內(nèi)容的復(fù)雜度遠(yuǎn)高于直接選擇癥狀。在對(duì)用戶描述進(jìn)行關(guān)鍵詞提取時(shí),用傳統(tǒng)的TF-IDF算法在疾病的關(guān)鍵詞提取中并未考慮到提取的權(quán)重比較高的關(guān)鍵詞是否能合理地表示某種疾病。
針對(duì)上述問(wèn)題,本文提出改進(jìn)的TF-IDF算法,并將該算法應(yīng)用在牛的疾病診斷系統(tǒng)中。首先用已有的方法對(duì)用戶的輸入的文本內(nèi)容進(jìn)行分詞、提取關(guān)鍵癥狀詞。然后采用向量空間模型VSM將提取的關(guān)鍵詞用向量的形式表示,用余弦定理計(jì)算用戶輸入的關(guān)鍵詞向量和已有的疾病關(guān)鍵詞向量的值作為疾病的相似度。最后進(jìn)行可信度的計(jì)算,推斷出牛所患的疾病。應(yīng)用該算法提取的關(guān)鍵癥狀詞可以比較合理地表示疾病的癥狀,提高了系統(tǒng)的性能,使得該系統(tǒng)有效地實(shí)現(xiàn)了對(duì)牛所患疾病及時(shí)的診斷和治療,對(duì)牧戶在畜牧業(yè)的管理上也起到一定的指導(dǎo)和決策作用。
應(yīng)用Python框架和手工錄入方式獲取了451種關(guān)于牛的疾病,采用jieba分詞[5]和手工整理的方式對(duì)病因、癥狀、診斷、治療和預(yù)防等屬性拆分,并將其對(duì)應(yīng)的癥狀進(jìn)行規(guī)范化處理,構(gòu)造關(guān)鍵癥狀詞語(yǔ)料庫(kù)。
目前常用空間向量模型的方法來(lái)衡量?jī)蓚€(gè)文本之間的相似度[6]。向量空間模型(VSM)是把輸入的文本和已有的文本都轉(zhuǎn)換成向量的形式進(jìn)行計(jì)算,提高了文本內(nèi)容的計(jì)算性和可操作性,同時(shí)該模型也是目前應(yīng)用最為成熟和廣泛的模型之一[7-8]。
假設(shè)某用戶描述用D(Document)表示,首先運(yùn)用自然語(yǔ)言處理已有的技術(shù)對(duì)用戶的描述進(jìn)行分詞、去停用詞、計(jì)算權(quán)重、提取關(guān)鍵癥狀詞。特征項(xiàng)一般由癥狀關(guān)鍵詞組構(gòu)成,指在文檔中能反映用戶描述的基本語(yǔ)言單位,用T(Term)表示。用戶描述和關(guān)鍵癥狀特征可以使用集合表示為D(T1,T2,…,Tn),其中Tk是關(guān)鍵癥狀特征詞(1≤k≤n)。生成向量空間模型的流程如圖1所示。
圖1 生成向量空間模型的流程
利用空間向量模型將文本內(nèi)容轉(zhuǎn)換成向量可以這樣表示:對(duì)用戶輸入的文本m中的每個(gè)詞,用Wi,m表示m中第i個(gè)詞的權(quán)重,m=(W1,m,W2,m,…,Wt,m)表示用戶輸入文本m的詞權(quán)重向量;同理,用Wi,n表示已有文本n中第i個(gè)詞的權(quán)重,用n=(W1,n,W2,n,…,Wt,n)表示已有文本n的詞權(quán)重向量,然后通過(guò)余弦定理計(jì)算m和n之間的相似度值作為兩個(gè)文本之間的相似度[9-11]。其中癥狀權(quán)重W是根據(jù)TF-IDF原理計(jì)算出來(lái)。在本系統(tǒng)中m表示帶匹配的疾病,n表示用戶輸入的描述。相似度計(jì)算如下:
(1)
在利用VSM計(jì)算兩種疾病的相似性度時(shí),最重要的步驟是用TF-IDF算法計(jì)算關(guān)鍵癥狀詞的權(quán)重,提取關(guān)鍵詞[12-13]。TF-IDF算法的原理是TF×IDF,其中TF表示某個(gè)癥狀詞在文檔出現(xiàn)的頻率,計(jì)算中發(fā)現(xiàn)像“的”“了”等這些不重要的停用詞出現(xiàn)的次數(shù)比較高。為避免這種問(wèn)題,引入逆文檔頻率IDF。包含當(dāng)前詞的文檔個(gè)數(shù)越多,IDF的值越小,說(shuō)明該詞越不重要。其主要思想是如果某個(gè)特征項(xiàng)在一個(gè)文本中出現(xiàn)頻率很高,且在其他文本中出現(xiàn)很少,說(shuō)明此特征項(xiàng)具有很好的類(lèi)別區(qū)分能力,應(yīng)該給予較高的權(quán)重[14]。TF計(jì)算如下:
(2)
式中:Cin表示疾病特征詞i在n種描述中出現(xiàn)的次數(shù);Mn表示n種描述中總癥狀詞數(shù)。IDF計(jì)算如下:
(3)
式中:將每個(gè)描述看成一個(gè)文檔,N為文檔總數(shù);n為包含某項(xiàng)癥狀詞的文檔總數(shù)。TF-IDF計(jì)算公式如下:
TF-IDF=TF×IDF
(4)
將傳統(tǒng)的TF-IDF算法應(yīng)用在提取牛疾病的關(guān)鍵癥狀詞時(shí),發(fā)現(xiàn)“帶有”“比較”“基本”“而”等詞計(jì)算出來(lái)的權(quán)重很高。顯然這些詞作為疾病的關(guān)鍵癥狀是不合理的。分析原因如下:在計(jì)算某一種疾病的關(guān)鍵癥狀時(shí),將同一種疾病的不同種醫(yī)案描述作為不同的文檔來(lái)計(jì)算關(guān)鍵癥狀。此時(shí)的用戶描述除了停用詞出現(xiàn)的次數(shù)比較多之外,剩下的是癥狀描述,比如“精神倦息”“不反芻”等癥狀詞,雖然很重要但是由于在每個(gè)用戶描述中幾乎都有出現(xiàn),根據(jù)TF-IDF原理就把此類(lèi)經(jīng)常出現(xiàn)的癥狀詞當(dāng)成停用詞處理了。針對(duì)上述問(wèn)題,本文提出基于改進(jìn)的TF-IDF算法,可以有效解決這個(gè)問(wèn)題。改進(jìn)的TF-IDF計(jì)算式如下:
(5)
式中:Wij代表第j種疾病的i個(gè)癥狀。首先通過(guò)傳統(tǒng)的算法算出關(guān)鍵詞的權(quán)重,然后將提取的關(guān)鍵詞和牛疾病癥狀詞典進(jìn)行匹配。如果該詞在癥狀詞典中,則將該詞相應(yīng)的權(quán)重乘以10;如果該詞不在癥狀詞典中,保留其原始的權(quán)重不變。最后將關(guān)鍵詞的權(quán)重重新排序,選擇權(quán)重較高的前20個(gè)關(guān)鍵詞作為疾病的關(guān)鍵癥狀詞。使每種疾病的關(guān)鍵癥狀權(quán)重更具有代表性,實(shí)現(xiàn)了相同癥狀在不同疾病占有不同的權(quán)重,更適用于疾病診斷。
單純將相似度作為最后的結(jié)果返回給牧民是不夠準(zhǔn)確的。把可能度和相似度相結(jié)合作為疾病可信度計(jì)算結(jié)果,然后將可信度的結(jié)果按照從高到低的次序返回給牧民,增強(qiáng)結(jié)果的可靠性??赡芏鹊挠?jì)算使用的是不確定的推理,當(dāng)用戶輸入描述時(shí),將相應(yīng)的癥狀權(quán)重相加??赡芏鹊挠?jì)算如下:
kndj=W1jx1+W2jx2+…+Wijxn
(6)
式中:kndj代表患某種疾病的可能度。將選中的疾病索引到對(duì)應(yīng)的權(quán)重進(jìn)行加權(quán)求和,最后進(jìn)行可信度的計(jì)算如下:
CF=αkndj+βsim(m,n)α+β=1
(7)
式中:α取0.2,β取0.8進(jìn)行最后的可信度計(jì)算。
牛的疾病診斷系統(tǒng)主要運(yùn)用智能化方式輔助獸醫(yī)診斷。牧民在使用此系統(tǒng)時(shí),輸入相應(yīng)癥狀的文本內(nèi)容,系統(tǒng)首先會(huì)對(duì)輸入的文本內(nèi)容進(jìn)行理解,然后計(jì)算出輸入內(nèi)容與系統(tǒng)內(nèi)所有疾病的相似度,最后計(jì)算可信度。將查詢(xún)結(jié)果按照可信度從大到小的返回給牧民,并給出相應(yīng)的診療方案。牛疾病智能診療系統(tǒng)主要包括自然語(yǔ)言處理、疾病匹配處理、疾病可信度計(jì)算三個(gè)部分。具體系統(tǒng)設(shè)計(jì)流程如圖2所示。
圖2 牛的疾病診斷流程
實(shí)驗(yàn)的運(yùn)行環(huán)境為Windows XP操作系統(tǒng),CPU主頻3.7 GHz,內(nèi)存16 GB,數(shù)據(jù)庫(kù)Microsoft MySQL 2018,開(kāi)發(fā)工具為PyCharm 2018,編程語(yǔ)言為Python。實(shí)驗(yàn)數(shù)據(jù)采取隨機(jī)抽取30頭牛的病歷樣本進(jìn)行實(shí)驗(yàn)驗(yàn)證,且這些疾病獸醫(yī)已經(jīng)給出正確的診斷結(jié)果。
為驗(yàn)證改進(jìn)后的算法在牛疾病診療系統(tǒng)中的準(zhǔn)確率和可信度,本文采用基于傳統(tǒng)的空間向量模型的相似度算法和本文提出改進(jìn)的TF-IDF算法進(jìn)行對(duì)比實(shí)驗(yàn)。實(shí)驗(yàn)采用隨機(jī)抽取30頭牛的病歷樣本進(jìn)行實(shí)驗(yàn)驗(yàn)證,采用S@n(success atn) 方法進(jìn)行結(jié)果評(píng)測(cè)[15],其表示正確疾病推薦結(jié)果在前n個(gè)推薦結(jié)果中所占比重。
將實(shí)驗(yàn)數(shù)據(jù)采用S@n方法進(jìn)行結(jié)果評(píng)測(cè),兩種算法的對(duì)比結(jié)果如表1所示??梢钥闯?,當(dāng)n取1、2、3時(shí),本文算法的正確率明顯高于傳統(tǒng)算法。
表1 算法準(zhǔn)確率對(duì)比
通過(guò)上述計(jì)算相似度及可信度的方法,使用兩種算法對(duì)同一實(shí)驗(yàn)數(shù)據(jù)計(jì)算出相似度和可信度的對(duì)比如圖3和圖4所示。可以看出,改進(jìn)算法相似度和可信度較傳統(tǒng)算法都有提高,其中可信度平均提高約4個(gè)百分點(diǎn),說(shuō)明本文算法在牛疾病診斷中更具有可行性。
圖3 相似度結(jié)果對(duì)比圖
針對(duì)傳統(tǒng)TF-IDF算法提取關(guān)鍵詞不能合理地描述疾病的關(guān)鍵癥狀,本文提出一種改進(jìn)的TF-IDF算法提取關(guān)鍵癥狀詞并設(shè)計(jì)了牛疾病智能診斷系統(tǒng)。通過(guò)實(shí)驗(yàn)對(duì)比驗(yàn)證了該算法的有效性。該方法的不足是在提取關(guān)鍵癥狀詞時(shí)依賴(lài)疾病癥狀詞的語(yǔ)料庫(kù)。下一步研究將重點(diǎn)考慮在不依賴(lài)疾病癥狀詞語(yǔ)料庫(kù)的基礎(chǔ)上更加智能地實(shí)現(xiàn)疾病診斷。