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