語義相似度在好大夫搜尋的優化探索

語言: CN / TW / HK

隨著近年來自然語言處理技術的飛躍式發展,許多之前很難實現的自動化效果被逐步用於網際網路業務生產實際中,給我們帶來了高效便捷的服務體驗。本文記錄了好大夫線上在搜尋業務上優化問答搜尋相似性效果的探索。

搜尋引擎中,召回和排序是搜尋流程的重要組分。當用戶進行查詢檢索時,搜尋引擎首先會檢索召回大量的文件,然後根據候選文件的文字相關性、內容質量等特徵,綜合計算出每一個文件的排序分值,最終展現給使用者, 其中的 核心問題 包括:

  • 理解使用者在找什麼;

  • 哪些文件是和使用者意圖 真正相關的;

  • 哪些資訊是可以信賴的優質內容;

圖1:搜尋流程簡圖

要理解這些 查詢 ,提供更好的搜尋體驗,用最小的成本找出使用者想要的相關文件,並儘可能的把找到的相關度好的結果放到前面,讓使用者一眼能看到自己想要的結果(手氣不錯),或者讓使用者走火入魔陷入點了還想點的境地。

一、好大夫搜尋現狀和難點

在好大夫線上的搜尋業務中,我們需要理解使用者的檢索意圖,並在站內收錄的病程/文章/介紹中,返回使用者真正想要的結果 比如,使用者在檢索“感冒了能不能吃西瓜”時,除了返回“感冒”和“西瓜”相關的條目外,還應該理解使用者是在找感冒條件下一些相關的科普或者提問,應該觸類旁通,返回類似 “感冒了能不能吃水果” 或者 “感冒飲食禁忌” 之類的條目。

好大夫線上搜尋業務的特點:

  1. 集中在醫療垂類,描述性查詢非常多,涉及大量實體和知識的不規範表述 (口語化

  2. 收錄的內容絕大部分經過了嚴格的稽核,很少出現標題黨和歪曲事實的東西。 

傳統的搜尋相關性技術中,最經典的是bm25,根據TF-IDF來計算查詢和文件的相似度,主要考慮在詞級別上的匹配, 但是需要維護實體詞和同義詞詞表,同時如果用詞索引無法召回相關性好的文件,比如一些使用者記不清實際的名字(如西藥藥品)錯字少字或者描述性表示(胳臂上有好多個紅點),展示出的效果就不夠好,對於非專業使用者來說易用性也比較差。

圖2:搜尋召回排序的新發展方向

我們面臨的難點包括並不限於:

  1. 醫學知識專業性強、涵蓋廣泛,由於人力成本高昂,很難去發掘和標註更好的專業知識和語料;

  2. 資料基礎建設不足,搜尋業務積累資料少;

  3. 描述性文字的非標準化性高,真實的全召回評價標準比較難建立;

  4. 線上召回和排序響應時間需要足夠短等。

二、相關性優化的目標

什麼才是好的相關性?

  • 兩句話出現了很多一樣的字元,有很大的概率它們是相關的,這樣的結果很少;

  • 相應句法結構上出現了同義詞,也有可能是相關的,這樣的依賴同義詞的積累;

  • 雖然沒幾個詞相同,但是講了差不多一個意思或是想要的答案,更有可能是相關的;

  • 進一步理解使用者的潛在意圖,擴充套件到同類別或者總結性的知識,也可能是使用者想要的。

所以,如果能有一種方式把語義相近的句子放在一堆,不受字元和詞的約束,檢索的時候去相應的堆裡找,會有很大概率獲得效果的提升。

於是,我們就需要一個相關性打分模型,可以輸入兩個句子/文件對,很快的輸出一個相關性得分,語義相近的得分較高。 這樣就可以把模型認為的結果放在前面讓使用者看到。例如判斷 “手心腫痛” 跟 “手掌心腫痛” 相似性要高於 “手心起紅色點,又腫又疼”,還高於 “手癢痛手臂麻”。這個排序模型要能足夠準確的衡量相關性。

圖3:相關性優化任務示意

相似度模型 訓練初探索

飛速發展的自然語言處理技術已經在語義表示領域被廣泛使用,可以實現類似的效果,就是把一段文字通過模型編碼成一個向量,相近的意思得出的編碼向量可以比較接近。從最開始的讓詞義相近Word2vec到zero-shot預訓練模型FLAN,模型越做越大,語義表示做的越來越好,在搜尋實際業務中使用這些技術是需要一定的適配和取捨的。

圖片來源: Xu H, Zhengyan Z, Ning D, et al. Pre-Trained Models: Past, Present and Future[J]. arXiv preprint arXiv:2106.07139, 2021.

業務資料

首先是資料,資料是人工智慧的基石,模型擬合的就是輸入的訓練資料,沒資料再好的演算法也出不來效果。

那麼如何找到搜尋需要的講了同一個意思或者答案的句子? 搜尋問答類場景下使用者有明確的搜尋目標,會對需求進行顯式的描述,每個人的表述可能不盡相同。使用者很可能會對返回的想要的結果進行點選進一步檢視,所以從點選日誌來的資料可以作為初步的資料。當然,這些資料存在一些問題,比如頭部點選過度(排的越靠前的被點的概率越大),暴露偏差expose-bias(展現列表沒出現的不會被點選),以及獲取資訊後進一步決策(想找一個看乳腺結節的醫生,搜尋乳腺疾病醫生排行,然後點了一個醫院知名度高的醫生)等,需要一定的清洗和處理。

我們的優勢在於公司已經積累了大量醫學相關的文字資料,我們都可以用來進行領域垂類預訓練,以加強預訓練語言模型的表示能力。

模型 結構

然後是模型結構,搜尋場景對服務延時有很高的要求,大模型固然效果好,從Roberta-large到GPT-3人盡皆知,但動輒上億的引數對於我司CPU的線上推理十分不友好。需要相對取捨,用小的模型進行快速計算,知識蒸餾如DistilBERT[2]/引數空間搜尋AutoTinyBERT[3]類似的操作和推理優化如TVM[4]是少不了的。

訓練任務

更重要的是訓練模型的任務,讓模型學什麼? 如何讓模型儘可能多的貼合相關性打分實際? 從Pointwise到Pairwise到Listwise,Pointwise方法預測每個文件和查詢間的相關分數,為了學到不同文件之間的排序關係,Pairwise方法將排序問題轉換為文件間的兩兩比較,Listwise方法則學習更多的文件排序之間的相互關係。從sentence-bert[5]到SimCSE[6],文件和查詢間互動和對比的方式也在不斷變化,我們對這些任務也進行了一定的試驗,選用與SimCSE類似的對比學習正負樣本方案。

圖片來源:  Gao T, Yao X, Chen D. SimCSE: Simple Contrastive Learning of Sentence Embeddings[J]. arXiv preprint arXiv:2104.08821, 2021

同時參考sentence-bert中embedding話題互動帶來更好的表示效果,我們也加入了一些別的模組來控制embedding符合相應的疾病主題或者內容主題。

圖4:模型任務模組示意

同時一些訓練技巧也是可以事半功倍的利器,如大的batchsize,虛擬對抗訓練[7](Virtual adversarial training),花式dropout(ConSERT[8]),配合好相應的損失函式如InfoNCE[9]/Tripletloss,都可以帶來肉眼可見的魯棒性和指標提升。

相似度模型 訓練優化

經過 前期 試驗,我們用骨感的資料製作了一版模型,可以對描述性的文字做較好的近似,把相關的和不是很相關的文件區別開來。但是同時也遇到了一些問題:一些長尾的詞模型不認識,如一些藥品名,模型在判斷相似的時候不知道應該跟哪個藥品相似;還有一些查詢中有好多詞,模型對重要的詞和可以捨棄的詞理解不深,出現了一些撿了芝麻的badcase,在雖然主題能找準,但是還不夠好。

更強的訓練任務

現在需要小小模型承擔更強的功能,需要更嚴苛的訓練任務承載實際的業務經驗和垂類知識。受蘇劍林大神[10]和google的MUM描述的啟發,充分利用現有資料,從現有資料中設計出更多可能對下游任務有幫助的任務進行訓練。可以利用業務資料設計任務進行無監督或者半監督學習,來提升模型的深層表示能力。考慮現在欠缺的實際,需要認識各種類別的詞和相應的知識關係,在文件/查詢句中找到重要的詞,要分清哪些是重要的,哪些可能是可以捨棄的,對於錯的詞是否可以被糾正,一個文件是否可以找到最接近的查詢句,查詢句怎麼和查詢句做好負樣本...

圖5:模型訓練任務改進示意

於是我們根據基礎資料和知識,設計了文件和查詢句中相關實體的檢出/替換糾錯/改寫對比等任務。在模型中用對比學習方式進行任務並行訓練,把需要處理的各種類別文字對映到同一個抽象語義空間裡,配合(am-softmax[11]/加入KL散度的Regularized Dropout[12])等loss,儘可能減小設定為相似的樣本間的互動結果,擴大設定為不相似的樣本之間的互動結果。

圖6:訓練樣本和任務示意

實體級別的意思和類別得到了更好的表示,取得了更好的效果。

圖7/8:簡單效果示意

實際效果

優化上線後,使用者對於問答類搜尋結果的頁面點選率提升了4.6%,表明使用者更願意點選返回的搜尋結果(搜尋召回了更相關的結果),如圖:

圖9:上線前後問答類點選率變化效果

此外,使用者在問答類搜尋結果頁面的行為長度(如搜1次點3次,即行為長度為4),也相應增加了8.5%,表明使用者點選了更多的結果(搜尋結果的相關性更好),如圖:

圖10:上線前後使用者搜尋頁行為長度變化(問答類、資訊類)

三、接下來的挑戰

語義相似度優化上線後,通過主動使用者評測及使用者點選資料分析,證明我們這個優化方向是ok的。接下來,我們會持續以醫療相關領域知識為基礎,不斷 完善相關的資料及模型能力。

當然,除了相似度演算法模型以外,好大夫搜尋還有很長的道路要走。我們希望以好大夫15年來積累的海量醫療內容為基礎,為使用者打造“最實用的醫療搜尋”,做使用者“簡單可信賴”的小夥伴。

參考文獻:

1.Xu H, Zhengyan Z, Ning D, et al. Pre-Trained Models: Past, Present and Future[J]. arXiv preprint arXiv:2106.07139, 2021.

2.Sanh V, Debut L, Chaumond J, et al. DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter[J]. arXiv preprint arXiv:1910.01108, 2019.

3.Yin Y, Chen C, Shang L, et al. AutoTinyBERT: Automatic Hyper-parameter Optimization for Efficient Pre-trained Language Models[J]. arXiv preprint arXiv:2107.13686, 2021.

4.Tianqi Chen, et al. “TVM: An Automated End-to-End Optimizing Compiler for Deep Learning.”  13th USENIX Symposium on Operating Systems Design and Implementation (OSDI 18),  2018.

5.Reimers N, Gurevych I. Sentence-bert: Sentence embeddings using siamese bert-networks[J]. arXiv preprint arXiv:1908.10084, 2019.

6.Gao T, Yao X, Chen D. SimCSE: Simple Contrastive Learning of Sentence Embeddings[J]. arXiv preprint arXiv:2104.08821, 2021.

7.Miyato T, Maeda S, Koyama M, et al. Virtual adversarial training: a regularization method for supervised and semi-supervised learning[J]. IEEE transactions on pattern analysis and machine intelligence, 2018, 41(8): 1979-1993.

8.Yan Y, Li R, Wang S, et al. ConSERT: A Contrastive Framework for Self-Supervised Sentence Representation Transfer[J]. arXiv preprint arXiv:2105.11741, 2021.

9.Hjelm R D, Fedorov A, Lavoie-Marchildon S, et al. Learning deep representations by mutual information estimation and maximization[J]. arXiv preprint arXiv:1808.06670, 2018.

10.蘇劍林. (Jun. 11, 2021). 《SimBERTv2來了!融合檢索和生成的RoFormer-Sim模型 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/8454

11.Wang F, Cheng J, Liu W, et al. Additive margin softmax for face verification[J]. IEEE Signal Processing Letters, 2018, 25(7): 926-930.

12.Liang X, Wu L, Li J, et al. R-Drop: Regularized Dropout for Neural Networks[J]. arXiv preprint arXiv:2106.14448, 2021.

------- END -------

【作者簡介】

曹騰: 好大夫線上演算法工程師,專注於自然語言處理相關技術的研究與業務落地。

好大夫線上創立於2006年,是中國領先的網際網路醫療平臺之一。已收錄國內10496家正規醫院的69.2萬名醫生資訊。其中,23萬名醫生在平臺上實名註冊,直接向患者提供線上醫療服務。“讓行醫簡單,看病不難” ,始終追求“成為值得信賴的醫療平臺”。

也許你還想看: