,,
隨著醫療大數據的爆炸性增長,醫學文獻共享和知識挖掘的需求越來越迫切。如何提高醫學文獻分類的效率和質量,快速準確地識別這些海量文獻的類別信息,從而挖掘出有價值的信息,成為該領域一個十分突出和重要的課題。雖然文本自動分類[1]作為一種成熟、高效的文本分類方法,已經在文本挖掘領域得到了廣泛的應用,但分類效果還不夠理想。
目前,關于自動分類的研究主要是利用SVM或KNN等分類算法[2-3],而基于主題模型的自動分類方法研究比較少,特別是針對醫學領域文本自動分類方法的研究更少。
鑒于主題模型要考慮文本的語義信息可靠性較強,本文提出了一種基于Labeled LDA[4]主題模型的醫學文獻自動分類方法。它采用醫學文本特定的方式構建訓練文本,解決數據不平衡問題,調整模型的參數為最佳,選取了10個醫學領域的文獻進行實驗,并用Labeled LDA主題模型與SVM方法進行對比實驗,對實驗結果進行分析總結,驗證本文提出的自動分類方法的可靠性和效果。
自動分類包括詞典構建、語料庫構建、算法對比與分析等階段。
在語料庫構建階段,語料庫數量龐大、各類別的覆蓋度及類之間的不平衡問題突出,需要設計語料庫構建規則,對語料庫文檔進行篩選,在保證各類完整性的基礎上盡量減小語料庫規模和計算規模,同時充分考慮類之間的平衡;在詞典構建階段需要對詞進行規范,對已有詞典文本進行處理,從而提高特征向量的純度,同時還需要對多種分詞算法進行對比分析和測試,選擇合適的方法提高分詞準確率和未登錄詞的識別率;在分類算法階段,針對語料庫及需要分類的文本特征選擇合適的算法,提高分類效率和準確率。
本文主要是針對醫學文本自動分類的問題設計實驗,通過對比Labeled LDA和SVM的分類效果,選取好的自動分類方案,提高分類的準確率和效率。
數據預處理需要解決去除數據中的噪音和數據不均衡性兩個關鍵的問題。
數據下載后,需要進行文本的切詞和去停用詞處理。由于本文是對醫學文本內容進行分類,加之醫學詞匯有許多特有詞和專有詞,因此需要構建醫學專用詞詞典,輔助切詞過程,提高切詞的準確率;需要下載臨床醫學疾病庫中的詞匯以及MeSH詞匯,經人工篩選、規范同義詞,并補充如藥物、基因等其他詞匯構成切詞詞典。文本切詞后,需要構建停用詞詞典,將意義不大的詞去除。分詞工具選用AnsjSeg。
實際分類數據中的數據往往是非平衡的。如何正確分類非平衡數據集成為文本分類的挑戰。非平衡數據集是指在同一個數據集中某些類的樣本數遠大于其他類的樣本數,其中樣本少的類為少數類,樣本多的類為多數類[5]。目前,解決不平衡分類問題的策略分為兩大類:一類是從訓練集入手,通過改變訓練集樣本分布降低不平衡程度;另一類是從學習算法入手,根據算法解決不平衡問題中的缺陷,適當地改進算法使之適應不平衡分類問題。本文著眼于使訓練樣本各類數量基本一致,并從特征選取的角度盡量保留少數類的特征[6]。特征選取的方法為選取各類別中出現頻次較高的詞保留,結合人工判斷保留頻次較低但屬該類的專有詞,并補充漏掉的各類別特征詞和專有詞。
1.2.1 模型的訓練
實現Labeled LDA模型在JGibbLDA[7]的基礎上進行。當Labeled LDA模型在訓練階段對詞進行主題采樣的時候,不再計算該詞在所屬文檔上未標記類別的概率,避免了LDA模型中詞會在所有主題上進行分配的問題。將詞的主題范圍限定在所屬文檔標記的主題之內,很好地利用了人工標記的主題信息,分類效果比LDA模型好。
Labeled LDA模型訓練文本的輸入格式與JGibbLDA類似,每一行表示一個文檔,詞與詞之間使用空格分隔。Labeled LDA模型需要在每行文本前面使用“[]”的標識,顯示每個文檔所屬的類別。
實驗中10個類別的訓練文本如圖1所示。

圖1實驗中10個類別的訓練文本
圖中每1行代表一個醫學國標類別,第1行代表消化病學,第2行代表呼吸病學,第3行代表皮膚病學,第4行代表腎臟病學,第5行代表泌尿外科學,第6行代表腫瘤學,第7行代表婦產科學,第8行代表神經病學,第9行代表心血管病學,第10行代表血液病學。這些文本詞由相關的醫學文本經過分詞、篩選并人工分類后得到。
西沙群島島嶼自身生態環境脆弱,加上島嶼垃圾處理條件有限,保護是開發的前提,西沙的環境保護尤為重要。有效科學的控制游客數量,規范游客行為,推進“一人一袋”環保活動,讓每位游客上島帶上環保袋,不得隨意丟置垃圾。
Labeled LDA模型使用Gibbs抽樣方法對主題詞分布進行迭代抽取,其最終的準確度受Gibbs抽樣迭代次數的影響。實際使用Labeled LDA模型時,會用某個間隔次數階梯狀地訓練Labeled LDA模型,然后需要用人工評估模型的訓練結果,找最合適的迭代次數,以保證Gibbs抽樣過程已經收斂,也不進行多余的迭代。
1.2.2 模型的預測
預測文本格式與訓練文本格式類似,預測時需要設定相關參數而不需要標記類別號。如預測文本的位置,預測類別數目,迭代次數,選擇哪種迭代模型進行結果推斷。預測完成后結果在輸出文件“.theta”中,每行代表預測集中的一個文檔,每一行中的值表示該文檔屬于不同主題的概率,輸出最大值和次最大值對應的類別作為最終的分類結果,次最大值數目過多或過少則不保留此分類。
支持向量機(SVM)已在手寫數字的識別、揚聲器識別、人臉識別、文本分類等許多領域展示了較好的效果,并在解決小樣本、非線性及高維模式識別問題中表現出了特有的優勢。它的原始設計是針對兩類模式識別的問題及現實世界中的多類問題。
經典的SVM 多類分類算法[8]主要有一對一方法(1-vs-1)、一對多方法(1-vs-all)、有向無環圖方法(DAG-SVM)和二叉樹法(BT-SVM)等。從分類器的復雜度來看,一對多和二叉樹算法對n類分類問題分別需要構造n和n-1個分類面。構造分類面最多的是一對一和DAG算法,對n類問題需要構造n(n-1)/2個分類面。從分類的精度方面分析,一對一和DAG算法比一對多和二叉樹算法高。因此在目標分類問題中,分類的精度和分類器的復雜度為一對互相矛盾的指標,因而在解決實際問題中究竟采用哪種分類器,應根據實際的需求而定。當分類精度要求比較高時可以采用一對一和DAG算法,若是需要同時考慮分類精度和分類速度,可以使用一對多和二叉樹算法,當然也可以將不同的分類器組合成混合的分類器來協調二者間的需求矛盾[9]。
SVM使用時相對簡單,首選需要構建數據的輸入格式,然后優化最佳參數并選擇核函數,利用訓練數據構建模型,最后利用模型對測試數據進行分類預測。數據的輸入格式如下:
[label][index1]:[value1][index2]:[value2]…
一行即為一條數據記錄,label是種類,即這一條記錄所屬的類別,通常為整數;index是有順序的索引,通常是連續的整數,代表這個類別的特征;value是特征的值,通常是一些實數。
分類器的性能通常采用評估指標衡量,評估指標是指在測試過程中所使用的一些用來評價分類準確度的量化指標[10],包括準確率(Precision)、召回率(Recall)和F1標準等。
在CBM數據庫中,選取2015年發表的部分中文數據作為訓練數據和測試數據,根據標題和關鍵詞對文獻進行自動分類實驗。
下載的數據中包括以R開頭的分類號—cn_auo字段(圖2)。這是作者給文獻的分類號,可將其對應成國標分類號和分類名,作為文獻的標準分類結果,并根據需要補充分類名稱。
數據需要根據標題和關鍵詞進行分詞和去停用詞處理,使用AnsiSeg分詞包時需要準備醫學詞表和停用詞表,分詞的結果只限定于詞表中包含的詞。分詞的詞典目前已有30多萬詞匯,需要用臨床醫學知識庫中的疾病庫詞匯及MeSH詞匯進一步規范和完善詞典,然后進行同義詞歸并,并補充一些較新且屬專指的詞匯。
對標題和關鍵詞分詞后的結果為圖2中的“ti_kw”字段和“tw_kw”字段,將這兩個字段合并的結果構建訓練語料。利用消化病學、腫瘤學、皮膚病學、腎臟病學、泌尿外科學、呼吸病學、婦產科學、神經病學、心血管病學、血液病學等10個類別進行自動分類的測試,每個類別下的詞匯需要從標題和關鍵詞的分詞結果中遴選,并且輔助人工判斷進行補充。選取各個類別中出現頻次較高的詞保留,并結合人工判斷,將頻次較低但屬該類的專有詞保留,并補充漏掉的專有詞匯。

圖2 CBM數據預處理
2.2.1 訓練文本的構建
應用Labeled LDA模型對文本內容進行分類,首先需要利用訓練語料庫構建分類模型。分類模型構建的好壞直接影響預測數據分類的準確性,因此模型訓練階段十分關鍵,其中訓練語料庫的構建又是模型訓練階段的關鍵。從語料庫的構建入手,選取消化病學、腫瘤學、皮膚病學、腎臟病學、泌尿外科學、呼吸病學、婦產科學、神經病學、心血管病學、血液病學等10個類別、300篇中文數據(共3 000條),構建Labeled LDA模型的輸入文本。首先對這10個類別的詞匯出現頻率進行統計,選取詞頻大于5的詞,并通過人工判斷,除去對類別判斷沒有意義的詞,如病毒、注射、復發、早期治療等,保留頻次較低但屬該類別的特征詞,還需要補充漏掉的專有詞匯或特征詞。最終選取的特征詞匯數量見表1。

表1 特征詞統計數量
2.2.2 模型的訓練
運用Labeled LDA進行模型訓練,設置相關的參數,類目數設為10,每個類別選取前50個最大概率詞項,生成的模型文件見圖3。

圖3 Labeled LDA模型文件
模型訓練后得到幾個文件,其中“.twords”文件為“詞項-主題”預測文件,列出每個主題下的特征詞及其概率;“.theta”文件為“文檔-主題”預測文件,每行代表訓練數據集中的一個文檔屬于不同主題的概率;“.tassign”文件為“文檔-詞項-主題”預測文件,文件的每行代表一個文檔。如“.twords”文件生成10個主題,每個主題下包含50個詞。每個主題的前10個詞見表2。

表2 實驗中10個主題的前10個主題詞
2.2.3 分類的預測
從實驗的10個類別中選取3 000條中文文本數據進行分類的測試工作,預測數據的文本格式與訓練文本格式類似,只是不需要標記預測數據的類別號。
運用Labeled LDA進行分類預測,設置相關參數,類目數設為10,每個類別選取前50個最大概率詞項,生成的結果文件見圖4。

圖4 Labeled LDA結果文件
讀取.theta文件,選取其中的最大值分類和次最大值分類作為最終分類。如果次最大值個數大于2或是次最大值小于0.02,則只保留最大值分類。
選取以上處理過的消化病學、腫瘤學、皮膚病學、腎臟病學、泌尿外科學、呼吸病學、婦產科學、神經病學、心血管病學、血液病學等10個類別的3 000篇文獻數據構建訓練文本,每行表示一條中文文獻記錄,每列代表一個屬性詞。若是該詞在文獻中出現則屬性值為1,沒有出現則屬性值為0,屬性值為0時可以不用列出。部分文本見圖5。

圖5 SVM訓練文本
選用的SVM訓練文本為libsvm-3.20,應用其中的Windows版本執行命令python easy.py svmtrainsvmtest進行參數尋優,使用核函數RBF尋得最優的參數c為0.03125,g為0.0001220703125。
預測得到的最終結果保存到svmtest.predict文件中,預測得到的總準確率為79.9333%。
Labeled LDA模型與SVM模型的分類結果如表3所示。利用Labeled LDA模型分類結果的平均準確率為87.00%、平均召回率為87.00%、平均F1值為86.97%,利用SVM模型分類結果的平均準確率為79.93%、平均召回率為79.95%、平均F1值為79.94%。由此可見,利用Labeled LDA模型分類的3個測評指標均高于利用SVM模型的分類結果,特別是對腎臟病學的分類結果差別更加明顯,其Labeled LDA模型的F1值高出SVM模型的F1值8.59%。實驗表明,通過訓練文檔集的改善及參數的調整,主題模型的分類效果要優于SVM模型,顯示出更好的分類效果。

表3 Labeled LDA模型與SVM模型的分類結果對比
本文提出了一種基于Labeled LDA主題模型的醫學文獻自動分類法,通過構建醫學領域文本的特定訓練集,解決數據的不平衡問題,然后進行模型的訓練與測試,并與SVM模型進行了對比實驗。結果顯示,基于Labeled LDA主題模型自動分類方法的準確率和召回率均優于SVM模型的準確率和召回率,表明此方法在醫學領域文本分類方面具有一定的可靠性。但是,本文訓練文檔集的設定受人為主觀因素的干擾較多,下一步工作需要加強研究訓練文檔集的自動構建方案,進一步提高分類的效率。