黎鉦暉,鄭曉梅,劉迪
(南京中醫(yī)藥大學(xué)信息技術(shù)學(xué)院,江蘇 南京 210023)
疫病,即現(xiàn)代醫(yī)學(xué)中所說的流行病,而古代疫病則是古代傳染疾病的總稱,在人類的疾病斗爭史上曾留下濃墨重彩的一筆。對于各種自然史資料,古代疫病的文獻資料就是其中很重要的組成部分之一。
20世紀90年代以來,與以往通史性的、單一疫種流行史的研究不同,研究者不再局限于粗略的歷史考察,而是深入于某一地區(qū),對疫病流行的時空規(guī)律進行研究,或者將某次大疫置于自然和社會背景中進行考察,探討疫病暴發(fā)和流行的深層次原因。[1]同時,同種或者相似疫病的用藥也成為了研究的重點之一。對相似疫病的社會背景、時空和用藥規(guī)律進行深入研究,不僅可以找出古代疫病的核心藥物,也對現(xiàn)代醫(yī)學(xué)用藥配伍提供了重要的借鑒作用[2]。
現(xiàn)在越來越多的研究人員將數(shù)據(jù)挖掘方法運用到中藥方劑的挖掘中。這些研究包括藥物組合規(guī)律、癥狀組合規(guī)律等。然而中藥數(shù)據(jù)主要運用自然語言描述且經(jīng)歷各個歷史朝代變化和累計,導(dǎo)致挖掘面臨許多困難,歸結(jié)起來主要分3點。第一點:中藥方劑數(shù)據(jù)存在很多不規(guī)范的地方,如同種藥物有多種藥名。第二點:中藥方劑數(shù)據(jù)庫的數(shù)據(jù)量很大。第三點:中醫(yī)方劑數(shù)據(jù)中存在大量的冗余數(shù)據(jù)[3]。
核心藥物指的是在給定病癥x的前提下,對治療該病癥起重要作用的藥物。這類藥物一般在治療x病癥的方劑中使用較多,在其他方劑中使用較少[4]。核心藥物的發(fā)現(xiàn)不僅可以發(fā)現(xiàn)某種疫病的用藥規(guī)律,更為其他病癥的藥物配伍規(guī)律提供了參考和借鑒。
如今,中藥核心藥物的發(fā)現(xiàn)算法主要以基于效用度的挖掘算法為主,基于藥物效用度的核心藥物發(fā)現(xiàn)算法、基于帶藥對效用度的點式互信息(pointwise mutual information with herb pair ED,PMIED)的藥物組網(wǎng)算法、基于重疊社團的高效藥物配伍規(guī)律發(fā)現(xiàn)算法等。本次研究采用的是網(wǎng)頁排名研究中常用的PageRank算法與文章核心詞匯研究中常用的逆詞頻算法。前者易于發(fā)現(xiàn)不同藥物在同種疫病中相對于其他藥物的等級和重要性,后者易于發(fā)現(xiàn)不同藥物在某種疫病中相對所有疫病的特殊性,通過兩種算法的比較分析可以有效分析出某種疫病的常用和特殊藥物組合。
從挖掘單一關(guān)系到挖掘多關(guān)系,數(shù)據(jù)挖掘技術(shù)實現(xiàn)了研究方法的巨大飛躍。同樣,對于數(shù)據(jù)集合來說,數(shù)據(jù)容量更加龐大,存儲結(jié)構(gòu)更加復(fù)雜,數(shù)據(jù)種類也不再單一。[5]核心藥物的發(fā)現(xiàn)對于我們研究核心藥物與疫病影響因素的顯著性分析奠定了基礎(chǔ),多角度、多維度對數(shù)據(jù)進行挖掘有利于揭示更深層次的中藥規(guī)律。
收集《萬病回春》、《簡明醫(yī)彀》、《古今醫(yī)統(tǒng)大全》等古代醫(yī)書籍中提取和疫病有關(guān)的部分,將其分組歸類,對描述的方式進行歸一化、標準化,最終的數(shù)據(jù)庫中包含的年代、病名、地域、季節(jié)、環(huán)境、病因、病例數(shù)、年齡、體質(zhì)、性別、癥狀、證型、病機、治法、方劑、劑型、組成及劑量、用法、其他療法、療效。所有的字段都以古代疫病為基礎(chǔ)從醫(yī)書中找出的的相關(guān)影響因素。
(1)去除冗余數(shù)據(jù)。本次分析研究只針對古代疫病的方劑數(shù)據(jù)以及各種影響因素,從分析所需的規(guī)范數(shù)據(jù)考慮,去除古書中無關(guān)的數(shù)據(jù),如疫病的治療過程、方劑的配置過程、某種藥物的采集過程等等。
(2)數(shù)據(jù)規(guī)范化。因為書籍記錄并不是十分完整,所以我們需要對其進行規(guī)范化,將各種不同的專業(yè)描述統(tǒng)一為現(xiàn)代的描述方式,將殘缺的數(shù)據(jù)分類,少量殘缺可以用中值或平均值進行填補,大量的殘缺則從標準庫中刪除。
規(guī)范化后的數(shù)據(jù)只有疫病名稱、疫病來源、疫病的發(fā)生朝代、病因、疫病的方劑數(shù)據(jù)(詳細藥物信息,包括藥物名稱、用量)。
2.1.1 概述
PageRank算法是一種在研究網(wǎng)頁重要性排名中常用的算法。這種算法運用了傳統(tǒng)文獻引文的分析思想,提出了一個假設(shè),即網(wǎng)頁的重要性和質(zhì)量可以通過其他網(wǎng)頁對其超文本鏈接的數(shù)量來衡量。具體來說,假如網(wǎng)頁A有一個指向網(wǎng)頁B的鏈接,則意味著網(wǎng)頁A認為網(wǎng)頁B是重要的。假如有10個網(wǎng)頁指向網(wǎng)頁A,而指向網(wǎng)頁B的鏈接卻只有2個,則說明網(wǎng)頁A比網(wǎng)頁B更加重要[6]。
一個頁面的得票數(shù)由所有鏈向它的頁面的重要性來決定,到一個頁面的超鏈接相當于對該頁投一票。一個頁面的PageRank是由所有鏈向它的頁面(鏈入頁面)的重要性經(jīng)過遞歸算法得到的。一個有較多鏈入的頁面會有較高的等級,相反如果一個頁面沒有任何鏈入頁面,那么它沒有等級[7]。
PageRank的基本思想比較簡單,一個網(wǎng)頁的重要性由數(shù)量和質(zhì)量共同決定:
(1)數(shù)量:在網(wǎng)頁排名算法中,指向某一個頁面的網(wǎng)頁數(shù)量如果越多,則說明這個網(wǎng)頁越重要。
(2)質(zhì)量:網(wǎng)頁的權(quán)重也受到指向它的頁面的質(zhì)量的影響,一般而言一個網(wǎng)頁由越重要的網(wǎng)頁指向它,則說明該網(wǎng)頁也很重要,質(zhì)量較高。
基于中藥方劑中藥物的關(guān)聯(lián)性,網(wǎng)頁排名的方法也可運用到核心藥物的發(fā)現(xiàn)上,同種疫病中一種藥物的重要性由藥物在這種疫病的所有方劑中出現(xiàn)次數(shù)和與這種藥物和其他藥物的搭配規(guī)律共同決定。
原理:事先初始化所有代排序的網(wǎng)頁的PR值,PR值很大程度上代表了一個網(wǎng)頁被訪問的概率,初始值一般是1/N(N為網(wǎng)頁總數(shù)),即網(wǎng)頁個數(shù)的倒數(shù)。此外,所有待排序的網(wǎng)頁PR值和為1。
初始化完成,通過一種基于特征量的算法循環(huán)迭代,直到每個網(wǎng)頁的值趨于穩(wěn)定區(qū)間內(nèi),最終得到待排序網(wǎng)頁的PR值,也就是各個網(wǎng)頁的重要度。
2.1.2 計算
(1)初始化:假設(shè)有4個待排序的網(wǎng)頁,ABCD,那么每個網(wǎng)頁的初始PR值置為1/4,如果其中指向A的有BD,則A的PR為PR(A)=PR(B)+PR(D)。
假設(shè)C指向BCD,而D指向AC,則PR(A)=PR(B)+PR(C)/3+PR(D)/2;
為了準確表示網(wǎng)頁權(quán)重,我們在計算某個網(wǎng)頁PR值的時候通常用該網(wǎng)頁的PR值除以它所指向的所有網(wǎng)頁個數(shù)。計算公式如下(其中L(x)代表x所指向的所有網(wǎng)頁個數(shù)):
PR(A)=PR(B)/L(B)+PR(C)/L(C)+PR(D)/L(D)[8];
(2)修正:增加阻尼系數(shù),把沒有任何指向 的 網(wǎng) 頁PR置0。PR(A)=(PR(B)/L(B)+PR(C)/L(C)+PR(D)/L(D))*Q+1-q[8];

(3)計算:P1,P2,P3,……PN是待排序的頁面,M(pi)是指向pi頁面的數(shù)量,L(pj)是pj指向的所有頁面的數(shù)量,而N是待排序的所有頁面的數(shù)量。PageRank值是一個特殊矩陣中的特征向量。
1)這個特征向量為:

每個網(wǎng)頁指向下圖

用一個矩陣表示網(wǎng)頁之間的指向關(guān)系,如果頁面i有指向頁面j,則pij=1,否則pij=0。如下圖所示,如果所有待排序的網(wǎng)頁個數(shù)為N,則矩陣的大小為N*N。
我們把方劑中的每種藥物看成一個網(wǎng)頁,同一個方劑中的藥物都兩兩建立起連接,如一個方劑中有藥物a,b,c,則表示藥物的鄰接矩陣中pab,pba,pac,pca,pbc,pcb都置 1。
然后將每一行除以該行非零數(shù)字之和則得到新矩陣P’(概率矩陣),如圖3所示。這個矩陣記錄了每味藥物在一種方劑中出現(xiàn)的概率,即其中i行j列的值表示i藥物和j藥物同時出現(xiàn)在一種方劑中的次數(shù)。

將P’轉(zhuǎn)置得到概率轉(zhuǎn)移矩陣
2)eet/N為:

3)A矩陣為:q×P+(1-q)*eet/N=0.85×P+0.15*eet/N[8]

初始每味藥物的PageRank值均為1,即X~t=(1,1,1)[8]。
然后是循環(huán)迭代計算PageRank的過程[8]

因為X與R的差別較大。繼續(xù)迭代[8]。

直至最后兩次的結(jié)果差距在允許誤差范圍內(nèi),R趨于平穩(wěn),則循環(huán)迭代停止。最終R矩陣中的值就是待排序頁面(藥物)的PR值[8]。
挖掘中藥方劑的核心藥物、配伍規(guī)律,有利于了解中藥精髓,并進一步發(fā)現(xiàn)中藥的藥理作用。利用效用度研究方法挖掘核心藥物,可將藥物配伍規(guī)律的研究范圍明顯縮減至所發(fā)掘的核心藥物,減少計算量[9]。文檔關(guān)鍵詞的檢索正借鑒了這種方法。
關(guān)鍵詞是指文檔中具有專指性且能夠反映文檔主題的詞語或短語。采用自動化技術(shù)從文檔中抽取出關(guān)鍵詞的過程稱為關(guān)鍵詞自動抽取。關(guān)鍵詞自動抽取是文本自動處理中分類、檢索和文摘等工作的基礎(chǔ)與關(guān)鍵技術(shù)之一[10]。
在信息檢索中常常用詞頻tf和逆文檔詞頻idf的乘積來表示一個詞在某篇文檔中的重要性[10]。一般而言,如果某個詞在某篇文檔中出現(xiàn)次數(shù)比較多,它也許比較重要;如果某個詞在所有文檔中出現(xiàn)次數(shù)也很多,那么它的重要性也許不高。如果一個詞在某篇文檔中出現(xiàn)次數(shù)較多,而同時它在所有文檔中出現(xiàn)次數(shù)較少,則我們可以認為這個詞在這篇文檔中的重要性比較高。我們可以把這種思想運用到不同方劑找核心藥物中:如果某味藥在某種疫病的方劑中出現(xiàn)次數(shù)較多,而在所有疫病的方劑中出現(xiàn)次數(shù)較少,我們則可以認為這味藥對于這種疫病比較重要,可以作為這種疫病的關(guān)鍵或者核心藥物。
詞頻tf即是某個詞在某篇文檔中出現(xiàn)的次數(shù),逆文檔詞頻則是某個詞在所有文檔中出現(xiàn)次數(shù)的對數(shù)的倒數(shù)。一個詞的權(quán)重可以用它的詞頻tf和逆文檔詞頻idf的乘積表示
count(a)表示a味藥在所有方劑中出現(xiàn)的次數(shù),則a藥的逆詞頻公式表示如下:
idf(a) = 1/log(count(a))
則a藥的權(quán)重可以用公式表示如下:
W(a) = tf(a) * idf(a) = tf(a) * 1/log(count(a))
由于古代疫病數(shù)據(jù)過多,在此只展示瘟疫的部分方劑中根據(jù)PageRank算法迭代100次找出的pagerank值較高的藥物,見表1。

表1 瘟疫方劑中pagerank值較高的藥物
可以發(fā)現(xiàn),PageRank算法可以找出在瘟疫方劑中出現(xiàn)頻次較高且與其他藥物搭配頻繁的藥物,得出了瘟疫方劑中藥物的重要性排名。但也存在一些百搭藥物或者輔助藥物排名也十分靠前,如甘草、連翹等。
同樣的,以瘟疫方劑為例,找出在瘟疫方劑中出現(xiàn)次數(shù)較多而在所有方劑中出現(xiàn)次數(shù)較低的藥物(表中數(shù)字單位為次),見表2。

表2 在瘟疫方劑出現(xiàn)次數(shù)較多而在所有方劑中出現(xiàn)較少的藥物
按權(quán)重計算公式得出各種藥物的權(quán)重如下,見表3。

表3 各種藥物的權(quán)重計算
可以發(fā)現(xiàn),某些藥物如荊芥、牙皂、藍葉等雖然在瘟疫方劑中出現(xiàn)次數(shù)不多,但是在所有方劑中出現(xiàn)次數(shù)同樣很少,這些藥可以認為對瘟疫有獨特的、不可替代的作用。
通過兩種不同算法得出的結(jié)果比較分析可以得出:
兩種算法得出的核心藥物出現(xiàn)了9味不同的藥。PageRank算法確實可以得出瘟疫方劑中相對重要的藥物,如甘草、連翹、黃芩、川芎、人參、薄荷等,而基于效用度的算法則可以找出相對低頻但是比較有效的藥物,如荊芥、牙皂、藍葉。
PageRank算法會受到KD(阻尼系數(shù))選取的影響,而權(quán)重計算方法也會受到整體方劑數(shù)據(jù)量的影響,同時PageRank偏重于輸入順序相對在前的方劑藥物,不同古代典籍中疫病藥物選取也可能受朝代、病因的影響。
而基于效用度的權(quán)重算法,可以有效發(fā)現(xiàn)相對某種疫病使用較多的藥物,但如果方劑數(shù)據(jù)中存在較多類似藥物搭配,也會使實驗結(jié)果相對偏向這類搭配的藥物。
綜上可見,PageRank算法可以發(fā)現(xiàn)瘟疫方劑中使用頻數(shù)較高的核心藥物,但其中也不乏像甘草這樣的百搭藥物,而基于效用度的算法則可以發(fā)現(xiàn)較針對瘟疫這種疫病的低頻但有效的藥物,使藥物的權(quán)重排名不僅僅依賴于該藥物在瘟疫方劑中出現(xiàn)的頻率。相較而言,基于效用度的算法更準確地發(fā)現(xiàn)針對瘟疫的核心藥物,因此對兩種算法的核心藥物求交集,結(jié)果再與基于效用度的算法做并集,則能較為準確地反映瘟疫中的核心藥物為川芎、薄荷、牛蒡子、前胡、大黃、升麻、麻黃、石膏、羌活、梔子、防風(fēng)、獨活、荊芥、牙皂、藍葉。
至此,運用兩種不同算法從70多個瘟疫方劑中發(fā)現(xiàn)了核心藥物,兩者結(jié)果分析結(jié)合,得出瘟疫常用的核心藥物。其中大部分藥物證實對瘟疫治療有顯著效果,但個別藥物的藥性以及用法可能與其他藥物存在沖突,任有待對其中的藥性以及用法用量進行進一步分析,最終得到的結(jié)果更加科學(xué)合理。
下一步工作是按照上述研究方法,同樣的對黃膽、霍亂、痢疾等方劑數(shù)據(jù)量較多的疾病運用核心藥物發(fā)現(xiàn)算法,找出其中的核心藥物。然后,以核心藥物為基礎(chǔ),對不同疫病的朝代、病因、癥狀等影響因素進行顯著性分析。希望通過對不同疫病的研究分析,進一步得出不同朝代、癥狀的疫病的用藥規(guī)律,為現(xiàn)代醫(yī)學(xué)提供借鑒。
[1] 單聯(lián)喆.明清山西疫病流行規(guī)律研究[D].中國中醫(yī)科學(xué)院 中國中醫(yī)研究院,2013.
[2] 彭麗坤.明清中醫(yī)疫病發(fā)病、癥狀與用藥相關(guān)性數(shù)據(jù)挖掘研究[D].南京中醫(yī)藥大學(xué),2009.
[3] 周偉.中藥方劑核心藥物及其配伍規(guī)律挖掘[D]. 南京大學(xué), 2013.
[4] 周偉,王峰,王崇駿,等.利用效用度挖掘核心藥物及配伍規(guī)律[J].計算機科學(xué)與探索, 2013, 7(11):994-1001.
[5] 張健.基于鏈接的分類算法的研究[D].燕山大學(xué),2009.
[6] 吳淑燕,許濤.PageRank算法的原理簡介[J].圖書情報工作,2003(2):55-60.
[7] 《網(wǎng)絡(luò)(http://blog.csdn.net)》- 2013, PageRank算法 - 思考,思考,再思考~ - 博客頻道 - CSDN.NET.
[8] 《網(wǎng)絡(luò)(http://blog.csdn.net)》-2017,pagerank 算法簡介 - 博客頻道 - CSDN.NET.
[9] 蔡春艷.中藥方劑核心藥物及其配伍規(guī)律分析[J].亞太傳統(tǒng)醫(yī)藥,2014,10(20):131-132.
[10] 肖根勝.改進TFIDF和譜分割的關(guān)鍵詞自動抽取方法研究[D].華中師范大學(xué),2012.