付子玉:丁香園醫(yī)療領(lǐng)域圖譜的構(gòu)建與應(yīng)用
- 業(yè)務(wù)場(chǎng)景介紹
- 醫(yī)療圖譜構(gòu)建
- ACL|SMedBERT
- 工業(yè)落地和思考
一、丁香園業(yè)務(wù)場(chǎng)景概述
丁香園起點(diǎn)是打造一個(gè)專業(yè)的醫(yī)學(xué)學(xué)術(shù)論壇,為醫(yī)生、醫(yī)學(xué)生、醫(yī)療從業(yè)者等提供一個(gè)信息交流的平臺(tái)。丁香園的主要用戶是醫(yī)療從業(yè)人員,會(huì)在論壇上發(fā)布考博、規(guī)培分?jǐn)?shù)線、求助醫(yī)療文獻(xiàn)等內(nèi)容。隨著業(yè)務(wù)的不斷擴(kuò)展,發(fā)展出了丁香醫(yī)生、丁香媽媽等APP,為大眾用戶提供了一個(gè)健康信息平臺(tái)。
目前丁香園從早期的醫(yī)生用戶擴(kuò)展到了大眾用戶,實(shí)現(xiàn)了ToD(To Dcotor),ToC雙核心驅(qū)動(dòng),業(yè)務(wù)會(huì)覆蓋這兩類人群的日常需求。比如,對(duì)醫(yī)生為主的醫(yī)療從業(yè)者來說,會(huì)涉及到日常的學(xué)術(shù)問題、經(jīng)驗(yàn)分享、疑難病例的討論以及查閱****品說明書、診療指南等。對(duì)大眾用戶來說,包括線上問診、科普知識(shí)、健康商城等服務(wù)。在2021年,丁香園C端規(guī)模達(dá)到1.2億,醫(yī)生端擁有全國(guó)70%的醫(yī)生作為注冊(cè)用戶。
二、醫(yī)療圖譜構(gòu)建
首先介紹一下丁香園應(yīng)用到的醫(yī)療健康圖譜。醫(yī)療健康圖譜構(gòu)建由專業(yè)的醫(yī)療團(tuán)隊(duì)來維護(hù),有醫(yī)學(xué)背景相關(guān)同事維護(hù)疾病、癥狀、手術(shù)、****品等醫(yī)學(xué)概念以及60多種醫(yī)學(xué)關(guān)系。同時(shí),丁香園nlp組會(huì)用一些算法去抽取和意圖分類等工作,利用算法與人工相結(jié)合的方式對(duì)實(shí)體、關(guān)系、實(shí)體屬性進(jìn)行擴(kuò)充。因?yàn)槎∠銏@業(yè)務(wù)模式較多,需要考慮在圖譜應(yīng)用上如何做遷移、融合工作。
為更好地去分析用戶意圖,構(gòu)建用戶畫像,在實(shí)際工作中我們使用一種Taxonomy概念圖譜。例如,搜索十二指腸潰瘍,丁香醫(yī)生會(huì)給出一個(gè)搜索結(jié)果:“十二指腸潰瘍?cè)趺慈ブ委煛保窍瘍?nèi)科的一個(gè)疾病,可以將其定義為一個(gè)消化內(nèi)科的概念。在丁香園搜索規(guī)培考試,給對(duì)應(yīng)的規(guī)培考試內(nèi)容標(biāo)注相關(guān)的標(biāo)簽,比如成績(jī)查詢、內(nèi)科的標(biāo)簽考試答案等。
概念圖譜會(huì)以一個(gè)四層結(jié)構(gòu)構(gòu)建:
第一層底層是entity實(shí)體層,例如規(guī)培考試、十二指腸潰瘍、腹痛等。
往上一層是instance層,也就是文章內(nèi)容。例如十二指腸潰瘍?cè)趺粗委煛?/span>
concept層是概念層,可以根據(jù)文章的用戶點(diǎn)擊行為、搜索行為、內(nèi)容聚類,抽象到上層的concept概念結(jié)構(gòu),比如十二指腸潰瘍對(duì)應(yīng)的是消化內(nèi)科的一種疾病。
最上面一層,建立與業(yè)務(wù)強(qiáng)相關(guān)的topic層。
利用層級(jí)關(guān)系對(duì)長(zhǎng)短文本進(jìn)行多層次、豐富主題的刻畫,去分析、理解用戶的搜索行為。
之前提到了兩種知識(shí)圖譜的構(gòu)建,接下來介紹如何使用算法去優(yōu)化命名實(shí)體識(shí)別、關(guān)系抽取等。舉一個(gè)命名實(shí)體識(shí)別的例子,如“癥狀性動(dòng)脈粥樣硬化性椎動(dòng)脈起始部狹窄的治療”,常規(guī)NER可能會(huì)把這個(gè)識(shí)別成三個(gè)實(shí)體:
但這整個(gè)長(zhǎng)句是屬于一個(gè)完整的疾病。早期抽取的方式會(huì)充分地理解句中顯式的詞和詞序信息。近幾年采用一些格子結(jié)構(gòu)做LSTM,把詞的表征和潛在的詞信息整合到字符CRF中去。如2018年Lattice提到把每個(gè)字作為詞根或者詞尾加入到模型訓(xùn)練中。到2019年Lattice LSTM把類似的短語(yǔ)用Lexicon的方式把字和詞構(gòu)建一個(gè)graph,再把graph特征融合到NER。但這種方式的復(fù)雜度非常高,而且耗時(shí)長(zhǎng)。在2020年復(fù)旦大學(xué)提到FLAT的方式,引入了Transformer結(jié)構(gòu),利用Transformer的self-attention解決長(zhǎng)文本依賴問題。FLAT可以充分利用Transformer格子結(jié)構(gòu),具備出色的并行化的能力,效率上得到了很大的提升。
圖譜構(gòu)建中肯定涉及關(guān)系抽取工作,早期關(guān)系抽取采用pipeline的方式進(jìn)行,先做實(shí)體識(shí)別再做關(guān)系分類。但是,pipeline的方式可能會(huì)造成實(shí)體識(shí)別錯(cuò)誤,間接會(huì)導(dǎo)致關(guān)系抽取也出現(xiàn)問題。借鑒了《A Novel Cascade Binary Tagging Framework for Relational Triple Extraction》文章聯(lián)合學(xué)習(xí)的方式,實(shí)現(xiàn)二分標(biāo)注的框架。該框架對(duì)object、relation、subject 做函數(shù)映射,而不像以前的方式去做離散的標(biāo)簽。它分為兩個(gè)模塊subject Tagger和 relation-specific object Taggers:subject Tagger先使用一個(gè)二分類去識(shí)別出subject的起始位置和結(jié)束位置,拿到subject去做表示特征,然后根據(jù)關(guān)系做一個(gè)多分類任務(wù)。每一個(gè)關(guān)系,都是一個(gè)二分類識(shí)別。根據(jù)映射得到object起始位置和結(jié)束位置,這樣以一種聯(lián)合的方式拿到實(shí)體關(guān)系三元組。
構(gòu)建概念圖譜首先要解決兩個(gè)問題,第一個(gè)問題是如何抽取concept,第二個(gè)問題是如何構(gòu)建concept之間的層級(jí)關(guān)系,這里借鑒了兩篇論文,分別是騰訊的《A User-Centered Concept Mining System for Query and Document Understanding at Tencent》和阿里的《AliCG: Fine-grained and Evolvable Conceptual Graph Construction for Semantic Search at Alibaba》。
在實(shí)體抽取方面,主要分為頭部和尾部?jī)刹糠帧n^部的instance,由于頭部的文章內(nèi)容豐富,可以用模板去識(shí)別。長(zhǎng)尾部一直都是比較難的問題,可以通過Phrase Mining,或者數(shù)據(jù)標(biāo)注的方式解決。如何構(gòu)建概念間的層次關(guān)系?可以通過用戶的搜索點(diǎn)擊行為去計(jì)算文章和概念的關(guān)聯(lián)程度,根據(jù)關(guān)聯(lián)程度判斷概念之間的層級(jí)。
利用concept層次聯(lián)合底層的專業(yè)醫(yī)學(xué)實(shí)體和上層的業(yè)務(wù),構(gòu)建一個(gè)完整的業(yè)務(wù)圖譜。以貝葉斯模型為基礎(chǔ)去判斷一對(duì)一的邊關(guān)系,考慮全局的統(tǒng)計(jì)量或者文本的局部特征,生成一些多邊的關(guān)系。我們借鑒了王仲遠(yuǎn)老師的一些相關(guān)工作,如MDL的原則等去做concept篩選。例如,論壇帖子、****物、商品信息等可以通過中間的concept層與實(shí)體之間進(jìn)行關(guān)聯(lián)。
三、SMedBERT
接下來介紹去年丁香園NLP組聯(lián)合華師大何曉豐老師團(tuán)隊(duì)在ACL發(fā)表的文章《A Knowledge-Enhanced Pre-trained Language Model with Structured Semantics for Medical Text Mining》。這篇文章在醫(yī)療垂直領(lǐng)域下首次將知識(shí)圖譜的醫(yī)學(xué)實(shí)體和實(shí)體的結(jié)構(gòu)化語(yǔ)義信息引入到預(yù)訓(xùn)練模型中。
SMedBERT優(yōu)化方向主要有兩個(gè),第一個(gè)考慮實(shí)體類別和關(guān)系來豐富語(yǔ)義,第二個(gè)是構(gòu)建knowledge bridge,將有一跳連接關(guān)系的鄰居實(shí)體加入預(yù)訓(xùn)練模型中。
SMedBERT對(duì)于結(jié)構(gòu)信息捕捉,有兩個(gè)創(chuàng)新點(diǎn):
首先是Mention-neighbor Hybrid Attention用來學(xué)習(xí)捕捉異構(gòu)實(shí)體信息。什么是異構(gòu)實(shí)體信息?圖譜中有一個(gè)新冠病毒節(jié)點(diǎn),與它相關(guān)的節(jié)點(diǎn)有疾病癥狀、治療方案、檢測(cè)方法等。將與新冠病毒節(jié)點(diǎn)一跳的相關(guān)實(shí)體取出,根據(jù)type和節(jié)點(diǎn)node信息融合到encoder層。
第二個(gè)創(chuàng)新點(diǎn)是Mention-neighbor Context Modeling,主要是將鏈接實(shí)體的上下文信息做mask處理去預(yù)測(cè)。模型主要由三個(gè)模塊組成T-Encoder、K-Encoder、Pre-training Tasks。首先T-Encoder可以挑選出比較重要的相鄰實(shí)體,使用方法是類似于PageRank的一種方式。其次K-Encoder進(jìn)行mask操作,self attention獲得關(guān)鍵實(shí)體的信息,對(duì)mask任務(wù)進(jìn)行融合。
在訓(xùn)練數(shù)據(jù)方面,我們收集了約5G大小的中文醫(yī)療文本、30億左右的token。在實(shí)驗(yàn)對(duì)比上,選擇了openkg、丁香園的KG、丁香園的RE;在Graph Embedding上選用Trans-R;在驗(yàn)證數(shù)據(jù)上選擇了四組公開數(shù)據(jù)集如CHIP、WebMedQA等進(jìn)行比較;在模型方面選擇了Bert、RoBert、Knowledge-Bert等進(jìn)行比較。從對(duì)比效果上來看準(zhǔn)確率有很高的提升,并且在多個(gè)任務(wù)上都有明顯提升效果,然后對(duì)不同模型進(jìn)行實(shí)體Embedding相似性能力比較。
D1、D2、D3,主要對(duì)不同程度的鄰實(shí)體覆蓋進(jìn)行劃分。如D2使用了高頻重合的實(shí)體,D3是低頻實(shí)體去做比較。實(shí)驗(yàn)表明SMedBert對(duì)具有結(jié)構(gòu)信息的捕捉能力較強(qiáng)。最終我們得到一個(gè)結(jié)論,將相鄰相似實(shí)體、相關(guān)實(shí)體的信息引入到語(yǔ)義信息中,在下游任務(wù)上可以得到很明顯的提升,其中留下了我們的一些思考:我們現(xiàn)在選擇的鄰居實(shí)體都是在一跳或者是兩跳以內(nèi)的,如果有"farther neighboring"遠(yuǎn)端的實(shí)體關(guān)系該如何應(yīng)用?未來可以考慮如何更好地從長(zhǎng)尾低頻的醫(yī)學(xué)實(shí)體學(xué)習(xí)語(yǔ)義信息。
四、工業(yè)落地與思考
接下來介紹目前丁香園在業(yè)務(wù)場(chǎng)景的一些應(yīng)用。
先介紹我們?cè)趦?yōu)化搜索上的底層架構(gòu)。我們嘗試把用戶使用搜索的語(yǔ)義理解任務(wù)拆分成為五個(gè)步驟,每個(gè)步驟解決實(shí)體識(shí)別準(zhǔn)確性的問題,包括文本糾錯(cuò)、名詞短語(yǔ)抽取、命名實(shí)體識(shí)別、實(shí)體鏈接、語(yǔ)義理解。我們會(huì)通過結(jié)構(gòu)化好的圖譜對(duì)語(yǔ)義理解做優(yōu)化,例如進(jìn)行意圖識(shí)別時(shí),可以把graph embedding的特征拿過來,也可以通過推理的方式獲得相關(guān)實(shí)體,還可以進(jìn)行Query聯(lián)想,聯(lián)想相關(guān)的實(shí)體詞,例如用戶提到了某個(gè)品牌的商品,它的主要功能是什么,有什么類似的商品。
我們利用concept結(jié)構(gòu)圖譜對(duì)文本結(jié)構(gòu)化上做了一些提升。文本結(jié)構(gòu)化對(duì)于提升搜索效果起到了非常重要的作用,有了concept之后可以幫助我們從抽象的層面完成對(duì)文本打標(biāo)簽的工作,那業(yè)界中比較好的方案就是先用TransE之類的知識(shí)表示模型,把知識(shí)圖譜train出Embedding,然后將這些embedding融合進(jìn)LDA的模型里面,在模型中,會(huì)用vMF分布代替原來的高斯分布去處理實(shí)體詞的部分。如此以來,我們就會(huì)對(duì)一篇如“麻醉不良習(xí)慣”的帖子中的討論帖子抽出如“麻醉醫(yī)學(xué)”和“麻醉的不良習(xí)慣”這樣的關(guān)鍵詞。
目前Query擴(kuò)展的問題主要有兩類方法:
第一種,利用query詞和document詞的相關(guān)性去構(gòu)建一個(gè)貝葉斯模型,擴(kuò)展的結(jié)果是document詞或document中出現(xiàn)的一些詞組,幫助在召回階段擴(kuò)大潛在用戶想要的那些文本。
第二種,把它作為一種翻譯模型,思路是從query詞翻譯到document詞。早期比較樸素的方案是用一個(gè)EM算法去找兩類詞的對(duì)齊關(guān)系?,F(xiàn)在新的方案都是上神經(jīng)網(wǎng)絡(luò)去train一個(gè)生成模型來做這個(gè)工作。
有了concept層之后,用一些很簡(jiǎn)單的策略就能有不錯(cuò)的效果,比如我們會(huì)直接使用相關(guān)性的方式,也就是第一類方法去建模,就可以把原始query向concept層上擴(kuò)展。比如,“哈薩克斯坦”可以擴(kuò)展出“新冠疫情”或“不明肺炎”;同樣,在電商場(chǎng)景下,我們可以利用擴(kuò)展的concept和其他的實(shí)體關(guān)系做二級(jí)擴(kuò)展,比如“產(chǎn)褥墊”可以擴(kuò)展出“待產(chǎn)包”,然后再?gòu)拇a(chǎn)包擴(kuò)展出“衛(wèi)生巾”“紙尿褲”。這樣的應(yīng)用也帶了一點(diǎn)推薦的意思。
接下來介紹語(yǔ)義匹配,早期語(yǔ)義匹配使用雙塔模型Bi-Encoder實(shí)現(xiàn)。Bi-Encoder優(yōu)勢(shì)是可以將候選集向量進(jìn)行離線計(jì)算,線上預(yù)測(cè)只計(jì)算Context Encoder。但其中有個(gè)問題——把所有的實(shí)體信息放到一個(gè)固定的向量中去,可能會(huì)導(dǎo)致細(xì)粒度的語(yǔ)義缺失,無法精準(zhǔn)地做匹配。于是,出現(xiàn)了Cross Encoder,它類似Bert預(yù)訓(xùn)練的方式,把兩個(gè)句子進(jìn)行一個(gè)拼接,放入Encoder中去,再去打分。這種方式可以達(dá)到很好的語(yǔ)義學(xué)習(xí)效果,但沒辦法實(shí)時(shí),復(fù)雜度比較高,并且比較慢。
前幾年出現(xiàn)Poly Encoder,將Context Encoder多個(gè)向量進(jìn)行self-attention后融合,這種方式比Bi-Encoder更好地保留豐富的語(yǔ)義信息,又將candidate embedding做好離線計(jì)算,再用向量索引方式去做召回和打分。
我們?cè)赑oly Encoder之上做了一些改進(jìn),例如把SMedBERT引入到表示層,并且引入對(duì)比學(xué)習(xí)的優(yōu)化,比較經(jīng)典的是ConSERT和SimCSE,例如美團(tuán)去年提到的一個(gè)對(duì)比學(xué)習(xí)的方法,實(shí)際應(yīng)用中在計(jì)算句子相似度的時(shí)候會(huì)有很高的打分。這樣雖然可以獲得想要的內(nèi)容,但在召回時(shí)不好控制召回的數(shù)量,誤差也比較大。加入對(duì)比學(xué)習(xí)后會(huì)發(fā)現(xiàn)可以更好地解決BERT坍縮問題。
未來挑戰(zhàn)主要有三個(gè)方面:
首先,訓(xùn)練數(shù)據(jù)成本高,因?yàn)獒t(yī)學(xué)領(lǐng)域數(shù)據(jù)資源比較少,如何降低人工成本形成一個(gè)良性的數(shù)據(jù)閉環(huán)是我們首先要做的。
第二,隨著業(yè)務(wù)的不斷擴(kuò)展,當(dāng)出現(xiàn)一個(gè)新的業(yè)務(wù)時(shí)數(shù)據(jù)量會(huì)比較少,怎么提升已有圖譜的復(fù)用性,歷史相關(guān)內(nèi)容怎么去利用,怎么去做高質(zhì)量的圖譜融合。
最后,對(duì)于長(zhǎng)尾低頻的用戶行為,如何更好地理解識(shí)別用戶意圖是未來的一個(gè)挑戰(zhàn)。
五、Q&A
Q1:SMedBert是否有公開?A1:在GitHub上已經(jīng)公開。
Q2:Token Embedding后如何與知識(shí)圖譜進(jìn)行融合?A2:通過Trans方式將知識(shí)圖譜獲得Graph Embedding表示向量與token Embedding進(jìn)行拼接。之前提到的Poly Encoder可以把context encoder做整合進(jìn)行self-attention獲得更多語(yǔ)義信息,再進(jìn)行下游任務(wù)。在過程中不僅做匹配單任務(wù)也對(duì)多任務(wù)進(jìn)行優(yōu)化。之前提到的instance做concept聚類,也可以表示學(xué)習(xí)上的多任務(wù)。
Q3:丁香數(shù)據(jù)來源有哪些?A3:醫(yī)學(xué)書籍、****品說明書、科普文章等。
今天的分享就到這里,謝謝大家。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。