編輯整理:葉祺 出品平臺(tái):DataFunTalk 主要內(nèi)容包括:
1. 關(guān)于丁香園 丁香園的起點(diǎn)是打造一個(gè)專業(yè)的醫(yī)學(xué)學(xué)術(shù)論壇,為醫(yī)生,、醫(yī)學(xué)生及其他醫(yī)療從業(yè)者提供一個(gè)信息交流的平臺(tái),,同時(shí)也推出了一系列移動(dòng)產(chǎn)品以提供優(yōu)質(zhì)的醫(yī)學(xué)信息服務(wù)。 目前,,丁香園圍繞著醫(yī)生和大眾來發(fā)展,,業(yè)務(wù)覆蓋這兩類人群的日常需求。對(duì)醫(yī)生為主的醫(yī)療從業(yè)者來說,,會(huì)涉及到日常的學(xué)術(shù)問題,、經(jīng)驗(yàn)分享、疑難病例的討論以及查閱藥品說明書,、診療指南等等,。對(duì)大眾來說,包括線上問診,、科普知識(shí),、健康商城等服務(wù),。 2. 搜索場(chǎng)景的支持 搜索作為丁香園的基礎(chǔ)服務(wù),需要支持多個(gè)社交與工具類的應(yīng)用,,主要包括:丁香園論壇,、用藥助手、丁香醫(yī)生,、丁香家商場(chǎng)等主要App,。處理的文本數(shù)據(jù)需跨越大眾和專業(yè)醫(yī)學(xué)這兩個(gè)領(lǐng)域,涉及的業(yè)務(wù)線也需處理不同的場(chǎng)景,。 這里我們舉了幾個(gè)比較有代表性的場(chǎng)景,,前三個(gè)是面向?qū)I(yè)醫(yī)學(xué)背景的。
3. 垂直領(lǐng)域下的思考 ① 話題性 我們觀察到的第一個(gè)點(diǎn):醫(yī)療健康領(lǐng)域的內(nèi)容普遍存在著話題性,。 左邊第一張圖是醫(yī)學(xué)的新聞事件,,這與大多數(shù)的普通新聞比較類似。新聞事件會(huì)天然形成一個(gè)話題,。比如'新冠疫苗最新進(jìn)展',,用戶會(huì)圍繞這個(gè)話題產(chǎn)生一些相關(guān)的搜索行為,,如搜索'肺炎'、'柳葉刀'等潛在的,、需要獲取的話題意圖。 第二張圖是我們想要談?wù)摰?,在醫(yī)療領(lǐng)域比較特殊的話題性,。因?yàn)樵卺t(yī)療領(lǐng)域關(guān)于癥狀相關(guān)的表述會(huì)非常多,或者用專業(yè)的表述我們會(huì)叫它'臨床表現(xiàn)',。這里再解釋一下'臨床表現(xiàn)'的含義:你可以理解成生病后身體的一些癥狀,,比如,頭疼,、發(fā)熱,、嘔吐等。醫(yī)生在做病例討論時(shí),,常常會(huì)拋出他們認(rèn)為比較關(guān)鍵,,但又很讓他們困擾、值得討論的臨床表現(xiàn),,如'術(shù)后出血引起的血腫',、'右下腹感染病變'、'胸部多發(fā)病變',。所以當(dāng)用戶發(fā)起一個(gè)討論時(shí),,某些'臨床表現(xiàn)'的詞也會(huì)自然形成一個(gè)話題。但是這些話題相關(guān)的詞并不像開放領(lǐng)域中的詞有那么明顯的邊界,。舉個(gè)例子,,在開放領(lǐng)域中,'梅西獲得2019年金球獎(jiǎng)'這樣的話題相關(guān)的實(shí)體,,如'梅西',、'2019年金球獎(jiǎng)',在搜索時(shí)比較容易避免搜索的關(guān)鍵詞與用戶實(shí)際關(guān)注的事件間的差異,。但在上述的例子中,,'腹腔鏡'與'術(shù)后血腫'相關(guān),但是與'腹腔鏡'相關(guān)的其他疾病和手術(shù)也非常多,,同時(shí)也包含了其他非常多的復(fù)雜邏輯,。所以,我們認(rèn)為醫(yī)療健康領(lǐng)域的內(nèi)容普遍存在著話題性,。 最后一張圖是面向大眾的科普,,這塊比較容易理解。醫(yī)療話題的底層是由許多復(fù)雜邏輯與細(xì)節(jié)組成的,。當(dāng)用戶提問'坐月子能不能洗澡'時(shí),,如果只回答'能'或者'不能'顯然是不夠的,,而是需要組成一個(gè)話題來討論或者用更加友好的方式來回答。 ② 醫(yī)療話題本身的復(fù)雜,、嚴(yán)肅性 對(duì)于醫(yī)學(xué)知識(shí)本身的復(fù)雜性,,在處理面向醫(yī)生的文本數(shù)據(jù)時(shí),是不得不面對(duì)的問題,。例如,,這是在丁香園中的一則病例討論。這位醫(yī)生詳細(xì)描述了在工作中遇到的一則病例,,其中包括了非常多的專業(yè)術(shù)語,。我們用了一個(gè)簡(jiǎn)單的實(shí)體抽取方法進(jìn)行抽取可以獲得'腹脹'、'腹瀉'這樣的疾病癥狀詞,。但是全文的信息量不僅在于這些實(shí)體詞上,,也有相當(dāng)一部分是存在于這些詞之間,復(fù)雜的邏輯關(guān)系,。在常見的搜索方法中,,我們會(huì)用詞的倒排索引來完成文章檢索這件事,但是倒排索引在執(zhí)行過程中很難保證主題不會(huì)發(fā)生偏移,。在理想情況下,,我們更希望抽象出更具概括性的標(biāo)簽來結(jié)構(gòu)化這些數(shù)據(jù)。 ③ 普通用戶與專業(yè)醫(yī)療從業(yè)者的認(rèn)知差距 除了醫(yī)療話題在主題上不好做結(jié)構(gòu)化,,在處理面向大眾的文本時(shí),,認(rèn)知層面的差異也是個(gè)棘手的問題。醫(yī)學(xué)知識(shí),、醫(yī)學(xué)詞匯都具有高度的專業(yè)性,。比如用戶在表述中,一個(gè)非醫(yī)學(xué)背景的人會(huì)用'痘痘',、'青春痘',、'閉口'、'痘印'這樣的詞去表述自己的癥狀,。在醫(yī)生看來這些癥狀會(huì)是'尋常痤瘡',、'毛囊口角化異常'等專業(yè)詞匯。當(dāng)我們想要幫助大眾檢索到想要的信息時(shí),,就要想辦法跨過這些表述不一樣的情況,,因此我們?cè)谌齻€(gè)方面做了一些努力: 4. NLP技術(shù)布局 ① 知識(shí)圖譜構(gòu)建 知識(shí)圖譜的構(gòu)建。主要目的是保證底層醫(yī)學(xué)數(shù)據(jù)的準(zhǔn)確性,。由專業(yè)的,、有醫(yī)學(xué)背景的知識(shí)庫(kù)同事來維護(hù),包括:疾病,、癥狀,,手術(shù),、藥品、非手術(shù)治療等醫(yī)學(xué)概念與60多種醫(yī)學(xué)關(guān)系,。同時(shí),,我們NLP組也會(huì)用算法來抽取,最后再以一種算法加人工審核的方式不斷的補(bǔ)充實(shí)體詞,、實(shí)體關(guān)系和實(shí)體屬性,。 ② 內(nèi)容畫像 內(nèi)容畫像。我們會(huì)盡可能的完善內(nèi)容畫像的建設(shè),。除了基礎(chǔ)信息的收集,、長(zhǎng)文本的信息抽取,,也包括結(jié)合知識(shí)圖譜和一些圖算法構(gòu)建更為抽象的標(biāo)簽值或者特征向量,。 ③ 短文本理解 短文本理解。我們需要努力優(yōu)化關(guān)于短文本理解的效果,,這里包括對(duì)短文本完成關(guān)鍵信息的抽取以及根據(jù)這些關(guān)鍵信息配合下游任務(wù),,來完成特征抽取、語義擴(kuò)展,,以及垂直業(yè)務(wù)相關(guān)的分類任務(wù)等,。 5. 基本思路 現(xiàn)在回到我們分享的主題。關(guān)于短文理解,,由兩個(gè)非常樸素的部分組成:
1. 常見的識(shí)別困境 識(shí)別準(zhǔn)確度的問題: 首先是錯(cuò)別字的問題,。錯(cuò)別字問題在各個(gè)領(lǐng)域的搜索中都是非常常見的問題,。常見的錯(cuò)別字原因,可能來自于拼音使用的錯(cuò)誤,。比如'頭癬'這個(gè)詞,,大多數(shù)人會(huì)念成'頭蘚','蘚'字就會(huì)常常出沒在相關(guān)的搜索query里,。另外,,還會(huì)出現(xiàn)和拼音相關(guān)的識(shí)別問題,比如'頭xian'和'頭xuan',,這種漢字和拼音混搭的情況,。 認(rèn)知層面的不同: 非醫(yī)學(xué)科班的同學(xué)看到'復(fù)發(fā)性阿弗他口炎'這個(gè)詞肯定是一臉懵。其實(shí)這個(gè)詞和感冒一樣是非常常見的問題,,就是我們平常說的'口腔潰瘍',。但對(duì)于大眾來說,,會(huì)有更多通俗的表述,如'口瘡',、'口腔潰瘍',、'口腔潰爛'、'嘴巴起泡'等等,。如果是醫(yī)學(xué)背景的用戶,,他大概率會(huì)知道這個(gè)專業(yè)名詞,但是會(huì)出現(xiàn)其他的一些錯(cuò)誤,,比如表述上會(huì)缺其中的一個(gè)組成部分或者缺一到兩個(gè)字,,如'阿弗他口炎'或者'復(fù)發(fā)性口炎'。還有種情況就是把通俗表述和缺省表述混搭的表述方式,,如'阿弗他潰瘍',、'阿弗他口腔潰瘍'。 專業(yè)醫(yī)學(xué)詞匯的詞干經(jīng)常非常長(zhǎng): 在我們這個(gè)例子中,,'癥狀性動(dòng)脈粥樣硬化性椎動(dòng)脈起始部狹窄'這個(gè)詞長(zhǎng)達(dá)18個(gè)字,。仔細(xì)觀察,你會(huì)發(fā)現(xiàn)它其實(shí)具有明顯的組成部分,,它是通過不同的組成部分拼接成的長(zhǎng)詞,。如果我們?cè)谧R(shí)別一個(gè)短文本中這樣的長(zhǎng)詞沒有被合并在一起,而是按照不同的組成部分分開的話,,那系統(tǒng)就會(huì)默認(rèn)每個(gè)組成部分具備單獨(dú)的語義,,那顯然非常容易檢索到不相關(guān)的內(nèi)容。 2. 短文本理解藍(lán)圖 為了改善上面提到的幾種情況,,我們嘗試把短文本理解的流程拆成了五個(gè)步驟,。前四個(gè)步驟主要解決實(shí)體識(shí)別的準(zhǔn)確率問題,包括文本糾錯(cuò),、名詞短語抽取,、NER ( 命名實(shí)體識(shí)別 ) 和實(shí)體鏈接。第五步需要結(jié)合底層數(shù)據(jù)的積累,,包括知識(shí)圖譜的建設(shè)以及結(jié)合具體業(yè)務(wù)場(chǎng)景的數(shù)據(jù)來完成query語義上的擴(kuò)充,。 3. 文本糾錯(cuò) 首先是文本糾錯(cuò),目前業(yè)界標(biāo)準(zhǔn)的流程有三個(gè)步驟:
4. 名詞短語抽取 完成糾錯(cuò)之后會(huì)正常進(jìn)入一個(gè)分詞的階段,。分詞器常規(guī)會(huì)帶上一個(gè)業(yè)務(wù)詞典,。但是因?yàn)轭A(yù)測(cè)的文本上下文語境或者詞在詞典中會(huì)存在一些嵌套現(xiàn)象,有時(shí)包含一個(gè)完整語義的短語還是會(huì)被分開,。因此,,第二步的目標(biāo)就是做名詞短語抽取工作,把分詞階段已經(jīng)被分開的詞重新組合在一起,。大致的思路: 構(gòu)建一個(gè)有標(biāo)注的數(shù)據(jù)集,,用PMI等統(tǒng)計(jì)量特征,借助automated prhase算法進(jìn)行正負(fù)樣本拆分,,然后訓(xùn)練分類器,,最后用一個(gè)對(duì)長(zhǎng)度做修正的函數(shù)對(duì)名詞短語打分。在本例中'芒果過敏'就是我們最終想要的名詞短語,。 5. 命名實(shí)體識(shí)別 當(dāng)然,,名詞短語也沒有辦法完全保證所有實(shí)體或者需要保留完整語義的短語結(jié)構(gòu)完整。有些名詞會(huì)被分詞器切得太碎,,名詞短語可能也合并不回來,,所以需要流程的第三步,用NER作為補(bǔ)充。 這里的NER在結(jié)構(gòu)上采用了業(yè)界的標(biāo)配:CRF+Bi-LSTM,。在離線場(chǎng)景,,允許NER耗時(shí)長(zhǎng)一點(diǎn),可加一些BERT之類的encoder作為輸入,。目前在我們的場(chǎng)景,,該NER可以支持20多種醫(yī)學(xué)實(shí)體的識(shí)別。 看到這里有小伙伴可能會(huì)疑惑:為什么不把名字性短語和實(shí)體詞同時(shí)train到NER中,。其實(shí)我們也注意到:學(xué)界從18年開始,,在這個(gè)方向有了很多的方案??偟膩碚f有兩種思路:
這兩種方案在效果上確實(shí)有提升,,但坦率地說,因?yàn)閹в衛(wèi)attice這種結(jié)構(gòu),,計(jì)算復(fù)雜度一般都比較高,。我們這里談?wù)摰氖嵌涛谋纠斫猓鳛橐粋€(gè)相對(duì)前置的任務(wù),,可能這樣的復(fù)雜度耗時(shí)還是長(zhǎng)了些,。所以在實(shí)際的應(yīng)用中我們還是會(huì)使用基礎(chǔ)版NER模型作為我們流程中的一個(gè)組件。 6. Mention提取 我們現(xiàn)在還是以基礎(chǔ)版的組件繼續(xù)往下走,,以上的幾個(gè)步驟為后續(xù)做實(shí)體鏈接框定了詞的邊界,。候選詞一般我們用常見的搜索引擎,比如solr,,給它做一個(gè)倒排索引,,然后我們?cè)倌胢ention去找目標(biāo)實(shí)體詞。如果是下面的情況,,醫(yī)學(xué)名詞的span非常長(zhǎng),,mention提取時(shí),其實(shí)就失敗了,。這種失敗也會(huì)直接導(dǎo)致實(shí)體鏈接的失敗,,所以我們的思路就是在召回階段再做一層補(bǔ)充的策略。 7. 召回增強(qiáng)與實(shí)體鏈接 前面提到醫(yī)學(xué)中的長(zhǎng)詞通常會(huì)由多個(gè)組成成分進(jìn)行組合,。這種組成成分其實(shí)可以根據(jù)一些先驗(yàn)知識(shí)把它先規(guī)范好,。相似的思路,我們?cè)谌A東理工大學(xué)的一篇工作中也看到了。文章作者是根據(jù)SNOMEDCT中'臨床發(fā)現(xiàn)'的分類層次體系把癥狀詞拆分成了不同的組成,。我們也根據(jù)自身的場(chǎng)景完善了12個(gè)類別的成分原子詞,,比如例子中的'主動(dòng)脈瓣退行性病變',然后可以分成:身體部位+特征詞+性質(zhì)修飾詞,。 同時(shí),,不同的組成成分在位置上存在的是有限的組合,通過對(duì)已有的一些實(shí)體詞挖掘,,最后我們可以固定1300多種組合,。后續(xù)我們?cè)賹⑦@些原子詞和組成成分相互連接,構(gòu)成一個(gè)graph,。然后固定的組成成分的組合類型,,就為圖中的有向邊提供了數(shù)據(jù)來源。我們拿這個(gè)graph可以使用LINE,、node2vec之類的方式train一個(gè)embedding,。我們采用的是清華大學(xué)19年在IJCAI上發(fā)表的矩陣分解的方法??梢钥吹轿覀僼rain完graph embedding后,,相似度聚合的一些結(jié)果??梢园l(fā)現(xiàn)以這種方式結(jié)構(gòu)化一個(gè)疾病詞可以保證疾病詞在結(jié)構(gòu)上的穩(wěn)定,。也就是說,原始的排列組合想要表述的是某種腫瘤,,我們需要保留這個(gè)腫瘤作為base詞的結(jié)構(gòu),。 在召回策略中除了使用詞典命中的結(jié)果,、NER的結(jié)果,、名詞短語的結(jié)果,現(xiàn)在可以補(bǔ)充原子詞召回的結(jié)果,,這樣可以提高長(zhǎng)詞被命中的概率,。最后,對(duì)候選詞進(jìn)行LTR ( learning to rank ) 的排序,,獲得top1結(jié)果,。 1. 語義從何而來 當(dāng)我們解決了識(shí)別準(zhǔn)確率的問題后,接下來就是如何解決短文本的理解問題,。我們認(rèn)為短文本之所以難理解,,不僅在于長(zhǎng)度較短,同時(shí)也因?yàn)槲谋局械恼Z法相對(duì)比較自由,,且需要在非常有限的信息中解析出語義的邏輯,。所以我們分析了在我們搜索場(chǎng)景中用戶日常表述的特點(diǎn),除了單一實(shí)體詞為搜索query外,其他大致可以分為這四種情況:
來看一個(gè)具體的query——'短T1長(zhǎng)T2','短T1長(zhǎng)T2'是什么意思呢,?其實(shí)'T1'和'T2'分別代表著核磁共振中縱向與橫向磁場(chǎng)變化的一個(gè)常量系數(shù),,兩種磁場(chǎng)變化最終會(huì)影響骨骼與肌肉臟器在片子中的成像情況。這樣的表述,,通常會(huì)出現(xiàn)在病例影像討論的帖子中,,用戶搜索的目的可能是想找類似的病例討論,也可能是想學(xué)習(xí)一下核磁共振讀片的方法,。所以其語意從短短的幾個(gè)字是無法從字面上獲取的,。所以,這些語義從何而來,?可以很樸素的理解,,信息始終只有兩個(gè)來源:一個(gè)是人的先驗(yàn)知識(shí),源自我們專業(yè)醫(yī)學(xué)知識(shí)圖譜的構(gòu)建,;第二是行為數(shù)據(jù),,對(duì)應(yīng)的就是我們?nèi)粘5臉I(yè)務(wù)日志以及文本上的挖掘,。在理想的情況下,我們希望'短T1長(zhǎng)T2'可以轉(zhuǎn)換成,,如:核磁共振的成像原理,、影像、核醫(yī)學(xué),、神經(jīng)內(nèi)科這樣的主題,,然后在這樣的主題下再去關(guān)聯(lián)到具體資訊的文章。 2. 醫(yī)學(xué)健康領(lǐng)域Concept 我們還可以換個(gè)思路,,比如'短T1長(zhǎng)T2'本身就是一個(gè)非常具有代表性的術(shù)語,,是不是我們可以把它直接作為一種介于把實(shí)體詞與話題之間的一種抽象?這樣既保證了關(guān)聯(lián)性又具備了可解釋性,。 3. Concept挖掘 根據(jù)這樣的思路,,我們?cè)诙∠銏@的場(chǎng)景中,主動(dòng)挖掘了大量的醫(yī)學(xué)concept,。具體的方法: 首先,,我們收集了一批用戶的搜索點(diǎn)擊日志,然后在啟動(dòng)階段定義一些種子模板,,再利用模板和N-gram的策略產(chǎn)生一批短語,,這些短語不會(huì)直接拿來用,因?yàn)槠渲袝?huì)有一些邊界問題或者模板帶來的語義漂移問題,。所以對(duì)生成的這些原始concept,,我們會(huì)做一個(gè)分類器,作為在質(zhì)量上的約束,,留下質(zhì)量比較高的concept,。此外,再把生成的concept重新放到Query或者句子中,,讓它產(chǎn)生新的模板,。這里模板的產(chǎn)生,我們也借鑒了韓家煒老師在MetaPAD上的一些工作,。 最后,,我們?cè)賹?duì)pattern做一層過濾,新的模板就可以重新再去抽concept,。該算法整個(gè)結(jié)構(gòu)就可以形成一個(gè)bootstrap的循環(huán)。這里安利一下騰訊團(tuán)隊(duì)郭老師等在去年KDD上發(fā)表的工作,,工作做得非常的漂亮,,也給我們提供了非常多的啟發(fā)。 4. 結(jié)合專業(yè)醫(yī)學(xué)知識(shí)與Concept 利用挖掘到的concept詞,,我們可以聯(lián)合底層的專業(yè)的醫(yī)學(xué)實(shí)體和上層的業(yè)務(wù)數(shù)據(jù)構(gòu)建起一個(gè)完整的業(yè)務(wù)圖譜,,其中一對(duì)一的邊計(jì)算的都是以Bayes模型為基礎(chǔ),,會(huì)考慮全局統(tǒng)計(jì)量或者文本的局部特征;生成的多對(duì)多的邊之后,,我們參考王仲遠(yuǎn)老師的一些相關(guān)工作中提到的MDL ( Minimum Description Length ) 的原則做concept的篩選,。這樣,論壇帖子,、藥品信息,、商城的商品就可以通過中間的concept層完成了實(shí)體鏈接。 1. Query擴(kuò)展 在得到業(yè)務(wù)圖譜之后,,我們?cè)谒阉鲀?yōu)化中就可以非常容易的利用它,。比如,搜索優(yōu)化中常見的Query擴(kuò)展任務(wù),。 目前Query擴(kuò)展的問題主要有兩類方法:第一種是利用query詞和document詞的相關(guān)性構(gòu)建一個(gè)貝葉斯模型,,擴(kuò)展的結(jié)果就是document詞或者是document中出現(xiàn)的一些詞組,這樣會(huì)幫助在召回階段擴(kuò)大潛在用戶想要的文本,。第二種方法,,是把它作為一種翻譯模型,從query詞翻譯到document詞,。 早期比較樸素的方案是用EM算法找兩類詞的對(duì)齊關(guān)系,,現(xiàn)在新的方案都是上神經(jīng)網(wǎng)絡(luò)train一個(gè)生成模型。在我們有了concept層之后,,用一些很簡(jiǎn)單的策略就能有不錯(cuò)的效果,,比如我們會(huì)直接使用相關(guān)性的方式,也就是剛才提到的第一類方法去建模,,就可以把原始query向concept層上擴(kuò)展,。比如'哈薩克斯坦',就可以擴(kuò)展出'新冠疫情'或'不明肺炎',;同樣,,在電商場(chǎng)景下,我們可以利用擴(kuò)展的concept和其他的實(shí)體關(guān)系做一個(gè)二級(jí)擴(kuò)展,,比如'產(chǎn)褥墊'可以擴(kuò)展出'待產(chǎn)包',,然后再?gòu)拇a(chǎn)包擴(kuò)展出'衛(wèi)生巾'、'紙尿褲',。這樣的應(yīng)用其實(shí)也帶了一點(diǎn)推薦的意思,。 2. 標(biāo)簽生成增強(qiáng) 我們?cè)谖谋窘Y(jié)構(gòu)化上也可以利用concept做一些提升,文本結(jié)構(gòu)化對(duì)于提升搜索效果起到了非常重要的作用,。有了concept之后可以幫助我們從抽象的層面完成對(duì)文本打標(biāo)簽,。業(yè)界中比較好的方案,是先用一個(gè)TransE之類的知識(shí)表示模型,,把知識(shí)圖譜train出Embedding,,然后將這些Embedding融合進(jìn)LDA的模型中,。在模型中,會(huì)用vMF分布代替原來的高斯分布來處理實(shí)體詞的部分,。這樣我們就會(huì)對(duì)一篇,,如'麻醉不良習(xí)慣'的討論帖子抽出'麻醉醫(yī)學(xué)'和'麻醉的不良習(xí)慣'這樣的關(guān)鍵詞。 最后,,總結(jié)一下短文本理解需要做的幾項(xiàng)工作:
|
|