醫療健康領域的短文本理解

導讀: 本次分享的主題爲醫療健康領域的短文本理解,主要介紹在丁香園的業務場景下,短文本理解的技術實踐,並討論知識圖譜技術如何在醫療健康領域的搜索推薦中落地應用,希望能夠給大家的日常工作提供一些思路。

主要內容包括:

  • 丁香園主要的業務和所服務的對象,以及在垂直領域下NLP工作可能需要面對的挑戰
  • 在醫療健康領域短文本理解上的嘗試
  • 結合工業場景,展示一些應用案例

01 業務場景及文本解析困境思考

1. 關於丁香園

丁香園的起點是打造一個專業的醫學學術論壇,爲醫生、醫學生及其他醫療從業者提供一個信息交流的平臺,同時也推出了一系列移動產品以提供優質的醫學信息服務。

目前,丁香園圍繞着醫生和大衆來發展,業務覆蓋這兩類人羣的日常需求。對醫生爲主的醫療從業者來說,會涉及到日常的學術問題、經驗分享、疑難病例的討論以及查閱藥品說明書、診療指南等等。對大衆來說,包括線上問診、科普知識、健康商城等服務。

2. 搜索場景的支持

搜索作爲丁香園的基礎服務,需要支持多個社交與工具類的應用,主要包括:丁香園論壇、用藥助手、丁香醫生、丁香家商場等主要App。處理的文本數據需跨越大衆和專業醫學這兩個領域,涉及的業務線也需處理不同的場景。

這裏我們舉了幾個比較有代表性的場景,前三個是面向專業醫學背景的。

  • 第一個是丁香園論壇,主要用戶是醫療相關的從業者。用戶會在論壇中,討論最近的熱門醫療事件,新冠疫情、考博、規培的分數線、醫療糾紛,或者發帖求助一些疑難病例,求一些醫療文獻等等。
  • 第二、第三個場景是來自於用藥助手,這是一個工具類的應用。用戶會將其作爲搜索藥物信息或診療指南的工具。
  • 後面三個場景是面向普通大衆的,包括對科普文章的檢索、線上問診數據的檢索 ( 舉個例子,用戶會問"溼疹反覆發作怎麼辦?"、"坐月子能不能洗澡?“這類的問題 ) 以及電商場景 ( 大體上和市面上的電商場景都相似。不一樣的是該場景會圍繞健康話題去開展,如"產後康復”、"減肥減脂"等話題 )。

3. 垂直領域下的思考

① 話題性

我們觀察到的第一個點:醫療健康領域的內容普遍存在着話題性。

左邊第一張圖是醫學的新聞事件,這與大多數的普通新聞比較類似。新聞事件會天然形成一個話題。比如"新冠疫苗最新進展",用戶會圍繞這個話題產生一些相關的搜索行爲,如搜索"肺炎"、"柳葉刀"等潛在的、需要獲取的話題意圖。

第二張圖是我們想要談論的,在醫療領域比較特殊的話題性。因爲在醫療領域關於症狀相關的表述會非常多,或者用專業的表述我們會叫它"臨牀表現"。這裏再解釋一下"臨牀表現"的含義:你可以理解成生病後身體的一些症狀,比如,頭疼、發熱、嘔吐等。醫生在做病例討論時,常常會拋出他們認爲比較關鍵,但又很讓他們困擾、值得討論的臨牀表現,如"術後出血引起的血腫"、“右下腹感染病變”、“胸部多發病變”。所以當用戶發起一個討論時,某些"臨牀表現"的詞也會自然形成一個話題。但是這些話題相關的詞並不像開放領域中的詞有那麼明顯的邊界。舉個例子,在開放領域中,“梅西獲得2019年金球獎"這樣的話題相關的實體,如"梅西”、“2019年金球獎”,在搜索時比較容易避免搜索的關鍵詞與用戶實際關注的事件間的差異。但在上述的例子中,"腹腔鏡"與"術後血腫"相關,但是與"腹腔鏡"相關的其他疾病和手術也非常多,同時也包含了其他非常多的複雜邏輯。所以,我們認爲醫療健康領域的內容普遍存在着話題性。

最後一張圖是面向大衆的科普,這塊比較容易理解。醫療話題的底層是由許多複雜邏輯與細節組成的。當用戶提問"坐月子能不能洗澡"時,如果只回答"能"或者"不能"顯然是不夠的,而是需要組成一個話題來討論或者用更加友好的方式來回答。

② 醫療話題本身的複雜、嚴肅性

對於醫學知識本身的複雜性,在處理面向醫生的文本數據時,是不得不面對的問題。例如,這是在丁香園中的一則病例討論。這位醫生詳細描述了在工作中遇到的一則病例,其中包括了非常多的專業術語。我們用了一個簡單的實體抽取方法進行抽取可以獲得"腹脹"、"腹瀉"這樣的疾病症狀詞。但是全文的信息量不僅在於這些實體詞上,也有相當一部分是存在於這些詞之間,複雜的邏輯關係。在常見的搜索方法中,我們會用詞的倒排索引來完成文章檢索這件事,但是倒排索引在執行過程中很難保證主題不會發生偏移。在理想情況下,我們更希望抽象出更具概括性的標籤來結構化這些數據。

③ 普通用戶與專業醫療從業者的認知差距

除了醫療話題在主題上不好做結構化,在處理面向大衆的文本時,認知層面的差異也是個棘手的問題。醫學知識、醫學詞彙都具有高度的專業性。比如用戶在表述中,一個非醫學背景的人會用"痘痘"、“青春痘”、“閉口”、“痘印"這樣的詞去表述自己的症狀。在醫生看來這些症狀會是"尋常痤瘡”、"毛囊口角化異常"等專業詞彙。當我們想要幫助大衆檢索到想要的信息時,就要想辦法跨過這些表述不一樣的情況,因此我們在三個方面做了一些努力:

4. NLP技術佈局

① 知識圖譜構建

知識圖譜的構建。主要目的是保證底層醫學數據的準確性。由專業的、有醫學背景的知識庫同事來維護,包括:疾病、症狀,手術、藥品、非手術治療等醫學概念與60多種醫學關係。同時,我們NLP組也會用算法來抽取,最後再以一種算法加人工審覈的方式不斷的補充實體詞、實體關係和實體屬性。

② 內容畫像

內容畫像。我們會盡可能的完善內容畫像的建設。除了基礎信息的收集、長文本的信息抽取,也包括結合知識圖譜和一些圖算法構建更爲抽象的標籤值或者特徵向量。

③ 短文本理解

短文本理解。我們需要努力優化關於短文本理解的效果,這裏包括對短文本完成關鍵信息的抽取以及根據這些關鍵信息配合下游任務,來完成特徵抽取、語義擴展,以及垂直業務相關的分類任務等。

5. 基本思路

現在回到我們分享的主題。關於短文理解,由兩個非常樸素的部分組成:

  • 我們需要首先確定query中目標實體是什麼,儘量保證準確度。
  • 根據實體本身的語義、上下文語義、用戶的行爲對query進行擴充。

02 解決識別的準確問題

1. 常見的識別困境

識別準確度的問題

首先是錯別字的問題。錯別字問題在各個領域的搜索中都是非常常見的問題。常見的錯別字原因,可能來自於拼音使用的錯誤。比如"頭癬"這個詞,大多數人會念成"頭蘚",“蘚"字就會常常出沒在相關的搜索query裏。另外,還會出現和拼音相關的識別問題,比如"頭xian"和"頭xuan”,這種漢字和拼音混搭的情況。

認知層面的不同

非醫學科班的同學看到"複發性阿弗他口炎"這個詞肯定是一臉懵。其實這個詞和感冒一樣是非常常見的問題,就是我們平常說的"口腔潰瘍"。但對於大衆來說,會有更多通俗的表述,如"口瘡"、“口腔潰瘍”、“口腔潰爛”、“嘴巴起泡"等等。如果是醫學背景的用戶,他大概率會知道這個專業名詞,但是會出現其他的一些錯誤,比如表述上會缺其中的一個組成部分或者缺一到兩個字,如"阿弗他口炎"或者"複發性口炎”。還有種情況就是把通俗表述和缺省表述混搭的表述方式,如"阿弗他潰瘍"、“阿弗他口腔潰瘍”。

專業醫學詞彙的詞幹經常非常長

在我們這個例子中,"症狀性動脈粥樣硬化性椎動脈起始部狹窄"這個詞長達18個字。仔細觀察,你會發現它其實具有明顯的組成部分,它是通過不同的組成部分拼接成的長詞。如果我們在識別一個短文本中這樣的長詞沒有被合併在一起,而是按照不同的組成部分分開的話,那系統就會默認每個組成部分具備單獨的語義,那顯然非常容易檢索到不相關的內容。

2. 短文本理解藍圖

爲了改善上面提到的幾種情況,我們嘗試把短文本理解的流程拆成了五個步驟。前四個步驟主要解決實體識別的準確率問題,包括文本糾錯、名詞短語抽取、NER ( 命名實體識別 ) 和實體鏈接。第五步需要結合底層數據的積累,包括知識圖譜的建設以及結合具體業務場景的數據來完成query語義上的擴充。

3. 文本糾錯

首先是文本糾錯,目前業界標準的流程有三個步驟:

  • 拼寫檢測。就是檢測query中到底哪個字錯了。常用的方案是利用已有的詞典或語言模型的統計結果,結合句法分析的規則來確定錯誤的字。目前學術界有些新穎的方案,比如說利用序列標註找錯誤點。但是在實際測試中,這樣的模型都比較重,並且在我們的場景中其預測準確率的問題不會特別突出,所以我們目前還是保留比較傳統的方式。
  • 生成候選詞。常見的做法就是利用同音、同型字典把出錯的字替換掉,然後生成一個候選集合。這裏值得一提的是:如果我們所在的業務場景是比較窄的情況下,比如只需要搜索藥品或者搜索疾病時,我們借鑑18年發表在IEEE上一篇關於醫療概念歸一化的文章,它的主要思路是對原文本中一些字做增減或者替換,然後構建一個confusion set ( 混淆字集合 ),把詞跟字的連接構成一個graph,然後獲得graph上的embedding之後一起放進端到端的auto encoder,即DAE,把DAE訓練到收斂之後會使用一個向量集的檢索生成候選集。在實踐中,這個方案效果更優一些。
  • 候選排序。常規地對候選集做一個重排序和打分。

4. 名詞短語抽取

完成糾錯之後會正常進入一個分詞的階段。分詞器常規會帶上一個業務詞典。但是因爲預測的文本上下文語境或者詞在詞典中會存在一些嵌套現象,有時包含一個完整語義的短語還是會被分開。因此,第二步的目標就是做名詞短語抽取工作,把分詞階段已經被分開的詞重新組合在一起。大致的思路:

構建一個有標註的數據集,用PMI等統計量特徵,藉助automated prhase算法進行正負樣本拆分,然後訓練分類器,最後用一個對長度做修正的函數對名詞短語打分。在本例中"芒果過敏"就是我們最終想要的名詞短語。

5. 命名實體識別

當然,名詞短語也沒有辦法完全保證所有實體或者需要保留完整語義的短語結構完整。有些名詞會被分詞器切得太碎,名詞短語可能也合併不回來,所以需要流程的第三步,用NER作爲補充。

這裏的NER在結構上採用了業界的標配:CRF+Bi-LSTM。在離線場景,允許NER耗時長一點,可加一些BERT之類的encoder作爲輸入。目前在我們的場景,該NER可以支持20多種醫學實體的識別。

看到這裏有小夥伴可能會疑惑:爲什麼不把名字性短語和實體詞同時train到NER中。其實我們也注意到:學界從18年開始,在這個方向有了很多的方案。總的來說有兩種思路:

  • 使用lattice的結構把每個字作爲詞根或詞尾的情況都train到模型中;
  • 生成類似短語的那種lexicon,把字、詞、lexicon的關係建成一個graph,再把graph的特徵融進NER中。

這兩種方案在效果上確實有提升,但坦率地說,因爲帶有lattice這種結構,計算複雜度一般都比較高。我們這裏談論的是短文本理解,作爲一個相對前置的任務,可能這樣的複雜度耗時還是長了些。所以在實際的應用中我們還是會使用基礎版NER模型作爲我們流程中的一個組件。

6. Mention提取

我們現在還是以基礎版的組件繼續往下走,以上的幾個步驟爲後續做實體鏈接框定了詞的邊界。候選詞一般我們用常見的搜索引擎,比如solr,給它做一個倒排索引,然後我們再拿mention去找目標實體詞。如果是下面的情況,醫學名詞的span非常長,mention提取時,其實就失敗了。這種失敗也會直接導致實體鏈接的失敗,所以我們的思路就是在召回階段再做一層補充的策略。

7. 召回增強與實體鏈接

前面提到醫學中的長詞通常會由多個組成成分進行組合。這種組成成分其實可以根據一些先驗知識把它先規範好。相似的思路,我們在華東理工大學的一篇工作中也看到了。文章作者是根據SNOMEDCT中"臨牀發現"的分類層次體系把症狀詞拆分成了不同的組成。我們也根據自身的場景完善了12個類別的成分原子詞,比如例子中的"主動脈瓣退行性病變",然後可以分成:身體部位+特徵詞+性質修飾詞。

同時,不同的組成成分在位置上存在的是有限的組合,通過對已有的一些實體詞挖掘,最後我們可以固定1300多種組合。後續我們再將這些原子詞和組成成分相互連接,構成一個graph。然後固定的組成成分的組合類型,就爲圖中的有向邊提供了數據來源。我們拿這個graph可以使用LINE、node2vec之類的方式train一個embedding。我們採用的是清華大學19年在IJCAI上發表的矩陣分解的方法。可以看到我們train完graph embedding後,相似度聚合的一些結果。可以發現以這種方式結構化一個疾病詞可以保證疾病詞在結構上的穩定。也就是說,原始的排列組合想要表述的是某種腫瘤,我們需要保留這個腫瘤作爲base詞的結構。

在召回策略中除了使用詞典命中的結果、NER的結果、名詞短語的結果,現在可以補充原子詞召回的結果,這樣可以提高長詞被命中的概率。最後,對候選詞進行LTR ( learning to rank ) 的排序,獲得top1結果。

03 解決短文本的理解問題

1. 語義從何而來

當我們解決了識別準確率的問題後,接下來就是如何解決短文本的理解問題。我們認爲短文本之所以難理解,不僅在於長度較短,同時也因爲文本中的語法相對比較自由,且需要在非常有限的信息中解析出語義的邏輯。所以我們分析了在我們搜索場景中用戶日常表述的特點,除了單一實體詞爲搜索query外,其他大致可以分爲這四種情況:

  • 第一種情況就是用戶的需求在於想要獲取圍繞某個實體詞的屬性信息,比如:“高血糖的判斷標準”、“糖尿病的併發症”。常規做法上,我們會對query做實體鏈接,"高血糖"是知識庫中的一個實體詞。在這樣的流程下,經過一個倒排索引做文章的檢索,或者帖子的檢索,會很容易發生主題上的偏移。
  • 第二種情況是由多個實體詞合併出完整語義,比如"2020年執業醫師考試大綱"。“2020年”、"執業醫師"和"考試大綱"三者都是獨立的實體詞,但是存在相互約束和限制,所以需要合併成整個短語來保留語義。
  • 第三種情況比較類似上面的例子,也是多個實體詞,但不同的是:他們是圍繞一個潛在的主題來表達的一些關鍵詞。比如:"新冠疫情在哈薩克斯坦的現狀"這一主題,用戶可能只會搜索"新冠+空格+哈薩克斯坦"之類的表述。
  • 第四種情況是包含複雜邏輯的句子。句子中會包含一些上下文的語境以及複雜的邏輯。

來看一個具體的query——“短T1長T2”,"短T1長T2"是什麼意思呢?其實"T1"和"T2"分別代表着核磁共振中縱向與橫向磁場變化的一個常量係數,兩種磁場變化最終會影響骨骼與肌肉臟器在片子中的成像情況。這樣的表述,通常會出現在病例影像討論的帖子中,用戶搜索的目的可能是想找類似的病例討論,也可能是想學習一下核磁共振讀片的方法。所以其語意從短短的幾個字是無法從字面上獲取的。所以,這些語義從何而來?可以很樸素的理解,信息始終只有兩個來源:一個是人的先驗知識,源自我們專業醫學知識圖譜的構建;第二是行爲數據,對應的就是我們日常的業務日誌以及文本上的挖掘。在理想的情況下,我們希望"短T1長T2"可以轉換成,如:核磁共振的成像原理、影像、核醫學、神經內科這樣的主題,然後在這樣的主題下再去關聯到具體資訊的文章。

2. 醫學健康領域Concept

我們還可以換個思路,比如"短T1長T2"本身就是一個非常具有代表性的術語,是不是我們可以把它直接作爲一種介於把實體詞與話題之間的一種抽象?這樣既保證了關聯性又具備了可解釋性。

3. Concept挖掘

根據這樣的思路,我們在丁香園的場景中,主動挖掘了大量的醫學concept。具體的方法:

首先,我們收集了一批用戶的搜索點擊日誌,然後在啓動階段定義一些種子模板,再利用模板和N-gram的策略產生一批短語,這些短語不會直接拿來用,因爲其中會有一些邊界問題或者模板帶來的語義漂移問題。所以對生成的這些原始concept,我們會做一個分類器,作爲在質量上的約束,留下質量比較高的concept。此外,再把生成的concept重新放到Query或者句子中,讓它產生新的模板。這裏模板的產生,我們也借鑑了韓家煒老師在MetaPAD上的一些工作。

最後,我們再對pattern做一層過濾,新的模板就可以重新再去抽concept。該算法整個結構就可以形成一個bootstrap的循環。這裏安利一下騰訊團隊郭老師等在去年KDD上發表的工作,工作做得非常的漂亮,也給我們提供了非常多的啓發。

4. 結合專業醫學知識與Concept

利用挖掘到的concept詞,我們可以聯合底層的專業的醫學實體和上層的業務數據構建起一個完整的業務圖譜,其中一對一的邊計算的都是以Bayes模型爲基礎,會考慮全局統計量或者文本的局部特徵;生成的多對多的邊之後,我們參考王仲遠老師的一些相關工作中提到的MDL ( Minimum Description Length ) 的原則做concept的篩選。這樣,論壇帖子、藥品信息、商城的商品就可以通過中間的concept層完成了實體鏈接。

04 工業落地的嘗試思路

1. Query擴展

在得到業務圖譜之後,我們在搜索優化中就可以非常容易的利用它。比如,搜索優化中常見的Query擴展任務。

目前Query擴展的問題主要有兩類方法:第一種是利用query詞和document詞的相關性構建一個貝葉斯模型,擴展的結果就是document詞或者是document中出現的一些詞組,這樣會幫助在召回階段擴大潛在用戶想要的文本。第二種方法,是把它作爲一種翻譯模型,從query詞翻譯到document詞。

早期比較樸素的方案是用EM算法找兩類詞的對齊關係,現在新的方案都是上神經網絡train一個生成模型。在我們有了concept層之後,用一些很簡單的策略就能有不錯的效果,比如我們會直接使用相關性的方式,也就是剛纔提到的第一類方法去建模,就可以把原始query向concept層上擴展。比如"哈薩克斯坦",就可以擴展出"新冠疫情"或"不明肺炎";同樣,在電商場景下,我們可以利用擴展的concept和其他的實體關係做一個二級擴展,比如"產褥墊"可以擴展出"待產包",然後再從待產包擴展出"衛生巾"、“紙尿褲”。這樣的應用其實也帶了一點推薦的意思。

2. 標籤生成增強

我們在文本結構化上也可以利用concept做一些提升,文本結構化對於提升搜索效果起到了非常重要的作用。有了concept之後可以幫助我們從抽象的層面完成對文本打標籤。業界中比較好的方案,是先用一個TransE之類的知識表示模型,把知識圖譜train出Embedding,然後將這些Embedding融合進LDA的模型中。在模型中,會用vMF分佈代替原來的高斯分佈來處理實體詞的部分。這樣我們就會對一篇,如"麻醉不良習慣"的討論帖子抽出"麻醉醫學"和"麻醉的不良習慣"這樣的關鍵詞。

05 總結

最後,總結一下短文本理解需要做的幾項工作:

  • 首先,需要解決的是實體詞識別的準確率問題,因爲實體詞是我們擴充語義的根基。實體識別不準的話,語意也無從談起。
  • 第二點是從用戶行爲日誌中挖掘出concept,然後把這些concept作爲跨越業務數據和底層專業醫學知識的語義媒介。
  • 最後,將concept結合業務數據構建其業務圖譜。從而協助下游完成包括搜索,推薦之類的任務。

今天的分享就到這裏,謝謝大家。

作者介紹

楊比特,丁香園資深NLP算法工程師

楊比特,碩士畢業於軍事醫學科學院,負責丁香園大數據NLP組,目前專注於醫療健康領域下的自然語言處理、知識圖譜構建與應用、搜索與推薦技術。

本文來自 DataFunTalk

原文鏈接

醫療健康領域的短文本理解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章