陳小強,胡 翰
(吉安職業(yè)技術(shù)學(xué)院,江西 吉安 343000)
醫(yī)療資源不均衡,會導(dǎo)致醫(yī)患關(guān)系日益緊張,如何讓偏遠山區(qū)人民享受一線城市醫(yī)療資源已成為目前十分緊迫的問題。智能問診系統(tǒng)的出現(xiàn),為解決此類問題提供了途徑,它可以整合醫(yī)療資源,為患者提供遠程/便捷的人機交互模式[1]。在人機交互模式下,問句分類是智能問答系統(tǒng)的一個關(guān)鍵部分,分類的準確性決定患者能否獲得最佳答案。文本分類做為機器學(xué)習(xí)非常重要的研究領(lǐng)域,已經(jīng)在智能問答、情感分析[2]等方面有非常成熟的應(yīng)用,然而與文本分類不同的是,問句分類[3]具有關(guān)鍵詞少、書寫不規(guī)范等特點,特別是對于醫(yī)療問句而言,患者提出的問句常常不夠?qū)I(yè),因此,在采用特征向量空間表征問句時,易出現(xiàn)數(shù)據(jù)稀疏、維數(shù)過大等難題。此外,大量的真實語料庫在特征向量構(gòu)造時會引入噪聲數(shù)據(jù)。針對以上難題,本文提出基于維基百科和深度學(xué)習(xí)相結(jié)合的詞向量特征擴展模型,該模型利用中文維基百科語義結(jié)構(gòu)和Word2vec構(gòu)造特征詞向量,從而提高醫(yī)療問句分類準確性。
雖然中文問句大部分比較短小,只包含幾個關(guān)鍵詞,但是問句中蘊含著豐富的語義關(guān)系,它的結(jié)構(gòu)復(fù)雜,形式多樣,給研究者帶來不少難題。目前大部分研究集中在分類模型準確性、性能提升等工作,并且取得不錯的進展,近幾年,眾多學(xué)者開始著手研究問句關(guān)鍵詞提取,本文結(jié)合醫(yī)療問句自身特點,重點研究問句關(guān)鍵詞特征擴展,構(gòu)建更準確的特征向量空間。
傳統(tǒng)關(guān)鍵詞特征擴展研究主要分為基于外部知識庫和基于內(nèi)部語義結(jié)構(gòu)方法。Yang等[4]提出通過借助外部知識庫,比如WordNet、HowNet 對短文本進行擴展,范云杰等[5]等[等提出基于中文維基百科擴展短文本。然而基于外部知識庫的關(guān)鍵詞特征擴展效果取決于知識庫的全面性、準確性,并且無法反應(yīng)中文問句內(nèi)部語義特征,所以特征擴展效果并不好。
后來有研究者提出基于內(nèi)部語義結(jié)構(gòu)特征擴展方法,葉雪梅等[6]提出基于改進的TF-IDF 關(guān)鍵詞特征擴展方法,胡江勇等[7]提出基于LDA 主題詞擴展特征向量模型。但是基于內(nèi)部語義結(jié)構(gòu)特征方法需要專門語料庫訓(xùn)練、訓(xùn)練速度慢,并且引入擴展構(gòu)造主題詞使得向量維度較大且改變原本語義信息,導(dǎo)致分類效果一般。
為解決文本分類中關(guān)鍵詞矩陣稀疏的特點,有研究者提出了詞向量概念,通過文本語料訓(xùn)練,將文本關(guān)鍵詞轉(zhuǎn)換成多維特征向量。2006年Hinton 等[8]率先提出深度學(xué)習(xí)概念,它是一種非監(jiān)督的逐層訓(xùn)練模型。深度學(xué)習(xí)模型不僅考慮了詞語出現(xiàn)的頻率,而且還考慮問句上下文語義關(guān)系,因此相比傳統(tǒng)的方法訓(xùn)練結(jié)果更準確。目前主要有三種深度學(xué)習(xí)獲取特征詞向量的方法:①Bengio 等[9]在JMLR 上發(fā)表的三層深度學(xué)習(xí)模型,②Hinton 等[10]提出的訓(xùn)練語言模型和詞向量,③Mikolov[11]團隊提出的Word2vec。通過Word2vec工具訓(xùn)練得到關(guān)鍵詞向量后,結(jié)合卷積神經(jīng)網(wǎng)絡(luò)模型TextCNN、快速文本分類模型FastText、長短期記憶網(wǎng)絡(luò)(LSTM)、注意力機制(Attention)可得到較好的分類效果。在深度學(xué)習(xí)基礎(chǔ)上,唐曉波等[12]提出先通過TF-IDF 和LDA 提取關(guān)鍵詞,再使用Word2vec擴展詞向量模型,雖然Word2vec 構(gòu)造詞向量會考慮上下文語義關(guān)系,但是Word2vec生成的詞和向量一一對應(yīng),無法解決一詞多義現(xiàn)象,并且對于問句中新詞、網(wǎng)絡(luò)流行詞等頻率較低的詞效果較差,導(dǎo)致部分問句分類失真。
綜上所述,本文綜合維基百科和深度學(xué)習(xí)的優(yōu)點,在保留中文問句語義信息的前提下,引入Word2vec和維基百科相結(jié)合的詞向量構(gòu)造方法,既能最大限度地保留原始問句語義,又能提高中文問句分類效果。
⑴輸入層。導(dǎo)入醫(yī)療問句原始數(shù)據(jù)集medical.txt。
⑵預(yù)處理層。數(shù)據(jù)清洗,引入jieba 分詞工具對原始數(shù)據(jù)集分詞得到數(shù)據(jù)集train.txt。
⑶ 詞向量構(gòu)造層。首先采用Word2vec 工具CBOW 和Skip-gram 模型分別構(gòu)造醫(yī)療問句關(guān)鍵詞向量vector.txt(對于醫(yī)療問句關(guān)鍵詞詞頻低于5 次即舍棄)。然后對train.txt 問句中關(guān)鍵詞進行判斷,如果在vector.txt 中,則直接獲取關(guān)鍵詞向量,否則,利用維基百科ESA 算法構(gòu)建擴展關(guān)鍵詞向量。最后將擴展關(guān)鍵詞向量合并構(gòu)成medical_vector.txt。
⑷ 分類輸出層。采用TextCNN 對問句分類,總體框架如圖1所示。
2.2.1 基于CBOW模型構(gòu)造詞向量
CBOW語言模型是根據(jù)詞語上下文的聯(lián)合概率來判斷,比如,字符串S 包含一連串詞語單詞w1,w2,…wT組成,求字符串S是自然語言的概率,公式如下:
其中,Contexti表示該單詞的上下文,即它的前后c 個單詞。p(wi|Contexti)表示前后c個單詞出現(xiàn)的情況下,再出現(xiàn)該單詞的概率。例如,問句S=“小孩咳嗽應(yīng)該怎么治療?”,對問句S分詞后為“小孩/咳嗽/應(yīng)該/怎么/治療”得到6個單詞,如圖2所示。
圖2 基于CBOW模型構(gòu)造詞向量
除了上述的CBOW 語言模型外,Word2vec 還有Skip-gram語言模型,Skip-gram模型和CBOW模型不同的是,已知當(dāng)前詞w,需要推測出它的上下文。
2.2.2 基于中文維基語義相似度詞向量構(gòu)建
維基百科相似度算法ESA 主要是將文本關(guān)鍵詞映射到維基百科概念中,采用向量矩陣表示文本向量,TF-IDF表示文本向量的權(quán)重,通過余弦相似度來計算文本之間的相關(guān)度。以下是ESA算法實現(xiàn)過程。
Step1:對維基百科所有頁面分詞預(yù)處理,統(tǒng)計各個詞語wi在某個維基概念頁面的TF-IDF值為kj。
Step2:建立詞語wi和維基百科概念cj倒排索引,用kj表示它們之間的權(quán)重。詞語wi有多個維基百科概念cj,按照TF-IDF的值即kj大小排序。
Step3:對目標(biāo)文檔分詞預(yù)處理,分別用詞語集合Ta={wi}、Tb={wi}表示,詞語wi的TF-IDF 值用向量{vi}表示,vi表示wi的權(quán)重。
Step4:文本Ta中詞語wi通過倒排索引,映射到維基百科概念cj,因為一個詞語wi有多個維基百科概念cj,所以對它們求和得到cj的權(quán)重,文本Ta 用向量空間{qj,q2,q3,q4,…,qn}表示,n 表示維基百科概念數(shù)目,同理求得Tb。
Step5:用余弦值求兩文本向量的相關(guān)度Red(Ta,Tb)。
Step6:最后根據(jù)相關(guān)度大小獲得詞語K 維擴展向量空間。
ESA 算法有效地利用了維基百科巨大的概念庫,基本上可以處所有的詞語,相比于知網(wǎng)的詞典計算,它覆蓋面更廣,而且對于網(wǎng)絡(luò)新詞、專有名詞處理也有較好的效果。但是ESA 也有自己的缺點,ESA 只是簡單的概念映射,容易引入噪聲數(shù)據(jù)。此外,ESA 需要考慮維基百科頁面所有數(shù)據(jù),預(yù)處理階段花費更多時間和資源,表示文本向量時包括所有的維基百科概念,計算量過大。
而采用深度學(xué)習(xí)Word2vec 工具對問句進行詞向量訓(xùn)練,不僅速度快,而且效率高,但是對于一些同義詞、網(wǎng)絡(luò)流行詞的處理效果不太好。因此本文采用中文維基百科與深度學(xué)習(xí)相結(jié)合的詞向量特征擴展模型,既能保持醫(yī)療問句詞向量的語義結(jié)構(gòu),又能構(gòu)造網(wǎng)絡(luò)流行詞、同義詞特征向量空間。
本文對中文醫(yī)療問句進行分類,其中訓(xùn)練語料有兩大來源,一是通過網(wǎng)絡(luò)爬蟲從好大夫網(wǎng)站(https://www.haodf.com/)爬取63992 條醫(yī)療問句。二是從中文維基百科知識庫抽取醫(yī)療關(guān)鍵詞信息。
實驗運行環(huán)境為Windows 10,內(nèi)存配置16GB,CPU 配置Intel i7 9700,編譯環(huán)境為Anconda3,編程語言Python 3.9,深度學(xué)習(xí)框架TensorFlow 1.14,分詞器采用jieba,使用Gensim包構(gòu)建Word2vec詞向量。
3.3.1 數(shù)據(jù)預(yù)處理
從“好大夫”網(wǎng)獲取的醫(yī)療問句數(shù)據(jù),我們對其做以下預(yù)處理操作:
⑴數(shù)據(jù)清洗,清除原始醫(yī)療問句中錯誤數(shù)據(jù)、無效數(shù)據(jù)、重復(fù)數(shù)據(jù);
⑵將醫(yī)療問句數(shù)據(jù)分成包括內(nèi)科、外科、兒科、耳鼻喉科、眼科、婦科、男科、皮膚科、中醫(yī)科、傳染病科10大類;
⑶使用jieba 分詞器進行分詞,結(jié)合中文維基百科提高醫(yī)學(xué)類專有名詞提高分詞準確率;
⑷將預(yù)處理的醫(yī)療問句數(shù)據(jù)集分成10 份,按照8:1:1的比例確定訓(xùn)練集、測試集、驗證集三大類。
3.3.2 構(gòu)建詞向量
本文采用Gensim 包構(gòu)建Word2vec 詞向量,詞向量維度設(shè)置300,訓(xùn)練窗口大小默認設(shè)置5,訓(xùn)練算法模型為CBOW和Skip-gram。采用準確率(P)、召回率(R)、均衡參數(shù)(F)對實驗結(jié)果評價,相關(guān)公式如下:
本實驗對醫(yī)療問句分類采用TextCNN 模型,分別對傳統(tǒng)的詞袋模型(BOW),CBOW 直接訓(xùn)練詞向量模型(CBOW)、Skip-gram 直接訓(xùn)練詞向量模型(SG)、CBOW+維基百科模型(WCBOW)、Skip-gram+維基百科模型(WSG)進行比較,這五種不同方法的分類效果對比如表1所示。
表1 不同模型分類效果對比
由表1可知,CBOW+維基百科模型(WCBOW)分類效果最佳,P值、R 值、F值均為最高,達到0.912、0.924、0.918,相對于傳統(tǒng)的SG 方法分別提升了3.6%、5.9%、4.9%。由此可見,基于CBOW+維基百科(WCBOW)模型相比BOW、CBOW、SG、WSG有效可行。
由于醫(yī)療問句關(guān)鍵詞較少、向量稀疏,對其分類存在困難,因此本文提出了基于深度維基學(xué)習(xí)的詞向量擴展模型。核心思想是通過CBOW 方法對問句關(guān)鍵詞訓(xùn)練生成詞向量,對稀有特征詞采用維基百科語義結(jié)構(gòu)生成詞向量,合并后構(gòu)成問句關(guān)鍵詞特征向量空間,實驗表明本文方法由于傳統(tǒng)的Skip-gram、CBOW、BOW模型。
本文方法提升了醫(yī)療問句分類效果,改善了智能問診系統(tǒng)的效率,同時,也為其他短文分類提供依據(jù)。但本文中基于維基百科和深度學(xué)習(xí)詞向量構(gòu)造方法也存在一定局限,它忽略了問句關(guān)鍵詞前后之間的語義關(guān)系,后續(xù)研究可嘗試從卷積神經(jīng)網(wǎng)絡(luò)擴展關(guān)鍵詞向量。