領域知識增強的預訓練語言模型在藥電商搜尋領域的實踐

陶然陶然發表於2023-01-31

  導讀:本文將分享領域知識增強的預訓練語言模型在藥電商搜尋領域的實踐。包括以下三大部分:1. 業務背景;2. 技術背景;3. 方法介紹。

   01 業務背景

  首先介紹一下業務背景。

  電商場景下藥品搜尋,是一種垂直搜尋(vertical search),使用搜尋技術,連線使用者用藥需求和電商平臺的藥品供給。

  相對一般電商搜尋,藥電商搜尋具有以下特點:

  用藥場景的嚴謹性,客戶搜尋後應當推出準確的藥物;

  搜尋結果的相關度高,病症和藥品應該是匹配的,包含專業醫學知識;

  識別使用者搜尋的用藥意圖,要求達到高精準,當然普通使用者搜尋中,由於自身醫學知識不夠多,在搜尋詞 Query 中可能有不規範的表達,這種 Query 詞和專業醫學知識是存在偏差的;

  藥品的專業知識性強,比如藥品說明書、藥典,一些外部資源需要利用起來。

   02 技術背景

  接下來簡單介紹一些技術背景,包括預訓練語言模型和領域知識增強。

  1. 預訓練語言模型(Pretrained Language Model)

  預訓練語言模型是一種主流的 NLP 正規化:主要是使用預訓練+微調的方式,從大量的文字資料中透過自監督、自學習的方式來學習文字的表徵(Embedding)。現在有一些特定領域的預訓練模型可供使用,例如:醫學領域、司法領域等。

  那麼在電商場景下能否直接使用一個開源的(比如中文 Bert)、別人訓練好的模型呢?

  經過對比,我們發現還是使用電商場景的一些自有知識資料來增強語言模型效果會更好,我們有 3 個具體的應用場景:

  搜尋詞的實體識別(NER),主要識別 Query 中的品牌、藥品主要成分、藥品劑型等 28 類;

  搜尋詞的意圖分類,獲取 Query 中搜尋的意圖,包括藥品名、疾病、症狀、問診、醫院等 22 類;

  搜尋詞和藥品標題的文字相關性,是否相關做二分類。

  透過這 3 個場景,證明了領域知識增強預訓練模型效果好於一般的開源的中文預訓練模型。

  下圖是 3 個場景的具體例子,左邊是 Query 詞實體識別(搜尋的是感冒靈顆粒,感冒靈是藥品名,顆粒是劑型,對此進行準確地實體識別);中間是 Query 詞意圖分類(HPV 疫苗,搜尋的是疫苗,而且是 HPV 疫苗,這裡有醫院、體檢、醫生、疫苗等分類);右邊是 Query-Title 的相關性(比如搜尋“脂溢性脫髮”,推出的藥品應該是能夠治療脫髮,並且和脂溢性脫髮是匹配的)。  

  2. 領域知識增強

  領域知識增強的常見做法包括:

  在特定領域內對蒐集的語料進行重頭預訓練、繼續預訓練,仍然複用 Bert 或者 Xlnet 語言模型重頭做一遍;

  把知識圖譜(Knowledge Graph,KG)應用進來,方式也比較多,比如新增預訓練實體向量 ERNIE(Informative Entities),QAGNN/GreaseLM;也可以在語言模型(LM)條件機率中引入圖譜上的實體向量 KGLM;還可以修改訓練資料(語料),比如將維基百科中的實體做隨機的替換,這樣就可以構造正負樣本這就是 WKLM(replace mentions);也可以在 masking 階段遮蓋力度更大,這樣語言模型訓練過程中可以匯入一些知識,這就是 Salient span masking, ERNIE(Knowledge Integration);還有聯合訓練的一些方法,比如KEPLER(KE+MLM)。

  我們自己的方法是,採取重頭預訓練,語料包含一般領域語料(比如維基知識)和醫學領域語料。另外有效利用藥品的屬性、結構化資料。

   03 方法介紹

  下面講一下我們的方法。  

  

  預訓練模型(PLM):一般領域模型,例如 BERT, oBERTa, XLNET, GPT, ELECTRA 等等。生物醫學領域 PLM 模型,例如 BioBERT, PubMedBERT, BioMedBERT 等等。

  我們的動機是將 PLM 應用在醫藥產品垂直搜尋,以解決 Query 理解和Query-Title 相關性兩個任務。

  我們的目標:將領域產品知識注入 PLM 中。  

  領域知識(藥品資訊)的特點是:

  通常存放在結構化關係型資料庫中;

  傳統的 PLM 集中於處理自然語言句子中的文字。

  使用者在藥品垂直搜尋中的行為:除了會搜尋藥品名字也會搜尋藥品的相關屬性,比如藥品相關的疾病症狀,這些資料在關係型資料庫中是有存放的。

  因此我們直接在結構化資訊上訓練語言模型。  

  上圖是模型的整體架構,使用的是聯合訓練的思想,主要有兩部分任務:

  一部分是 RTD,這裡面做了一個改進就是 Entity Masking,後面的 Generator 和Discriminator 是複用的別人的網路結構。

  第二部分是 PAP,這是我們主要的創新點,利用自有的電商平臺藥品知識庫(Medicinal Product Database),主要使用了標題(Title,比如三九感冒靈顆粒)、屬性、症狀(頭痛,流鼻涕),加入一些胃疼、腰疼等作為負樣本,參考的也是對比學習的思路,這樣構造一個 PAP 任務。

  下面具體介紹這兩部分。  

  RTD 模型,沿用了 ELECTRA 的 RTD 訓練任務,把通用語料、一些網站上的醫學問答相關的語料用進來。選用 ELECTRA 的原因是考慮到訓練任務樣本利用的有效性,並且其 base 版本在英文上驗證過,相當於 BERT-large 的效果。

  我們在實體遮蓋上進行了改進,不僅對中文分詞的詞級別遮蓋,還有一些醫學實體詞,這樣就可以有效的把我們在真實業務場景中積累的藥品名、疾病名、症狀名都應用進來,輸入 input 為 ABCD,其中 BC 是一個藥品名,把它給遮蓋了,輔助網路 Generator 會生成一些遮蓋掉的詞 BE,然後用第二個網路 Discriminator預測它有沒有改變,這裡的 Main Transformer 引數在下面的 PAP 任務中是共享的。  

  PAP 任務,在自有的屬性資料上做訓練,主要做了一個負樣本的取樣,就是對屬性資料生成它的負樣本,與正樣本一起放在 Main Transformer,Encoder 對各種文字片段編碼,主要有 3 個部分,分別是 t(Title),n(Attribute Name),v(Attribute Value),我們的想法是希望 t 和 n 做一次拼接,然後進行投影(全連線是一個投影),希望 t 和 n 拼接後與正樣本 v 儘可能接近,與隨機的負樣本(紅色v’)儘可能遠離。  

  整體的 Loss 就是上述兩個任務 Loss 的和:

  整個訓練在上面兩個任務中進行交替學習,其中一個超引數是控制兩個任務相互學習的比例。整體演算法流程:

  ① 模型引數隨機初始化;

  ② 標記實體邊界以便後面好做實體遮蓋;

  ③ 從藥品資料庫中收集藥品標題、屬性名、屬性值的三元組;

  ④ 依據 Loss 進行訓練。

  下面介紹具體的實驗結論。  

  前期實驗準備:為了驗證上述 Loss 的有效性,需要構造訓練集,這裡使用的是通用領域和醫藥領域的資料集,句子和 oken 規模如圖左側所示。右側是藥品實際搜尋場景每次被召回的藥品庫,主要是商品標題、屬性等。其中屬性分類主要是疾病和症狀。

  在訓練模型時對比了兩個模型驗證想法的有效性,一個是基於一般語料和醫學語料訓練一個非常強的 baseline:ELECTRA+EM,之所以這麼做是為了對比 PAP Loss 的貢獻。第二個是使用了醫學產品的知識庫做了一個多工學習,其語料包括第一個方法的語料,及特有的語料(右邊資料)。  

  評估資料集:主要使用開源的 ChineseBLUE 資料集,是中文醫學相關的資料,為了方便對比使用的是第一版,涉及到的任務有 NER、問答、句對、檢索、文字分類、意圖識別,資料集規模如上圖左側所示。也使用了自己的資料集(上圖右側),Query 和 Title 的相關性任務,分為 easy 和 hard,區別是 easy 對搜尋日誌資料沒有限制,hard 是人為構造的比較難的 pair 對,把 Query 中的詞(某個實體)在藥品名標題裡面出現過這種情況排除掉,這就要求 Query 和 Title 沒有實體級別的重合。QIC 是意圖分類,QNER 是 Query 中實體分類。  

  上圖展示了實驗效果,本文方法能夠在大部分資料集取得最好的效果,有的是比較接近於更優。其中做了很多對比,第一個是 ChineseBLUE 論文的方法,後面 10K,20K 等是加入實體遮蓋、短語遮蓋的效果,後面三個是自己跑的效果,BERT-base是跑的哈工大的中文開源資料集,ELECTRA 只跑了 fine-tune 階段。可以看到實體遮蓋對我們的效果提升還是很明顯的。我們的目的就是找到一個比較強的 baseline,直接與通用領域 BERT 對比可能不太合適,所以先驗證一下實體遮蓋的效果比較強,後面實驗的方法對比主要是跟後面方法做對比。  

  超引數調整:加上 PAP 的 Loss 之後,調整 PAP task 訓練比例 ρ,還有前面提到的三元組 margin 引數 γ。實驗中也做了 Grid Search 設定一些引數,考慮到商品的屬性、規模,跟維基百科等語料相比還是比較小,在自己的任務中稍微控制一下,ρ:[1%,5%,10%,15%],γ:[2,4,6,8],結果表明在我們自己的資料集上 γ=4,ρ=5% 效果比較好,ρ 比較敏感,對結果影響比較大。  

  在消融實驗中,如果 PAP Loss 真有效果的話,嘗試把它去掉,去掉以後指標都有所下降,hard 資料集下降的比較多,達 1.9%。因此有猜測,對於產品相關概念理解任務上使用屬性預測任務會比較有效,加入的知識幫助更大。對於 NER 的任務,實體遮蓋已經用到實體資訊,再做屬性預測,商品標題和商品語義之間的關係幫助可能就沒那麼大。  

  具體案例:給定 query “中耳炎”,讓不同的模型去找,ELECTRA-base 和我們的模型,不同模型的打分。取了三個樣本,前面兩個是正樣本,後面一個是負樣本,我們希望正樣本打分越高越好,比如 0.99,負樣本小於 0.001。ELECTRA-base 模型打分 0.49 及 0.93 都是錯的,而我們的模型打分都是正確的。“中耳炎”是個疾病,在產品標題(頭孢,阿奇黴素)中是看不出來的,經過我們查詢藥品說明書,發現前面兩種藥是可以治的,而莫沙必利是不治這個病的。透過此案例,表明我們的模型能夠理解藥品和疾病之間治療關係,這也和我們的 Loss 是呼應的。  

  結論:

  我們在藥品垂直搜尋領域提出了知識增強的預訓練模型;

  相對中文 ELECTRA 我們加入了實體級別的 masking;

  我們提出一個新的產品屬性預測任務,並且把它融合到了語言模型當中;

  實驗證實取得了不錯的效果,並且在藥品垂搜場景驗證了 PAP 預訓練任務的有效性。

來自 “ DataFunTalk ”, 原文作者:劉克松;原文連結:http://server.it168.com/a2023/0131/6787/000006787660.shtml,如有侵權,請聯絡管理員刪除。

相關文章