奕利泰,董 晨(通訊作者),牛梓雨,劉思嘉,倪曉雅,羅紹愷
(天津理工大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院 天津 300384)
醫(yī)療大數(shù)據(jù)時(shí)代的到來(lái),深度學(xué)習(xí)、自然語(yǔ)言處理等技術(shù)在醫(yī)學(xué)領(lǐng)域發(fā)展迅速,基于人工智能的醫(yī)療問(wèn)答系統(tǒng)正在改變醫(yī)療生態(tài),具有重要的應(yīng)用前景。如何快速、準(zhǔn)確、簡(jiǎn)潔地用自然語(yǔ)言回答用戶(hù)的提問(wèn),成為醫(yī)療問(wèn)答系統(tǒng)中待解決的關(guān)鍵問(wèn)題。傳統(tǒng)的數(shù)據(jù)庫(kù)查詢(xún)反饋的結(jié)果難以滿(mǎn)足速度和準(zhǔn)確度的要求,基于自然語(yǔ)言處理的知識(shí)庫(kù)問(wèn)答相對(duì)于傳統(tǒng)的搜索引擎,能快速反饋給用戶(hù)精準(zhǔn)的回答。本項(xiàng)目將分布在互聯(lián)網(wǎng)中的非結(jié)構(gòu)化的醫(yī)療相關(guān)數(shù)據(jù)整合起來(lái),建立嚴(yán)格結(jié)構(gòu)化的醫(yī)療知識(shí)圖譜,保存在阿里云服務(wù)器端,使用基于雙向Transformer的聯(lián)合學(xué)習(xí)模型執(zhí)行知識(shí)抽取,使用基于深度學(xué)習(xí)的Stack-propagation框架識(shí)別醫(yī)療輸入問(wèn)句,重新轉(zhuǎn)化為知識(shí)圖譜的查詢(xún)索引,快速反饋給用戶(hù)最精準(zhǔn)的醫(yī)療答案。
系統(tǒng)采用阿里云服務(wù)器+客戶(hù)端架構(gòu),以Android APP形式實(shí)現(xiàn)與用戶(hù)交互。云服務(wù)器主要功能有:數(shù)據(jù)采集、知識(shí)圖譜構(gòu)建、聯(lián)合學(xué)習(xí)模型構(gòu)建、問(wèn)句理解模型構(gòu)建、醫(yī)療信息檢索、用戶(hù)安全管理以及系統(tǒng)性能評(píng)價(jià)。Android客戶(hù)端主要功能有:智能醫(yī)療問(wèn)答、好友社交推薦、飲食計(jì)劃、運(yùn)動(dòng)健康推薦、醫(yī)療資訊推送及機(jī)構(gòu)檢索、醫(yī)療詞條查詢(xún)等。
圖1 系統(tǒng)功能模塊
本項(xiàng)目使用Scrapy框架和Webdriver爬取垂直醫(yī)療網(wǎng)站中的信息,使用Neo4j圖數(shù)據(jù)庫(kù)構(gòu)建醫(yī)療知識(shí)圖譜[1]供服務(wù)器檢索,主要包括疾病、癥狀、藥物、治療方式、醫(yī)療器械等節(jié)點(diǎn)。結(jié)構(gòu)化數(shù)據(jù)使用配合爬蟲(chóng)的腳本直接置入Neo4j圖數(shù)據(jù)庫(kù)中[2],非結(jié)構(gòu)化以及半結(jié)構(gòu)化數(shù)據(jù)需要經(jīng)過(guò)知識(shí)抽取后,再置入Neo4j圖數(shù)據(jù)庫(kù)中。數(shù)據(jù)庫(kù)規(guī)模涵蓋33645個(gè)醫(yī)療信息實(shí)體節(jié)點(diǎn)以及290881個(gè)實(shí)體關(guān)系,足以提供問(wèn)答系統(tǒng)的數(shù)據(jù)需求,通過(guò)構(gòu)建知識(shí)圖譜可進(jìn)一步分擔(dān)算法壓力。
由于醫(yī)療問(wèn)題的特殊性,構(gòu)建知識(shí)圖譜要求精確度高。一般情況下,除少部分專(zhuān)門(mén)處理過(guò)的數(shù)據(jù)(例如百科)之外,對(duì)于同一疾病的癥狀的描述在語(yǔ)料庫(kù)中過(guò)于多樣化,需要設(shè)計(jì)模型篩取關(guān)鍵詞,構(gòu)建最精確最簡(jiǎn)潔的知識(shí)圖譜。本項(xiàng)目使用基于雙向Transformer的聯(lián)合學(xué)習(xí)模型執(zhí)行知識(shí)抽取。
深度學(xué)習(xí)模型將使用Python語(yǔ)言的Tensorflow2.0框架訓(xùn)練,再部署到阿里云服務(wù)器中運(yùn)行。同時(shí),引入stack-propagation框架的思想,令關(guān)系抽取的模型直接使用實(shí)體識(shí)別的輸入,使兩種任務(wù)不同的訓(xùn)練集和驗(yàn)證集同時(shí)調(diào)整一個(gè)模型,讓神經(jīng)網(wǎng)絡(luò)最大化地貼合醫(yī)療應(yīng)用。通過(guò)這種訓(xùn)練方式可讓兩個(gè)應(yīng)用各自的網(wǎng)絡(luò)層得到對(duì)方學(xué)習(xí)到的特征。相比流水線的任務(wù),基于雙向Transformer的實(shí)體識(shí)別和關(guān)系抽取的聯(lián)合學(xué)習(xí)模型,構(gòu)建的模型冗余參數(shù)更少,運(yùn)行速度更快。
輸入問(wèn)句中的實(shí)體以及問(wèn)句意圖有較強(qiáng)的相關(guān)性,為了準(zhǔn)確理解醫(yī)療輸入問(wèn)句,采用基于Stack-propagation的意圖識(shí)別及槽填充算法[3]實(shí)現(xiàn)醫(yī)療輸入問(wèn)句解析。首先進(jìn)行意圖識(shí)別,由于問(wèn)句的長(zhǎng)短不統(tǒng)一,使用Bi-LSTM可以處理長(zhǎng)度不統(tǒng)一的數(shù)據(jù)向量,Bi-LSTM即是雙向循環(huán)的LSTM層。LSTM是在循環(huán)神經(jīng)網(wǎng)絡(luò)中增加了一條供先前節(jié)點(diǎn)學(xué)習(xí)到的特征流通的通路,由一個(gè)遺忘門(mén)和一個(gè)記憶門(mén)決定該特征的去留[4]。通過(guò)該方法循環(huán)神經(jīng)網(wǎng)絡(luò),可以彌補(bǔ)不能保留上下文信息的缺點(diǎn),輸入經(jīng)過(guò)Bi-LSTM層后計(jì)算自注意力C。
得到C后與Bi-LSTM]串聯(lián)輸出合并成一個(gè)向量,將意圖分類(lèi)轉(zhuǎn)化為單詞分類(lèi)。
槽填充任務(wù)依賴(lài)于意圖識(shí)別的結(jié)果[5],將分類(lèi)后的單詞填入槽位。仍采用單向LSTM作為解碼器,對(duì)于第i時(shí)刻的隱層狀態(tài)表示如下:
直接將第i個(gè)時(shí)刻的意圖分類(lèi)結(jié)果作為輸入指導(dǎo)槽位的預(yù)測(cè),提升問(wèn)答的準(zhǔn)確度。智能問(wèn)答展示頁(yè)面如圖2所示:
圖2 智能問(wèn)答展示頁(yè)面
將用戶(hù)x檢索過(guò)的醫(yī)療健康等關(guān)鍵詞集定義為N(x),則N(u)∩N(v)表示檢索過(guò)的關(guān)鍵詞,投票為1,未檢索過(guò)的關(guān)鍵詞投票為0。N(u)∪N(v)則表示檢索過(guò)的關(guān)鍵詞的并集的元素個(gè)數(shù)。Jaccard系數(shù)的實(shí)現(xiàn)是將醫(yī)療關(guān)鍵詞向量堆疊成矩陣,將其中一方的矩陣轉(zhuǎn)置。因?yàn)橄蛄块L(zhǎng)度統(tǒng)一可以點(diǎn)積,點(diǎn)積后返回相似的關(guān)鍵詞個(gè)數(shù)。系統(tǒng)定期抽取各個(gè)用戶(hù)的檢索歷史存儲(chǔ)在云服務(wù)器,利用Jaccard系數(shù)計(jì)算醫(yī)療、飲食和運(yùn)動(dòng)關(guān)鍵詞之間的相似度,進(jìn)行健康飲食、運(yùn)動(dòng)方案推薦。飲食推薦展示頁(yè)面如圖3所示:
圖3 飲食推薦展示頁(yè)面
智能醫(yī)療問(wèn)答系統(tǒng)架構(gòu)分為五個(gè)層級(jí),分別是中臺(tái)、后臺(tái)、數(shù)據(jù)分析、索引引擎以及數(shù)據(jù)庫(kù)。中臺(tái)主要攔截并捕獲客戶(hù)端請(qǐng)求。后臺(tái)主要實(shí)現(xiàn)數(shù)據(jù)交互。數(shù)據(jù)分析層主要解析醫(yī)療輸入問(wèn)句。搜索層為Neo4j數(shù)據(jù)庫(kù)服務(wù)器提供知識(shí)圖譜的搜索索引。數(shù)據(jù)庫(kù)層采用關(guān)系型數(shù)據(jù)庫(kù)Mysql及圖數(shù)據(jù)庫(kù)Neo4j實(shí)現(xiàn)。采集3000條問(wèn)答作為測(cè)試集,對(duì)比使用關(guān)鍵詞匹配的醫(yī)療問(wèn)答,智能醫(yī)療問(wèn)答系統(tǒng)的問(wèn)答準(zhǔn)確率可達(dá)90%。