朱曉旭,林鴻飛,曾澤淵
(大連理工大學 計算機科學與技術(shù)學院,遼寧 大連 116024)
目前,藥品不良反應(yīng)(adverse drug reactions,ADRs)已經(jīng)成為美國第四高的死亡原因,僅次于心臟病、糖尿病、艾滋病的疾病[1]。研究表明,由藥物引起的不良反應(yīng)同時帶來了公共衛(wèi)生問題,每年帶來的死亡人數(shù)和住院人數(shù)以百萬計,并且大約每年有七十五億美元的相關(guān)費用[2-4]。藥物不良反應(yīng)作為生物醫(yī)學界乃至社會關(guān)注的熱點問題,已經(jīng)引起世界的高度重視。但實際上在臨床試驗中不可能調(diào)查所有可以使用藥物的條件和環(huán)境,因此進行藥物不良反應(yīng)的檢測問題至關(guān)重要。
隨著互聯(lián)網(wǎng)的快速普及,像Twitter這樣的社交媒體已經(jīng)成為用戶及患者之間進行分享知識和交流情感的主要平臺。在這個平臺上,使用者會討論他們患病吃藥物的相關(guān)經(jīng)歷和感受,其中包括處方藥的使用、副作用以及治療效果等,這為我們的檢測提供了大量的數(shù)據(jù)。與傳統(tǒng)的醫(yī)學報告相比,社交媒體上的這些信息會更充分,更具有時效性而且傳播更快。到目前為止,從社交媒體中進行藥物不良反應(yīng)的自動檢測的相關(guān)數(shù)據(jù)和語料還相對較少,所以生成對抗學習、半監(jiān)督[5]和無監(jiān)督的發(fā)展和研究顯得至關(guān)重要。
2015年,Sarker and Gonzalez[6]利用手動提取句子中單個單詞的特征,然后通過機器學習算法支持向量機(SVM)進行藥物不良反應(yīng)實驗,在實驗結(jié)果中可以看出傳統(tǒng)的機器學習算法在文本分類任務(wù)中存在一定局限。在2016年,Huynh等人[7]利用卷積神經(jīng)網(wǎng)絡(luò)(CNN)提取局部序列窗口特征,在一定程度上增強對文本的分類結(jié)果,但是效果并不明顯。在2017年的The Social Media Mining for Health (SMM4H)共享任務(wù)評測中,許多參賽隊伍都利用當前流行的SVM和CNN來實現(xiàn)藥物不良反應(yīng)的分類。雖然傳統(tǒng)的神經(jīng)卷積網(wǎng)絡(luò)存在局部感知、權(quán)重共享和多卷積核的優(yōu)點,但是其很容易丟失特征之間的空間位置關(guān)系以及不考慮任何單詞或局部模式的順序。Hinton[8]提出的通過放射變換和動態(tài)路由協(xié)議的膠囊網(wǎng)絡(luò)則有效地解決了這類問題,使得每個神經(jīng)元的輸出不再僅僅是一個標量值,而是一個向量包含特征的一些屬性,每個膠囊的模長能夠代表這個特征發(fā)生的概率。因此,本文提出一種基于膠囊網(wǎng)絡(luò)的深度學習算法,盡最大努力減少由于藥物不良反應(yīng)對社會造成的影響,同時也減少領(lǐng)域?qū)<覍Υ嬖谒幬锊涣挤磻?yīng)的句子進行標注,從而為社會帶來便利。
早期,在進行文本分類時,通常使用詞袋模型,詞頻-逆文件頻率(TF-IDF)以及N-gram等特征作為機器學習模型的特征輸入,其中常用的機器學習算法有支持向量機(SVM)[9]、邏輯回歸模型(LR)[10]、樸素貝葉斯(NB)[11]等。但是,基于統(tǒng)計的機器學習方法有一個較為明顯的弊端,通常需要依賴于費時費力的特征工程構(gòu)建和較弱的適應(yīng)性和遷移性。
深度神經(jīng)網(wǎng)絡(luò)的提出大大提高了在文本分類任務(wù)上的性能,例如卷積神經(jīng)網(wǎng)絡(luò)(CNN)和長短時記憶網(wǎng)絡(luò)(LSTM)。2014年Kim提出多通道卷積神經(jīng)網(wǎng)絡(luò)進行句子分類[12],該實驗是將固定的預訓練詞向量和微調(diào)的詞向量分別當作一個通道作為神經(jīng)網(wǎng)絡(luò)的輸入,再經(jīng)過池化和正則化得到最終的特征提取向量,該模型在4項任務(wù)中都提高了性能。2015年提出使用字符級神經(jīng)網(wǎng)絡(luò)(Convnets)進行文本分類,實驗結(jié)果也優(yōu)于傳統(tǒng)方法[13]。在2016年Joulin等提出一種簡單而且快速有效的分類方法fastText,同時將N-gram模型融入特征中來提高效率[14]。雖然深度神經(jīng)網(wǎng)絡(luò)比傳統(tǒng)的機器學習在實驗性能上有所改善,但是存在特征空間關(guān)系缺失以及建模效率低的缺點[8],原因是必須在大小隨維數(shù)增加指數(shù)增長的復制檢測器和以類似指數(shù)方式增加標記訓練集的體積之間進行選擇,同時不管任何單詞或局部模式的順序,使得深度神經(jīng)網(wǎng)絡(luò)方法在文本分類任務(wù)中有一定的局限性。
2017年Hinton提出了膠囊網(wǎng)絡(luò)(Capsule Network),以神經(jīng)元向量來代替?zhèn)鹘y(tǒng)深度神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元節(jié)點,用動態(tài)路由協(xié)議代替深度卷積網(wǎng)絡(luò)中最大池化的方法訓練全新的神經(jīng)網(wǎng)絡(luò)。與CNN中的最大池化不同,膠囊網(wǎng)絡(luò)不會丟棄區(qū)域內(nèi)實體之間的準確位置信息,在文本分類中保留了語義信息和各種特征之間的空間關(guān)系,同時致力于檢測特征和它的各種變種。目前,膠囊網(wǎng)絡(luò)的有效性已經(jīng)在手寫體MNIST數(shù)據(jù)集上已經(jīng)得到了證實[7],訓練速度快而且準確率高。
表1 數(shù)據(jù)存儲格式
本文研究的主要目的為從社交媒體中檢測出具有藥物不良反應(yīng)的評論,該研究屬于自然語言處理、文本挖掘領(lǐng)域的研究,采用的數(shù)據(jù)集是The Social Media Mining for Health (SMM4H)共享任務(wù)中的數(shù)據(jù)集,完成藥物不良反應(yīng)的檢測任務(wù)。因此本文的系統(tǒng)主要包括三部分:數(shù)據(jù)獲取模塊、特征提取模塊和分類器模塊,如圖1所示。
本文基于Scrapy程序包搭建爬蟲平臺,根據(jù)SMM4H共享任務(wù)中公布的Twitter中用戶帖子的ID號進行獲取對應(yīng)的帖子,將爬下來的數(shù)據(jù)統(tǒng)一存儲到文本文件中,存儲的格式如表1所示。
該部分手動提取自然語言處理任務(wù)中常用的詞向量,Part-Of-Speech(POS)位置標記等特征,同時由于社交媒體中用戶拼寫錯誤以及表達不規(guī)范等問題,增加對charCNN特征的抽取。除此之外,考慮到本任務(wù)是對藥物不良反應(yīng)的分類任務(wù),對藥物名和情感詞等特征主題詞的標記會使實驗性能有所提高,將這些特征進行融合和拼接得到最終的特征向量。將得到的特征向量輸入到長短時記憶(LSTM)網(wǎng)絡(luò)進行句子表示,然后再經(jīng)過膠囊網(wǎng)絡(luò)的動態(tài)路由協(xié)議迭代得到膠囊。其中每個膠囊代表一個高級特征,每個膠囊都輸出一個向量,其大小對應(yīng)該特征存在的概率值。
經(jīng)膠囊網(wǎng)絡(luò)的扁平層輸出輸送到softmax激活函數(shù)進行分類,選擇發(fā)生概率大的作為分類器的輸出。即評論中若與藥物副作用相關(guān),則標簽為1;反之,標簽則為0,從而達到了通過提取的生物醫(yī)學特征以及文本挖掘特征進行藥物不良反應(yīng)檢測的效果。
本文應(yīng)用的模型由Twitter評論中的詞特征表示和Twitter分類器兩部分組成。其中第一部分由詞向量,字符級向量,POS特征,情感詞等多種特征構(gòu)成,第二部分由雙向LSTM神經(jīng)網(wǎng)絡(luò)和膠囊網(wǎng)絡(luò)組成,在一定程度上可以改善當前機器學習和卷積神經(jīng)網(wǎng)絡(luò)的不足,具體如圖2所示。
該模型中的特征表示由CharCNN、詞向量、POS標記、藥物名稱以及情感詞特征聯(lián)合組成,這為檢測藥物不良反應(yīng)事件提供了較好的基礎(chǔ)。我們將預處理后的Twitter評論存儲在一個.txt文件中,記作D。
D=(T1,T2,T3,…,Tn)
(1)
其中T1,T2…Tn表示文件中的每一個Twitter評論,最終通過分類器判斷該句子是不是含有藥物不良反應(yīng)的論評。
圖2 模型圖Fig.2 Model diagram
2.2.1 分布式文本表示
目前,在自然語言處理領(lǐng)域詞向量的表示方法有兩種,分別是傳統(tǒng)的獨熱表示方法(one-hot representation)和分布式表示方法(Distributed Representation,Embedding)。其中獨熱表示詞向量方法由高維向量組成,但是存在的問題是忽略了單詞之間是有語義關(guān)系和相似度的。分布式表示方法則是通過訓練文本將語言中的每一個單詞映射到固定長度的向量,然后將這些詞向量形成一個詞向量空間,通過詞之間在該空間上的距離判斷其相似度,如圖3所示。
圖3 分布式詞向量的表示方法Fig.3 Distributed word vector representation
本文利用Word2Vec[13]工具通過對wiki百科進行詞向量的訓練,Word2Vec工具具有兩種工作模式,分別是Skip-gram模型和連續(xù)的詞袋模型(CBOW),文中利用CBOW模型進行訓練,隨機初始化,然后將單詞或者字詞映射到同一個坐標系下,利用神經(jīng)網(wǎng)絡(luò)模型進行特征學習,得到連續(xù)的數(shù)值向量,因此該向量蘊含了豐富的上下文語義信息,對文本分類任務(wù)起著重要作用,其在一定程度上決定分類任務(wù)的上限。具體公式如下所示。本次實驗的窗口C取為5,詞匯表的大小為V,則輸入層可表示為{x1,x2,x3,x4,x5},可以先計算出隱藏層的輸出見式(2)。
(2)
該輸出h是對輸入向量作加權(quán)平均,其中W是輸入層到隱藏層的權(quán)重矩陣。接著計算在輸出層每個節(jié)點的輸入,見式(3)。
(3)
(4)
2.2.2 CharCNN
除了詞向量以外,在自然語言處理問題上詞向量的選擇也同樣重要。字符級別的特征對于在形態(tài)和語義信息上表示有著較大的優(yōu)勢,尤其面對Twitter上常常出現(xiàn)的縮寫和拼寫錯誤等,它起到可以糾正和識別作用。例如,前綴dis-通常在英文中是否定的意思,表示不贊同;后綴-ing通常是現(xiàn)在分詞形式,表示正在或者將要發(fā)生的動作。在實驗中首先構(gòu)建由符號和字母組成的字母表,對應(yīng)使用one-hot表示共統(tǒng)計了87個字符,當出現(xiàn)不存在的字符時候,另加全零向量表示。每個單詞wi用字符表示為wi=(c1,c2,c3,…,cn),然后通過神經(jīng)網(wǎng)絡(luò)的卷積層和最大池化層進行訓練優(yōu)化參數(shù),最終生成可供模型使用的字符級別的特征向量。
2.2.3 POS標記
詞性(POS)標記在藥物不良反應(yīng)的分類任務(wù)中也起著舉足輕重的作用,通常描述一個詞在上下文中的作用,同時詞的特性和位置一定程度上蘊含了句子的信息。更重要的一點,在此任務(wù)中,藥物名稱和藥物不良反應(yīng)的表述通常有著自己特定的POS標記(如名詞)。在該模型中我們應(yīng)用的是自然語言處理工具包nltk中的Tokenize進行分詞和pos_tag來詞性標記,然后將標記完的詞性作為模型輸入的特征之一,與其他特征進行串聯(lián)拼接。
2.2.4 藥物名和情感詞
說到藥物不良反應(yīng),當然離不開藥物,所以檢測句子中是否含有藥物名稱是判斷藥物不良反應(yīng)的關(guān)鍵因素,只有句子中出現(xiàn)相關(guān)的藥物名稱,才有可能和藥物不良反應(yīng)有關(guān)。此外,還需要關(guān)注情感詞的出現(xiàn),因為藥物不良反應(yīng)的評論中用戶通常會表達出一定的不滿或者悲傷甚至絕望的情感。例如,“Metformin has made me very ill for a very long time. It feels good to be alive and not taking that fucking poison”,我們可以很清楚地看到,發(fā)該帖子的用戶一定被二甲雙胍藥物折磨得很痛苦。本文提出的模型應(yīng)用SentiWordNet_3.0.0情感詞典和SIDER 4.1醫(yī)學藥典來進行抽取Twitter中每句帖子的藥物名和情感詞,以此作為訓練模型的另一個特征。
藥物不良反應(yīng)的分類器由兩部分組成,第一部分是雙向長短時記憶網(wǎng)絡(luò),第二部分是膠囊網(wǎng)絡(luò)。
2.3.1 LSTM網(wǎng)絡(luò)
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是解決序列數(shù)據(jù)問題的一種有效的方法,主要分為三層,分別是輸入層、隱層以及輸出層,其工作核心為每個輸入對應(yīng)隱層節(jié)點,而在隱含層之間形成線型序列,但是循環(huán)神經(jīng)網(wǎng)絡(luò)由于在時間上參數(shù)共享,經(jīng)常會出現(xiàn)梯度消失或者梯度爆炸問題。本文采用的是LSTM模型,它有效地解決了簡單循環(huán)神經(jīng)網(wǎng)絡(luò)的梯度爆炸或者梯度消失問題,然而LSTM自循環(huán)的權(quán)重是不固定的,它是根據(jù)上下文來確定權(quán)重值,更好地處理了長距離依賴問題。
LSTM引入了輸入門、遺忘門和輸出門,由輸入門控制當前計算的新狀態(tài)以多大程度更新到記憶單元中;遺忘門控制前一步記憶單元中的信息有多大程度被遺忘掉;輸出門控制當前的輸出有多大程度上取決于當前的記憶單元,進而實現(xiàn)了對較長序列的語義長期和短期記憶。具體公式如下:
it=σ(Wixt+Uiht-1+Vict-1)
(5)
ft=σ(Wfxt+Ufht-1+Vfct-1)
(6)
ot=σ(Woxt+Uoht-1+Voct-1)
(7)
ct=ft×ct-1+it×tanh(Wcxt+Ucht-1)
(8)
ht=ot×tanh(ct)
(9)
其中,it代表輸入門,ft代表遺忘門,ot代表輸出門,ht代表隱含層狀態(tài)節(jié)點,ct代表記憶單元,xt是當前時刻t的輸入,σ是logistic激活函數(shù),W、U、V是權(quán)重矩陣,其中Vi、Vf、Vo是對角矩陣。
2.3.2 膠囊網(wǎng)絡(luò)
針對傳統(tǒng)深度學習CNN中存在的易丟失特征之間的空間位置關(guān)系和建模效率低的問題,Hinton在2017年提出膠囊網(wǎng)絡(luò)。膠囊網(wǎng)絡(luò)顧名思義就是由一系列的膠囊組成,每一個膠囊代表一種比較高級別的特征,輸出是一個矢量,其幅度代表該高級特征存在的概率。實驗中我們選用了10個膠囊,每個膠囊的維度設(shè)置為16,并且把路由迭代的次數(shù)設(shè)置為3。
(10)
每一個膠囊sj的總輸入是對所有預測向量的加權(quán)求和得到,這一步的關(guān)鍵是通過迭代動態(tài)路由找到耦合關(guān)系cij。公式見式(11)。
(11)
表2 算法
與CNN中ReLU激活函數(shù)不同,膠囊網(wǎng)絡(luò)中用的是擠壓函數(shù)Squash,作用是把這個sj向量縮放在0到單位長度1之間。公式見式(12)。
(12)
為了處理膠囊網(wǎng)絡(luò)中膠囊之間的關(guān)系,Hinton引入動態(tài)路由機制,詳細算法如表2所示。
其中在前向傳播時,b的初始值設(shè)置為0。cij與b的關(guān)系見式(13)。
(13)
2.3.3 分類器層
膠囊網(wǎng)絡(luò)的扁平層(C)通過連接權(quán)重W得到加權(quán),見式(14)。
Y=WC
(14)
然后經(jīng)過softmax激活函數(shù)進行分類,選擇較大的概率值作為分類結(jié)果。見式(15-16)。
(15)
(16)
針對所提出來的方法,本文進行了兩個實驗:實驗一是以機器學習中的支持向量機SVM和傳統(tǒng)深度學習中的CNN方法以及加了self-attention機制的模型為基線,從而說明本文提出來的基于詞特征表示的膠囊網(wǎng)絡(luò)模型可以有效地進行藥物不良反應(yīng)的檢測;實驗二是證明用于詞表示的每一個特征都是有作用的,是缺一不可的。
本文的研究內(nèi)容是藥物不良反應(yīng)的檢測任務(wù),是自然語言處理中常見的分類任務(wù),因此對于該系統(tǒng)性能我們可以用準確率(P)、召回率(R)兩個參數(shù)進行評估,而F1值是對準確率和召回率的綜合評價指標,本實驗選擇用F1值作為參數(shù)評估。其計算公式如公式(17-19)所示。
(17)
(18)
(19)
其中TP表示將藥物不良反應(yīng)正確分類的句子,FN表示將含有藥物不良反應(yīng)預測為沒有不良反應(yīng)的句子,FP表示將不含有不良反應(yīng)的句子預測為藥物不良反應(yīng)的句子,TN表示正確預測不含藥物不良反應(yīng)的句子。
本次實驗用的語料集在2017年的SMM4H共享任務(wù)評測的數(shù)據(jù)集,在2016年的共享任務(wù)基礎(chǔ)上擴展了訓練集。但是由于其提供的是Twitter的ID號而且存在用戶大量刪帖現(xiàn)象,我們一共爬取得到14881條Twitter帖子。在做實驗之前,首先對本次實驗的數(shù)據(jù)集進行了詳細的信息統(tǒng)計,如表3所示。
表3 數(shù)據(jù)集統(tǒng)計
為了驗證論文中提出的方法的有效性,我們做了多個對比實驗,并將實驗結(jié)果與前人實驗結(jié)果進行對比分析,表明了本文實驗結(jié)果的可比性,其實驗結(jié)果如表4所示。
通過對比實驗,可以看出本文提出的基于膠囊網(wǎng)絡(luò)的藥物不良反應(yīng)分類器相比于機器學習算法、傳統(tǒng)深度學習算法均有助于提高分類性能,同時也要比2017年的SMM4H共享任務(wù)中最好的分類結(jié)果高4.2個百分點(表3中用Model[15]表示)。因為卷積神經(jīng)網(wǎng)絡(luò)在對空間信息進行建模過程中,通常需要對特征檢測器復制,這就會使模型的建模效率降低;其次,因為卷積神經(jīng)網(wǎng)絡(luò)往往對空間位置不敏感,因此對于文本句子中像位置信息,語義信息等難以有效地編碼。而膠囊網(wǎng)絡(luò)中以神經(jīng)元向量來代替?zhèn)鹘y(tǒng)深度神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元節(jié)點,用動態(tài)路由協(xié)議代替深度卷積網(wǎng)絡(luò)中最大池化的方法的特點,使得膠囊網(wǎng)絡(luò)相比較于其他神經(jīng)網(wǎng)絡(luò)架構(gòu)更容易找到特征之間的空間位置關(guān)系,并且可以更高效地建立模型,同時也增強模型的健壯性。
表4 實驗結(jié)果對比
本文的模型中應(yīng)用的詞表示特征由詞向量、字符向量、POS標記、藥物名和情感詞組成,實驗一已經(jīng)證明有效地提高了方法的性能。下面通過實驗二來討論這些特征的作用大小,我們做了這些特征有效性的對比測試,分別將如下特征輸入到模型中,經(jīng)過文中提出的LSTM和膠囊網(wǎng)絡(luò)得到的實驗結(jié)果具體如表5所示。
表5 特征有效性對比
可見,一方面,這些特征缺一不可。當詞特征僅僅是分布式詞向量或者CharCNN時分類效果并不好,然而當與其他特征如POS特征、藥物名以及情感詞進行特征融合之后,可以看到效果要比只加一兩個特征性能要好。另一方面,通過實驗也可以看出,僅僅用分布式詞向量特征要比單用CharCNN結(jié)果好,原因是詞向量中包含有更多的語義信息,這是字符級特征向量所不具備的;但是當CharCNN和藥物名、情感詞進行特征融合時要比詞向量和藥物名、情感詞的特征融合效果好,很重要的一個原因是在藥物不良反應(yīng)檢測時,CharCNN可以從Twitter中識別單詞縮寫和錯誤拼寫,加上藥物不良反應(yīng)句子中負面的情感詞可以達到很好的效果。而詞向量中本來就帶有豐富的情感,因此加上情感詞特征性能并沒有大的提高。總之,實驗結(jié)果顯示,將這些特征進行串聯(lián)拼接之后可以使模型的性能更好,對藥物不良反應(yīng)的檢測更準確。
模型中先將提取到的特征經(jīng)過長短時記憶神經(jīng)網(wǎng)絡(luò),然后通過膠囊網(wǎng)絡(luò)和softmax激活函數(shù)對藥物不良反應(yīng)句子進行分類。創(chuàng)新點在于針對傳統(tǒng)機器學習模型和卷積神經(jīng)網(wǎng)絡(luò)模型存在的不足,提出膠囊網(wǎng)絡(luò)來提高實驗的性能。通過設(shè)置對比實驗也證明本文提出豐富的詞表示的動態(tài)路由機制的膠囊網(wǎng)絡(luò)有助于表示多個特征之間的空間關(guān)系,因此可以有效地提高對藥物不良反應(yīng)的分類。
為了從傳播快,時效性高的社交媒體上檢測出含有藥物不良反應(yīng)的句子,本文提出基于長短時記憶網(wǎng)絡(luò)和膠囊網(wǎng)絡(luò)的藥物不良反應(yīng)檢測模型,通過對含有豐富語義信息的詞向量與字符級CharCNN、詞性特征、藥物名以及情感詞特征進行特征融合,使得模型可以進行更加準確地學習。本文研究表明,以社交媒體作為載體,結(jié)合文本分類任務(wù)的特征表示和膠囊網(wǎng)絡(luò)的研究,可以做到有效的藥物不良反應(yīng)檢測,這對改善人類的健康水平有著至關(guān)重大的意義。實驗結(jié)果雖然客觀,但是基于社交媒體做藥物不良反應(yīng)的檢測F1值普遍比較低,這與用戶在帖子中表達的非正式性以及數(shù)據(jù)集的正負例不平衡性有很大關(guān)系,下一步的研究重點在于如何將用戶表達標準化以及解決數(shù)據(jù)集正負例平衡問題,如何利用相關(guān)模型提高系統(tǒng)學習特征的能力等。