王保成,劉利軍,黃青松,2
(1. 昆明理工大學(xué) 信息工程與自動(dòng)化學(xué)院,云南 昆明 650500;2. 云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500)
隨著信息技術(shù)的快速發(fā)展,大量醫(yī)療數(shù)據(jù)得以產(chǎn)生。同時(shí)為了改善線下醫(yī)療條件及資源等問(wèn)題,在線醫(yī)療問(wèn)答平臺(tái)應(yīng)運(yùn)而生。然而患者由于專(zhuān)業(yè)知識(shí)的不足,不能準(zhǔn)確地使用相應(yīng)術(shù)語(yǔ)描述其癥狀;其次,由于醫(yī)生通常是在空閑時(shí)間來(lái)回答患者所提問(wèn)題,所以醫(yī)生不一定能及時(shí)回復(fù)[1]。針對(duì)上述問(wèn)題,讓系統(tǒng)自動(dòng)檢索出與患者提出的問(wèn)題相似的病例,并將其推送給患者,是一種有效的方法。
近年來(lái),國(guó)內(nèi)外的醫(yī)療文本檢索研究主要是圍繞著電子病歷及在線醫(yī)療問(wèn)答網(wǎng)站開(kāi)展的。傳統(tǒng)搜索引擎采用開(kāi)源的搜索引擎框架并對(duì)其檢索方法做調(diào)整以對(duì)醫(yī)療文本進(jìn)行檢索。韓晟等人[2]通過(guò)Lucene開(kāi)源搜索引擎框架來(lái)對(duì)無(wú)結(jié)構(gòu)化文本進(jìn)行檢索。胡恒文等人[3]通過(guò)Clucene開(kāi)源搜索引擎對(duì)電子病歷進(jìn)行全文檢索,但以上所有工作都不能滿(mǎn)足海量數(shù)據(jù)的需求。Bahga A等人[4]通過(guò)使用云數(shù)據(jù)庫(kù),在一定程度上提升了檢索效率。但醫(yī)療文本中,常出現(xiàn)一詞多義等問(wèn)題,準(zhǔn)確率較低。Qiu Y等人[5]通過(guò)同義詞進(jìn)行查詢(xún)擴(kuò)展,Bendersky[6]提出一種權(quán)重依賴(lài)模型,對(duì)每個(gè)詞用不同特征或短語(yǔ)串。這些方法能提升檢索性能,但仍基于詞粒度,不能準(zhǔn)確地把握語(yǔ)義。Cai R等人[7]提出一種CNN-LSTM模型,通過(guò)深度學(xué)習(xí)方法,用文本匹配方式來(lái)檢索,能更好地保留語(yǔ)義,但檢索效率不足。
醫(yī)療文本匹配,主要應(yīng)用于在線醫(yī)療問(wèn)答。較早是用信息檢索及統(tǒng)計(jì)語(yǔ)言學(xué)特征進(jìn)行文本匹配。Hliaoutakis A等人[8]設(shè)計(jì)了一種面向生物醫(yī)學(xué)文檔的查詢(xún)系統(tǒng),用 TF-IDF作為文本特征,衡量語(yǔ)義相似性。深度學(xué)習(xí)也被應(yīng)用在醫(yī)療文本匹配任務(wù)中。Cai H等人[9]提出一種將翻譯語(yǔ)言模型和 Siameese CNN 模型結(jié)合的方法,分別學(xué)習(xí)問(wèn)題和問(wèn)題、問(wèn)題和答案的相似性。但因醫(yī)生提供的答案容易引入噪聲,Li Y 等人[10]利用Siamese LSTM模型作為問(wèn)句匹配的基礎(chǔ)模型對(duì)結(jié)果進(jìn)行重排序,但忽略了文本上下文語(yǔ)義的特征。
本文主要?jiǎng)?chuàng)新點(diǎn)有兩方面:①提出了基于改進(jìn) Text-CNN 哈希模型的相似問(wèn)題檢出方法:基于SimHash的哈希最鄰近檢索,針對(duì)文本存在醫(yī)療術(shù)語(yǔ)較多、否定詞較多,需關(guān)注局部語(yǔ)義及需關(guān)注整體語(yǔ)義特征的特點(diǎn),提出了一種基于改進(jìn) Text-CNN 的哈希碼檢出方法。通過(guò)預(yù)訓(xùn)練詞向量來(lái)解決醫(yī)療術(shù)語(yǔ)較多、一義多表達(dá)問(wèn)題;針對(duì)否定詞較多的特點(diǎn),使用不同窗口大小的卷積核來(lái)處理;對(duì)于需關(guān)注局部語(yǔ)義與整體語(yǔ)義的特點(diǎn),構(gòu)建基于Inception的卷積神經(jīng)網(wǎng)絡(luò),通過(guò)Inception使最終特征向量不僅包含高層語(yǔ)義,也包含低層特征。②提出了基于集成學(xué)習(xí)的相似文本匹配方法:它由三個(gè)模型集成。第一個(gè)構(gòu)建的模型是Siamese-BERT,該模型主要關(guān)注與整體語(yǔ)義的匹配,先通過(guò)共享參數(shù)的BERT模型,提取各問(wèn)題特征向量,然后將其仿射變換,得到一個(gè)兩問(wèn)題交互的相似向量,并對(duì)該向量進(jìn)行全連接,通過(guò)Sigmoid損失判斷兩個(gè)句子是否語(yǔ)義相似。第二個(gè)模型是BERT-Match,該模型利用BERT的多頭注意力機(jī)制,在關(guān)注語(yǔ)義信息時(shí),更易關(guān)注到兩個(gè)問(wèn)句間的一些局部相似信息。第三個(gè)模型是梯度下降提升樹(shù)相似模型,它將一些統(tǒng)計(jì)學(xué)特征與語(yǔ)義特征進(jìn)行結(jié)合,并用梯度下降樹(shù)來(lái)分類(lèi),以確定是否相似,最后通過(guò)權(quán)值平均,得到更高準(zhǔn)確率。
1.1.1 中文醫(yī)療文本分詞
采用深度學(xué)習(xí)與統(tǒng)計(jì)語(yǔ)言結(jié)合的方法在分詞中有較好效果。如Li Z等[11]提出基于結(jié)構(gòu)化感知器進(jìn)行分詞的模型,其將分詞看作序列標(biāo)注問(wèn)題,對(duì)于字符序列,以最大熵準(zhǔn)則建模一個(gè)得分函數(shù),通過(guò)最大化得分函數(shù),找到一個(gè)最可能的標(biāo)注。又如Zhang H P等[12]提出基于HHMM的分詞模型,它將所有可能分詞組合起來(lái)構(gòu)建一個(gè)有向圖,邊的權(quán)重為平滑后的log值?,F(xiàn)有許多分詞工具,如LTP、NLPIR、THULAC和Fool-NLTK、pkuseg等。對(duì)100條記錄手動(dòng)分詞與標(biāo)注,評(píng)測(cè)指標(biāo)為F1值,結(jié)果如表1所示。因pkuseg性能最好,故pkuseg為本文分詞方法。
表1 分詞結(jié)果對(duì)比表
1.1.2 詞嵌入向量
Word2Vec:Word2Vec[13]的目標(biāo)是從海量數(shù)據(jù)中得到高質(zhì)量的詞向量。它在語(yǔ)義和語(yǔ)法上都有較好的性能,目前已廣泛應(yīng)用在自然語(yǔ)言處理中。
TencentAILabEmbedding: 其[14]是騰訊采用DSG進(jìn)行訓(xùn)練的一種嵌入式詞向量,DSG算法基于詞向量訓(xùn)練算法Skip-Gram,在文本窗口中詞對(duì)共現(xiàn)關(guān)系的基礎(chǔ)上,額外考慮詞對(duì)相對(duì)位置。
Text-CNN[15]模型主要對(duì)一維卷積層及時(shí)序最大池化層進(jìn)行了使用。假設(shè)輸入文本序列由n個(gè)詞組成,其中,每個(gè)詞用d維詞向量表示。那么,輸入樣本寬為n,高為1,輸入通道數(shù)為d。該模型的計(jì)算有以下幾步:先構(gòu)建多個(gè)一維卷積核,并使用它們分別對(duì)輸入進(jìn)行計(jì)算。寬度不同的卷積核,可能捕捉到不同個(gè)數(shù)的相鄰詞的相關(guān)性。接下來(lái)對(duì)輸出的所有結(jié)果進(jìn)行時(shí)序最大池化,將輸出值展平并拼接為向量。最后全連接層將該向量變換為有關(guān)各類(lèi)別的輸出并用丟棄層應(yīng)對(duì)過(guò)擬合。Text-CNN模型結(jié)構(gòu)如圖1所示。
圖1 Text-CNN 網(wǎng)絡(luò)結(jié)構(gòu)
BERT[16]原是一種Transformer的雙向編碼器,通過(guò)對(duì)左右上下文共有的條件計(jì)算,通過(guò)預(yù)先訓(xùn)練對(duì)來(lái)自無(wú)標(biāo)注文本進(jìn)行深度雙向表示。預(yù)先訓(xùn)練的該模型,通常只需一個(gè)額外的輸出層,對(duì)其微調(diào),即可生成新模型,其核心是Transformer模型。Transformer模型[17]解決了LSTM采用的語(yǔ)言模型所存在的不能雙向?qū)ι舷挛膬?nèi)容編碼、并行化計(jì)算,及LSTM遷移學(xué)習(xí)較差的問(wèn)題。它有6個(gè)Encoder 層及6個(gè)Decoder層,用多頭的自注意力機(jī)制對(duì)文本編碼。因本文只關(guān)注文本編碼任務(wù),僅介紹Encoder層。該層由一個(gè)多頭自注意力層和一個(gè)全連接層組成。
多頭注意力層:輸入xi并仿射變換,如式(1)所示。
Wq,j、Wk,j、Wv,j均為可學(xué)習(xí)參數(shù)并且都通過(guò)隨機(jī)正態(tài)分布初始化。用qi,j分別對(duì)輸入序列中的元素對(duì)應(yīng)的ki,j進(jìn)行注意力機(jī)制計(jì)算。記注意力函數(shù)為Att,如式(5)所示。
將結(jié)果由softmax函數(shù)計(jì)算概率,即:
對(duì)不同的頭進(jìn)行自注意力計(jì)算,即:
bi為輸入序列的第i個(gè)序列元素經(jīng)過(guò)注意力后的向量,wo通過(guò)正態(tài)分布初始化。
連接層: 包括殘差層及層正則化層。
(1)殘差層:將上一層輸入與輸出疊加,記上一層輸入為x,輸出為f(x),則輸出為:
(2)層正則化層:相對(duì)批量正則化,它綜合考慮一層所有維度輸入,即它針對(duì)單個(gè)訓(xùn)練樣本,不依賴(lài)其他數(shù)據(jù),計(jì)算該層的平均輸入值和輸入方差,然后用規(guī)范化操作來(lái)轉(zhuǎn)換各個(gè)維度的輸入。
全連接層:一個(gè)兩層的全連接網(wǎng)絡(luò),輸入經(jīng)過(guò)線性變換再通過(guò)ReLU(·)函數(shù)后傳入第二個(gè)全連接層中,如式(10)所示。
其中,W1、W2為通過(guò)隨機(jī)正態(tài)分布初始化的可訓(xùn)練參數(shù),b1、b2為偏置項(xiàng)。2數(shù)據(jù)增強(qiáng)方法論文EDA[18]指出,通過(guò)數(shù)據(jù)增強(qiáng)技術(shù),能有效改善算法在較小數(shù)據(jù)集上的性能。故本文采用該方法對(duì)源數(shù)據(jù)集進(jìn)行處理,使其有更大容量,減小過(guò)擬合的可能性。本文用兩種方式進(jìn)行增強(qiáng): 第一種是基于自然語(yǔ)言處理的方式,即通過(guò)EDA方式進(jìn)行數(shù)據(jù)擴(kuò)充;第二種是因本文數(shù)據(jù)集為成對(duì)標(biāo)注,即標(biāo)注兩個(gè)提問(wèn)是否相似,因相似關(guān)系有傳遞性,本文提出了一種方法:基于相似性傳遞進(jìn)行數(shù)據(jù)增強(qiáng),并基于并查集算法,對(duì)傳遞后是否產(chǎn)生標(biāo)注的不一致性做檢測(cè),對(duì)不一致的數(shù)據(jù)進(jìn)行排除,避免導(dǎo)致模型訓(xùn)練不準(zhǔn)確?;谙嗨菩詡鬟f主要是指成對(duì)數(shù)據(jù)集通過(guò)相似與不像似的關(guān)系傳遞,從而達(dá)到數(shù)據(jù)增強(qiáng)。如A與B相似,B與C相似。則得到A與C相似。對(duì)于該增強(qiáng)方式,本文通過(guò)并查集方法擴(kuò)容,但可能出現(xiàn)與標(biāo)注數(shù)據(jù)不一致問(wèn)題。本文通過(guò)算法1解決該問(wèn)題。
Simhash[19]用于完成億級(jí)網(wǎng)頁(yè)去重任務(wù)。對(duì)于大規(guī)模數(shù)據(jù)集,逐次比對(duì)非常耗時(shí),故對(duì)于大規(guī)模數(shù)據(jù)集,算法性能將很重要。它也被用于大規(guī)模檢索任務(wù),通過(guò)局部敏感哈希,將文本映射到一個(gè)哈希碼,加快檢索。但其在短文本上性能較差,且醫(yī)學(xué)文本有較多專(zhuān)有名詞與否定詞,不能很好抽取其語(yǔ)義。本文借鑒它的思想,將文本通過(guò)特征提取,變成一個(gè)二進(jìn)制哈希碼,根據(jù)最近鄰檢索方法,實(shí)現(xiàn)快速檢索。本文構(gòu)建Inception-Hash-CNN模型解決該問(wèn)題,它是一個(gè)孿生網(wǎng)絡(luò)結(jié)構(gòu)模型,實(shí)現(xiàn)了端到端訓(xùn)練。先通過(guò)改進(jìn)的文本卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行文本特征抽??;然后由哈希生成網(wǎng)絡(luò)實(shí)現(xiàn)二進(jìn)制哈希碼生成。
3.1.1 整體網(wǎng)絡(luò)結(jié)構(gòu)
孿生網(wǎng)絡(luò)通過(guò)訓(xùn)練網(wǎng)絡(luò)得到函數(shù),該函數(shù)能將輸入映射到目標(biāo)空間,并計(jì)算輸入空間的語(yǔ)義距離。它是共享權(quán)重的網(wǎng)絡(luò)結(jié)構(gòu),接受兩個(gè)輸入,輸出值一般表示語(yǔ)義距離。因本文數(shù)據(jù)集為成對(duì)表示,所以采用該網(wǎng)絡(luò)構(gòu)建模型,用它的公共參數(shù)做特征提取進(jìn)行哈希碼生成。其中按照功能可以分為特征抽取網(wǎng)絡(luò)與哈希生成網(wǎng)絡(luò)。整體網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 Inception-Hash-CNN 整體網(wǎng)絡(luò)結(jié)構(gòu)
3.1.2 特征抽取網(wǎng)絡(luò)
基于文本卷積神經(jīng)網(wǎng)絡(luò),并結(jié)合被大量應(yīng)用的Inception[20]機(jī)制,提出一種用于文本特征抽取的網(wǎng)絡(luò),共七層。第一層為輸入層,輸入為句子,輸出其對(duì)應(yīng)的詞嵌入構(gòu)成的矩陣。第二層為卷積層,分別設(shè)定卷積窗口大小為 3、4、5,用于特征提取。第三層為批量歸一化層[21],增加模型泛化能力,以及加快收斂。第四層也為卷積層,再次提取特征。第五層為池化層,用最大池化,增加感受野,減少參數(shù)數(shù)量。第六層為Inception層,對(duì)第二層及第六層的輸出進(jìn)行Inception,使其兼顧到細(xì)節(jié)信息及語(yǔ)義信息。下面將詳細(xì)對(duì)該網(wǎng)絡(luò)進(jìn)行介紹:①輸入層,用于接收輸入,并將其中的詞替換為詞嵌入向量,構(gòu)成矩陣。其本質(zhì)為一個(gè)查找表。其中矩陣的行維度為輸入長(zhǎng)度,列維度為詞向量維度,且嵌入式詞向量為可訓(xùn)練的,因文獻(xiàn)[15]表明使用 fine-tune性能有提升。②卷積層的目標(biāo)是提取句中局部特征。通過(guò)不同的滑動(dòng)窗口,獲得更全面的局部信息,以更好地提取特征向量。分別選取窗口大小為 3、4、5 的卷積核,對(duì)第一步得到的句子的嵌入詞向量矩陣進(jìn)行卷積。計(jì)算如式(11)所示。
其中,C為輸出,W為卷積核參數(shù),通過(guò)隨機(jī)正態(tài)分布初始化,x為輸入,b為偏置,f(·)為ReLU激活函數(shù)。
為了避免過(guò)擬合,添加了批量歸一化層。它不僅加快了模型收斂速度,且能緩解深層網(wǎng)絡(luò)中梯度彌散的問(wèn)題,使訓(xùn)練該模型更容易。同時(shí)對(duì)卷積層進(jìn)行批量歸一化。對(duì)卷積的多個(gè)通道,需要對(duì)這些通道的輸出都做批量歸一化,且每個(gè)通道都有獨(dú)立的拉伸和偏移參數(shù),并均為標(biāo)量。即若一個(gè)batch有m個(gè)樣本,卷積后輸出長(zhǎng)度為x,詞向量長(zhǎng)度為l,通道數(shù)為c,批量歸一化是對(duì)每個(gè)通道中m×x×l個(gè)元素進(jìn)行歸一化。其中歸一化過(guò)程如下:考慮一個(gè)有m個(gè)樣本的小批量,經(jīng)過(guò)卷積得到新的批量,這里將結(jié)果記為x= {x1,x2,…,xm},xi為該批量中的一個(gè)樣本,求該批量均值及方差。其中,記均值為ub,方差為σb,計(jì)算如式(13)、式(14)所示。
其中的平方計(jì)算是按元素求平方。然后對(duì)xi標(biāo)準(zhǔn)化,計(jì)算如式(15)所示。
ε是很小的數(shù),且ε> 0,其作用是使分母不為0。批量歸一化層還引入兩個(gè)可學(xué)習(xí)參數(shù):γ和β,拉伸為γ,偏移為β,這兩參數(shù)和xi大小一樣,且都通過(guò)隨機(jī)正態(tài)分布初始化,由式(16)得到結(jié)果。
其中,?表示按元素乘法,yi表示批量歸一化的結(jié)果。
因卷積后生成的特征向量仍有較高尺寸,不利于全連接,需加入池化層增大感受野。本文選的是最大池化,即在窗口內(nèi)找到最大值。池化窗口大小設(shè)為3。
通常淺層部分保留細(xì)節(jié)信息,深層部分保留語(yǔ)義信息,由多個(gè)卷積核提取不同尺度的信息進(jìn)行融合,能得到更好表征。因醫(yī)療提問(wèn)專(zhuān)有詞較多,需要一定細(xì)節(jié)信息,且否定詞也較多,所以需語(yǔ)義信息。故本文采用Inception層融合細(xì)節(jié)及語(yǔ)義。即將兩個(gè)卷積層的輸出拼接,并把不同大小的Inception結(jié)果拼接,作為該層輸出,供之后展平層及哈希生成網(wǎng)絡(luò)使用。
3.1.3 哈希生成網(wǎng)絡(luò)
該網(wǎng)絡(luò)對(duì)特征抽取網(wǎng)絡(luò)得到的特征進(jìn)行哈希生成。它由用多層感知機(jī)構(gòu)成,即通過(guò)多層感知機(jī)將特征抽取網(wǎng)絡(luò)得到的結(jié)果,映射為哈希碼向量,其中長(zhǎng)度的設(shè)置會(huì)在實(shí)驗(yàn)中討論。最后的哈希生成層,采用tanh函數(shù),相對(duì)sgn函數(shù),它更平滑。tanh函數(shù)如式(17)所示。
其中β為超參數(shù),用于減小中間值的出現(xiàn),使生成值接近 1 或-1。
本文提出兩種改進(jìn)的BERT模型的文本匹配方法。其一,基于BERT孿生結(jié)構(gòu)的Siamese-BERT,該模型主要關(guān)注語(yǔ)義層匹配任務(wù)。其二,參考Google論文中相似文本多分類(lèi)方法,構(gòu)建BERT-Match,該模型利用Transformer的多頭注意力機(jī)制,更關(guān)注局部匹配,供文本匹配及訓(xùn)練使用。
3.2.1 Siamese-BERT模型
因BERT在多項(xiàng)自然語(yǔ)言處理任務(wù)中的出色表現(xiàn),在其基礎(chǔ)上,本文提出基于BERT的語(yǔ)義匹配模型。由孿生網(wǎng)絡(luò)結(jié)構(gòu),實(shí)現(xiàn)有監(jiān)督訓(xùn)練以解決相似文本的匹配問(wèn)題及文本特征提取問(wèn)題。本文采取Google提出的BERT-Base結(jié)構(gòu)作為文本的 BERT 模型,其有12層,隱層大小為768,多頭注意力為12,約110個(gè)參數(shù)。
該模型是端到端的模型,輸入是一個(gè)字序列,輸出是兩個(gè)文本的匹配分?jǐn)?shù)。采用孿生網(wǎng)絡(luò)的方式構(gòu)建,即兩個(gè)網(wǎng)絡(luò)共享參數(shù)訓(xùn)練。該模型能解決文本匹配問(wèn)題,也解決了文本特征抽取問(wèn)題,其結(jié)構(gòu)如圖3所示。先是輸入層,接受一個(gè)字序列,然后預(yù)訓(xùn)練BERT模型,該部分模型參數(shù)是共享的,之后取BERT的特殊字符“CLS”所對(duì)應(yīng)詞向量作為該句的特征向量,可得到兩句的特征向量,分別記為u,v。分別取u和v,及相減所得的特征向量u-v,并將其展平作為特征向量,記為x。經(jīng)過(guò)一個(gè)仿射變換降維,降為 1 維,如式(18)所示。
圖3 Siamese-BERT 模型的結(jié)構(gòu)
其中,t為一維特征向量,W是通過(guò)隨機(jī)正態(tài)分布初始化的可訓(xùn)練參數(shù)。將該向量全連接,并通過(guò)Sigmoid 函數(shù)輸出兩個(gè)向量是否相似。Sigmoid 函數(shù)如式(19)所示。
3.2.2 BERT-Match模型
本文參考BERT構(gòu)建的用于多句的分類(lèi)任務(wù)的模型,通過(guò)NSP方法完成句子匹配任務(wù)。NSP是Google在BERT論文中為理解句子間關(guān)系而提出的訓(xùn)練方法。該任務(wù)從語(yǔ)料庫(kù)抽取句子對(duì),即由句子A和B來(lái)生成。B有50%的概率是A的下一句子;50%為隨機(jī)句子。NSP預(yù)測(cè)B是否為A的下一句。該論文表明,NSP方法對(duì)于問(wèn)答及自然語(yǔ)言推理任務(wù)有較大性能提升。因NSP能獲取句子間的信息,這是回歸語(yǔ)言模型無(wú)法直接進(jìn)行捕捉的。
在醫(yī)療文本匹配中,部分關(guān)鍵詞往往是起決定性作用的因素。如疾病名稱(chēng)、癥狀等。該模型可充分利用Transformer的多頭注意力機(jī)制,實(shí)現(xiàn)需要的局部關(guān)鍵詞匹配特點(diǎn)。
本文先在首部加“CLS”作為開(kāi)始標(biāo)記,也將其經(jīng)BERT所輸出向量作為兩句子特征向量;然后加入成對(duì)數(shù)據(jù)的第一句;在兩句間用“SEP”分割,再加入第二句。之后通過(guò)Sigmoid感知機(jī)輸出。BERT-Match模型是端到端的模型,其輸入是一個(gè)字序列,輸出是兩個(gè)文本的匹配分?jǐn)?shù)。模型架構(gòu)如圖4所示。
圖4 BERT-Match 模型架構(gòu)
本文分別選取編輯距離、編輯距離比、Jaro距離和去重子集比率以及語(yǔ)義特征等特征作為文本的統(tǒng)計(jì)特征。
編輯距離:指在兩個(gè)字符串間,由一個(gè)字符串轉(zhuǎn)換成另一個(gè)字符串,所需要的最少編輯操作次數(shù)。
編輯距離比: 由式(20)計(jì)算,其中sum為兩個(gè)字符串的長(zhǎng)度和;ldist表示類(lèi)編輯距離,即在編輯距離中刪除插入操作,距離記為l,但字符替換距離記為2。
Jaro距離:用來(lái)衡量?jī)蓚€(gè)字符串是否相似,為“0”表示兩個(gè)字符串不相似,為“1”表示兩個(gè)字符串相似。距離計(jì)算如式(21)所示。
其中,|s1|、|s2|是兩個(gè)字符串長(zhǎng)度,m是匹配的字符數(shù),t是換位的數(shù)目。
去重子集比率:衡量相同詞占句子的比率。如式(22)所示,其中setl函數(shù)表示得到該集合中的元素個(gè)數(shù)。
語(yǔ)義特征: 用Siamese-BERT模型最后一個(gè)全連接層的結(jié)果作為該特征。其有兩個(gè)語(yǔ)義向量的相似度信息。
最后,將語(yǔ)義特征及統(tǒng)計(jì)特征拼接,構(gòu)成新的特征向量以進(jìn)行特征的融合。
3.3.1 梯度下降提升樹(shù)匹配模型
本文通過(guò)XgBoost系統(tǒng)[22]實(shí)現(xiàn)梯度下降提升樹(shù)模型。它是Boosting方式的集成學(xué)習(xí)算法,將許多樹(shù)模型集成,從而構(gòu)建出一個(gè)很強(qiáng)的分類(lèi)器。每棵樹(shù)其實(shí)是一個(gè)新函數(shù),對(duì)上次預(yù)測(cè)的殘差擬合。當(dāng)訓(xùn)練完成后,可得到k棵樹(shù)。當(dāng)預(yù)測(cè)一個(gè)樣本的分?jǐn)?shù)時(shí),根據(jù)樣本特征,在每棵樹(shù)中,得到其對(duì)應(yīng)的葉節(jié)點(diǎn),每個(gè)葉節(jié)點(diǎn)對(duì)應(yīng)一個(gè)分?jǐn)?shù),最后將每棵樹(shù)對(duì)應(yīng)的分?jǐn)?shù)求和,作為該樣本的預(yù)測(cè)值。XgBoost的目標(biāo)函數(shù)如式(23)、式(24)所示。
本文用加權(quán)平均進(jìn)行模型融合。因本文的模型輸出均為兩個(gè)文本的匹配度,故使用該方法,如式(25)所示。
其中,oi是模型輸出的相似度,wi是該模型融合時(shí)對(duì)應(yīng)的權(quán)重,首先隨機(jī)初始化權(quán)值,然后進(jìn)行迭代,通過(guò)最小化損失函數(shù)來(lái)確定權(quán)重。
4.1.1 實(shí)驗(yàn)數(shù)據(jù)集
本文通過(guò)爬蟲(chóng)從某在線醫(yī)療問(wèn)診網(wǎng)站爬取了42 765條語(yǔ)料,去除低質(zhì)量的問(wèn)題后,得到14 563條語(yǔ)料。取其中3 000對(duì)信息人工標(biāo)注,如果兩個(gè)問(wèn)題相似,則標(biāo)1,否則標(biāo)0。然后由上文所述方式進(jìn)行數(shù)據(jù)增強(qiáng),得到34 534條成對(duì)數(shù)據(jù)作為數(shù)據(jù)集。本文用k折交叉驗(yàn)證的訓(xùn)練方式,按7:2:1進(jìn)行訓(xùn)練集、測(cè)試集、驗(yàn)證集的劃分。
4.1.2 實(shí)驗(yàn)數(shù)據(jù)預(yù)處理
(1) 文本清洗。因文本中有較多字符不易被神經(jīng)網(wǎng)絡(luò)處理,如標(biāo)點(diǎn)符號(hào)等,通過(guò)正則表達(dá)式,進(jìn)行清除處理。
(2) 對(duì)文本進(jìn)行分詞,根據(jù)實(shí)驗(yàn)結(jié)果,用帶有醫(yī)療領(lǐng)域預(yù)訓(xùn)練的pkuseg分詞。
(3) 去除停用詞,針對(duì)提問(wèn)的特點(diǎn),將“醫(yī)生”“你好”“請(qǐng)問(wèn)”等無(wú)意義詞加入停用詞。又因神經(jīng)網(wǎng)絡(luò)不能直接接受分詞數(shù)據(jù),需構(gòu)建詞表,將句子轉(zhuǎn)為索引形式,以輸入神經(jīng)網(wǎng)絡(luò)。
(4) 進(jìn)行詞向量選擇,本文對(duì)Tencent AI Lab Embedding、Word2Vec評(píng)測(cè)。其中Tencent AI Lab Embedding用騰訊發(fā)布的預(yù)訓(xùn)練模型,Word2Vec用在百度百科上訓(xùn)練的預(yù)訓(xùn)練模型[23]。在本文所構(gòu)建的基于TextCNN的baseline模型中,用Tencent AI Lab Embedding訓(xùn)練后得F1為 0.75,用Word2Vec的F1則為0.67,故用Tencent AI Lab Embedding作為詞向量。
4.1.3 實(shí)驗(yàn)評(píng)測(cè)標(biāo)準(zhǔn)
考慮到病例檢出主要關(guān)注是否檢索準(zhǔn)確與相關(guān)文檔的檢出率。本實(shí)驗(yàn)用查準(zhǔn)率(Precision)、查全率(Recall)、F1值(F1-Score)作為評(píng)測(cè)指標(biāo)。
TP為真正例,即應(yīng)被檢索且被檢索的數(shù)量;FP為假正例,即不應(yīng)被檢索但被檢索到的數(shù)量;FN為假負(fù)例,即應(yīng)被檢索但未被檢索的數(shù)量;TN為真負(fù)例,即不應(yīng)被檢索,且未被檢索的數(shù)量。
4.1.4 實(shí)驗(yàn)環(huán)境配置與參數(shù)設(shè)置
實(shí)驗(yàn)環(huán)境的機(jī)器配置:CPU為Intel (R) Xeon(R) Silver 4110 CPU 2.10 GHz * 2;GPU為NVIDIA TITAN XP;內(nèi)存128 GB。
實(shí)驗(yàn)環(huán)境的軟件配置:宿主機(jī)操作系統(tǒng)Ubuntu Server 16.04 64-bit;容器引擎為 Docker CE;用的容器鏡像為Deepo;鏡像中操作系統(tǒng)為Ubuntu 18.04;CUDA用 10.1版本;編程語(yǔ)言為Python 3.6;深度學(xué)習(xí)框架為Pytorch 1.4。
因模型要求輸入矩陣有固定大小,即文本的單詞長(zhǎng)度是固定長(zhǎng)度。本文設(shè)定輸入長(zhǎng)度為70個(gè)單詞。即少補(bǔ)空白詞,多進(jìn)行截?cái)唷?/p>
本文epoch設(shè)為25,batch為256。訓(xùn)練時(shí),本文用Adam優(yōu)化器,學(xué)習(xí)率設(shè)為0.001,betas參數(shù)設(shè)為(0.9,0.999),eps設(shè)為1e-08,L2懲罰項(xiàng)設(shè)置為 0。
4.1.5 實(shí)驗(yàn)結(jié)果及對(duì)比分析
數(shù)據(jù)增強(qiáng)效果: 用基于TextCNN的孿生網(wǎng)絡(luò)模型為基礎(chǔ)模型在不同的數(shù)據(jù)增強(qiáng)下進(jìn)行驗(yàn)證。依次用基于自然語(yǔ)言處理、基于關(guān)系傳遞性及兩者結(jié)合,最后使用本文增強(qiáng)后的數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),結(jié)果如表2所示。
表2 不同數(shù)據(jù)增強(qiáng)方法性能對(duì)比 (單位:%)
可以看出,兩者結(jié)合的結(jié)果最好,所以用數(shù)據(jù)增強(qiáng)對(duì)模型訓(xùn)練的影響進(jìn)行了測(cè)試。先將數(shù)據(jù)進(jìn)行基于關(guān)系傳遞性的數(shù)據(jù)增強(qiáng),再利用自然語(yǔ)言處理對(duì)數(shù)據(jù)增強(qiáng),如圖5所示。
圖5 數(shù)據(jù)集擴(kuò)容大小效果對(duì)比圖
由圖5可知,當(dāng)數(shù)據(jù)增強(qiáng)至18 000時(shí),收益趨于平穩(wěn)。故選擇將源數(shù)據(jù)增強(qiáng)至18 000個(gè)成對(duì)數(shù)據(jù)作為本文數(shù)據(jù)集。
哈希碼長(zhǎng)度對(duì)檢索的影響: 選取長(zhǎng)度為32、48、64、72、84來(lái)實(shí)驗(yàn),用F1值、查準(zhǔn)率、查全率作為衡量標(biāo)準(zhǔn),結(jié)果如表3所示。
表3 不同哈希長(zhǎng)度的性能對(duì)比 (單位:%)
可以看出,當(dāng)哈希碼長(zhǎng)度為64時(shí),查全率最高,因檢出步驟在其他值合理的情況下,更關(guān)注查全率,故選取長(zhǎng)度為64。
模型中卷積窗口大小的選擇對(duì)模型的影響: 選擇(2,3,4),(3,4,5),(4,5,6),(2,3,5)進(jìn)行對(duì)比,用查全率為衡量標(biāo)準(zhǔn),結(jié)果如圖6所示??梢钥闯?,選取(2,3,5)時(shí)查全率最高。
圖6 不同窗口大小的查全率對(duì)比圖
檢索性能: 哈希生成效率會(huì)影響檢索所需時(shí)間。由于用戶(hù)請(qǐng)求通常是單次的,若用消息隊(duì)列,會(huì)使等待時(shí)間線性增加;若用多線程,則當(dāng)有大量并發(fā)請(qǐng)求時(shí),會(huì)導(dǎo)致宕機(jī);且依次處理用戶(hù)請(qǐng)求,不能充分利用GPU的并行性。本文針對(duì)需求,用流方式將請(qǐng)求排隊(duì)組成一個(gè)batch,再進(jìn)行哈希生成。本文對(duì)比了不同方法的哈希生成速度,結(jié)果如表4可知。可以看出,本文的檢索效率,可被用戶(hù)接受,對(duì)于大規(guī)模數(shù)據(jù),有一定的適用性。
表4 不同方法檢索性能對(duì)比
算法對(duì)比: 本文選取ISTR[24],BM25-IDF[25],DMRM[26],GSRM[27]等檢出方法進(jìn)行實(shí)驗(yàn)對(duì)比,結(jié)果如表5 所示。
表5 不同算法性能對(duì)比 (單位:%)
4.2.1 實(shí)驗(yàn)數(shù)據(jù)集
使用與4.1.1節(jié)相同數(shù)據(jù)集對(duì)BERT模型再訓(xùn)練。3 000對(duì)人工標(biāo)注的語(yǔ)料由數(shù)據(jù)增強(qiáng)得到的24 000條成對(duì)數(shù)據(jù),它主要用于Siamese-BERT模型及BERT-Match模型進(jìn)行fine-tune及梯度下降決策樹(shù)相似模型訓(xùn)練使用。按照7:1:2把增強(qiáng)后的成對(duì)數(shù)據(jù)分成訓(xùn)練集、驗(yàn)證集、測(cè)試集。
4.2.2 實(shí)驗(yàn)評(píng)測(cè)標(biāo)準(zhǔn)
因匹配度是[0,1]區(qū)間的數(shù),且數(shù)據(jù)集標(biāo)注為0或1,即匹配或不匹配。因數(shù)據(jù)集可能存在不平衡,同時(shí)應(yīng)兼顧查準(zhǔn)率與查全率,用F1值作為評(píng)測(cè)指標(biāo)。考慮到數(shù)據(jù)平衡性的影響,當(dāng)其輸出匹配度大于γ時(shí)為正樣本,γ是位于[0,1]區(qū)間的數(shù),通過(guò)在驗(yàn)證集以網(wǎng)格搜索的方式得到。
4.2.3 實(shí)驗(yàn)環(huán)境及參數(shù)設(shè)置
實(shí)驗(yàn)環(huán)境同4.1.4節(jié)的介紹。
本文的預(yù)訓(xùn)練模型是Cui等[28]提出的中文預(yù)訓(xùn)練BERT-wwm。該模型在中文維基和通用數(shù)據(jù)中訓(xùn)練,通用數(shù)據(jù)包括百科、新聞、問(wèn)答等數(shù)據(jù),總詞數(shù)達(dá)5.4B,處理后的文本大小約 10 GB。fine-tune階段,batch取32,epoch為10。
4.2.4 實(shí)驗(yàn)結(jié)果及對(duì)比分析
先探究對(duì)模型進(jìn)行遷移再訓(xùn)練的效果。分別在選取不同的epoch的情況下,對(duì)BERT再訓(xùn)練。再對(duì)模型進(jìn)行fine-tune訓(xùn)練,結(jié)果如圖7所示。可以看出,相比不進(jìn)行再訓(xùn)練,進(jìn)行遷移再訓(xùn)練,得分高了1左右,說(shuō)明利用未標(biāo)注數(shù)據(jù)再訓(xùn)練,準(zhǔn)確率有提升。且在第二個(gè)epoch時(shí),效果提升最大,故選擇兩個(gè)epoch,進(jìn)行后續(xù)的fine-tune訓(xùn)練。
圖7 再訓(xùn)練模型性能與 epoch 關(guān)系圖
接著進(jìn)行語(yǔ)義相似特征的選擇實(shí)驗(yàn)。分別將Siamese-BERT與BERT-Match的相似向量(即CLS字符所對(duì)應(yīng)向量)替換入決策樹(shù)中,結(jié)果如表6所示,用Siamese-BERT的相似向量比用BERT-Match的相似向量的F1值高0.2;若兩者拼接,F(xiàn)1值反而下降,可能是因維度過(guò)高導(dǎo)致過(guò)擬合。故選擇 BERT-Match的相似向量作為梯度下降決策樹(shù)的語(yǔ)義向量。
表6 不同語(yǔ)義向量的選擇的性能對(duì)比 (單位:%)
對(duì)比Siamese-BERT、BERT-Match模型、梯度下降決策樹(shù)及融合后模型分別在最好情況下的F1值,結(jié)果如表7所示。
表7 不同模型性能對(duì)比 (單位:%)
由表7知,BERT-Match比Siamese-BERT的F1約高0.02。本文認(rèn)為,主要是BERT-Match可利用多頭注意力機(jī)制實(shí)現(xiàn)兩個(gè)句子間的關(guān)鍵詞的具體對(duì)應(yīng),且相對(duì)于Siamese-BERT,梯度下降決策樹(shù)也有提升,主要是其進(jìn)行了特征工程,提取部分傳統(tǒng)特征用于匹配的作用。最后,用基于權(quán)重均值的多模型融合,又使F1值有不少提升,說(shuō)明本文所提出的模型可行。
最后,將集成學(xué)習(xí)構(gòu)建好的模型,與常見(jiàn)文本匹配方法及部分醫(yī)療文本匹配方法做對(duì)比。對(duì)于中文文本匹配模型,與BiLSTM、BiLSTM-Att、DSSM、ESIM、MatchPyramid 等模型進(jìn)行對(duì)比。其中,BiLSTM模型采用孿生網(wǎng)絡(luò)并使用雙向 LSTM對(duì)文本特征抽??;BiLSTM-Att為融合自注意力機(jī)制的BiLSTM模型;DSSM是用全連接網(wǎng)絡(luò)對(duì)提取的N-Gram匹配的方法;ESIM是阿里提出用于問(wèn)答的模型,該模型運(yùn)用分解注意力實(shí)現(xiàn)對(duì)問(wèn)句的表示及交互的同時(shí)建模;MatchPyramid將匹配矩陣用于文本匹配。對(duì)于醫(yī)療文本,選擇STMT[29]、CNNs[30]作對(duì)比,結(jié)果如表8所示。
表8 匹配性能對(duì)比表 (單位:%)
本文提出了一種兩階段模型。第一階段,通過(guò)對(duì)提問(wèn)生成哈希,用哈希檢索的方法進(jìn)行最近鄰檢索,確定一個(gè)待匹配集合。第二階段,構(gòu)建一個(gè)基于集成學(xué)習(xí)的匹配模型,對(duì)第一階段的檢出結(jié)果進(jìn)行匹配,去除一些匹配度較低的病例,使檢索更加準(zhǔn)確,并且根據(jù)匹配度將病例進(jìn)行排序,使用戶(hù)更容易得到所需的結(jié)果。通過(guò)實(shí)驗(yàn)對(duì)比,本文的兩個(gè)模型的性能相對(duì)于現(xiàn)有模型都有很大的性能提升。在下一步的研究工作中,會(huì)考慮如何將結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行統(tǒng)一的檢索等問(wèn)題。