原創 Synced 機器之心
機器之心發布
作者:羅志鵬(深蘭北京 AI 研發中心)
這篇文章介紹了 DeepBlueAI 團隊在第十四屆全國知識圖譜與語義計算大會(CCKS 2020)中「基於標題的大規模商品實體檢索」任務中的冠軍解決方案,詳細描述了任務解決過程中的數據處理以及模型選擇和使用等細節問題。
第十四屆全國知識圖譜與語義計算大會(CCKS 2020) 11 月 12 日至 15 日在江西南昌舉行,CCKS(China Conference on Knowledge Graph and Semantic Computing)是由中國中文信息學會語言與知識計算專委會定期舉辦的全國年度學術會議。CCKS 已經成為國內知識圖譜、語義技術、語言理解和知識計算等領域的核心會議。CCKS 2020 舉辦的各項挑戰賽公布了最終結果,來自深蘭科技北京 AI 研發中心的 DeepBlueAI 團隊斬獲了 3 項冠軍和 1 項亞軍,並獲得了一項技術創新獎。
一、任務介紹
CCKS 2020:基於標題的大規模商品實體檢索,任務為對於給定的一個商品標題,參賽系統需要匹配到該標題在給定商品庫中的對應商品實體。
輸入:輸入文件包括若干行商品標題。
輸出:輸出文本每一行包括此標題對應的商品實體,即給定知識庫中商品 ID,只返回最相關的 1 個結果。
團隊成績:評價方式採用準確率,最終成績排名如下,DeepBlueAI 團隊獲得了本任務的冠軍以及技術創新獎。
比賽難點:基於標題的大規模商品實體檢索存在如下幾點挑戰:
(1)輸入文本中可能無法識別出實體指代詞;
(2)商品標題中存在很多變異指代,沒有給定的指代映射表;
(3)商品標題一般較短,上下文語境不豐富,須對上下文語境進行精準理解。
二、引言
基於標題的大規模商品實體檢索與實體連結任務類似,都需要找到知識庫中對應實體,因為部分標題文本不能識別出實體指代詞,並且存在很多變異指代詞,所以沒有辦法使用實體連結那種實體識別 -> 候選實體生成 ->實體消歧的方案。
所以如標題描述一樣,DeepBlueAI 團隊將該任務定義為信息檢索任務,針對檢索任務採用了召回 -> 粗排序 -> 精排序的方案。具體而言,首先採用 Triplet BERT 召回模型,召回前 100 最相關實體,然後採用 BERT[1]二分類模型進行粗排序得到前 10 個最相關實體,最後經過精排序得到 1 個最相關實體。
三、數據處理
數據分為 8.3w 訓練集文本和包含 text_id,text,implicit_entity 等欄位,具體格式如下:
{ "text_id": 81228, "text": "四盒粉,寶寶痱子粉", "implicit_entity": [{"subject": "硼酸氧化鋅散", "subject_id": 23813}] }
知識庫數據 27.7w 商品實體,其中藥品類 4.4k 個和書籍類 27.3w 個,知識庫商品實體包含實體類型、實體 ID、實體 predicate 和 object 項,具體格式如下:
{ "type": "Medical", "subject_id": 23813, "subject": "硼酸氧化鋅散", "data": [ {"predicate": "生產企業", "object": "中國醫科大學附屬盛京醫院"}, {"predicate": "主要成分", "object": "本品為複方製劑。其組分為:每盒含氧化鋅 12.5g、硼酸 12.5g"}, {"predicate": "症狀", "object": "本品具有收斂、止癢、吸溼、殺菌作用。用於預防和治療成人和嬰幼 兒各種原因引起的痱子。"}, {"predicate": "規格", "object": "50g"}, {"predicate": "產地", "object": "中國"}]}
因為官方提供的數據是從實際業務場景得到,並沒有進行清洗,所以原始數據存在太多的噪音,其中影響模型性能的情況如下:
圖書類別太多
因為訓練集中圖書類別的標題佔比很少,幾乎可以忽略不計,但是在知識庫中卻佔據了 98%,經過試驗分析後去掉了訓練集和知識庫數據中圖書類別的數據。
訓練集中 text_id 不唯一
在多數情況下大家會默認 text_id 是唯一的,但是發現官方提供的 text_id 並不是唯一的,如果利用 text_id 唯一性去實現相關代碼則會導致標註錯誤等情況。
相同標題文本對應多個實體 ID
訓練集存在一些數據,標題文本相同但是對應的實體 ID 卻不同,這類數據分為三種情況:
標題文本不包含任何實體信息
{"text_id": 22473, "text": "藥品", "implicit_entity": [{"subject": "丁苯羥酸乳膏", "subject_id": 268655}]}{"text_id": 105526, "text": "藥品", "implicit_entity": [{"subject": "腫節風軟膠囊", "subject_id": 53176}]}
標題文本對應的兩個實體都具有關係
{"text_id": 134542, "text": "正品米菲司同片銅片", "implicit_entity": [{"subject": "米菲司酮片", "subject_id": 140181}]}{"text_id": 21246, "text": "正品米菲司同片銅片", "implicit_entity": [{"subject": "司米安米非司酮片", "subject_id": 134662}]}
標題文本對應的兩個實體一個為正確標註另一個為錯誤標註
{"text_id": 132115, "text": "阿達帕林", "implicit_entity": [{"subject": "福牌阿膠阿膠片", "subject_id": 216530}]}{"text_id": 45692, "text": "阿達帕林", "implicit_entity": [{"subject": "維 A 酸乳膏", "subject_id": 230257}]}
上述相同標題文本對應多個實體 ID 的情況會在最後的排序階段影響模型的收斂,導致最後的性能下降,所以直接刪除了這部分數據。
相似實體
知識庫中存在一些極其相似的實體,例如下面的兩個實體只有生成企業不同,其他完全相同。針對這種相似的實體,團隊會保留在訓練集中出現的那一個,其他的全部刪除。
{"type": "Medical", "subject_id": 172360, "subject": "腎石通顆粒", "data": [{"predicate": "生產企業", "object": "河北萬歲藥業有限公司"}, {"predicate": "主要成分", "object": "金錢草、王不留行(炒)、萹蓄、延胡索(醋制)、雞內金(燙)、丹參、木香、瞿麥、牛膝、海金沙。"}, {"predicate": "症狀", "object": null}, {"predicate": "規格", "object": ["15g*10 袋(萬歲)"]}, {"predicate": "功能", "object": null}]}
{"type": "Medical", "subject_id": 31946, "subject": "腎石通顆粒", "data": [{"predicate": "生產企業", "object": "修正藥業集團股份有限公司"}, {"predicate": "主要成分", "object": "金錢草、王不留行(炒)、萹蓄、延胡索(醋制)、雞內金(燙)、丹參、木香、瞿麥、牛膝、海金沙。"}, {"predicate": "症狀", "object": null}, {"predicate": "規格", "object": ["15g*10 袋(修正)"]}, {"predicate": "功能", "object": null}]}
實體描述文本構建
知識庫中的數據為結構化數據,需要將結構化數據變成文本,所以按照 ['產地', '功能', '症狀', '主要成分', '生產企業', '規格'] 的順序對知識庫中的結構化文本相連得到商品實體的描述文本。經實驗分析,「產地」、「功能」對結果影響較大,放在了前面,而 「生產企業」、「規格」 影響較少,放在了後面。對於上述 「硼酸氧化鋅散」 的例子構建的描述文本為:
硼酸氧化鋅散的產地為中國,症狀為本品具有收斂、止癢、吸溼、殺菌作用。用於預防和治療成人和嬰幼 兒各種原因引起的痱子。主要成分為本品為複方製劑。其組分為:每盒含氧化鋅 12.5g、硼酸 12.5g,生產企業為中國醫科大學附屬盛京醫院,規格為 50g
四、召回模型
針對每個標題文本需要從知識庫找到對應的那一個商品實體,雖然經過上述的處理剩了 4000 左右的實體,但是如果直接採用 Interaction-Based(交互型,即標題和實體描述文本在模型中存在信息交互) 類型的網絡,計算量將巨大。對於 8w 的訓練集,則過一遍有 3.2 億的計算量,因此交互型網絡在召回階段無法使用,可以在後續排序階段使用。
因此傳統的文本召回方式如 TF-IDF、BM25 等基於傳統特徵的召回方式不適用於當前數據集,而基於深度學習的召回網絡如 DSSM[2]、CLSM[3]等僅僅使用了靜態的詞向量,而商品標題一般較短,上下文語境不豐富,必須對上下文語境進行精準理解,所以此類模型效果依舊不行。
最終團隊決定採用基於預訓練模型 BERT 的排序模型進行召回,模型依據 Sentence-Bert[4],採用 triplet network[5]形式,loss 為 Triplet loss,模型共用同一個 BERT 層。
Triplet loss
Triplet loss 輸入樣本對是一個三元組,這個三元組
由一個錨點樣本
、一個正樣本
和一個負樣本
組成。其目標是錨點樣本與負樣本之間的距離
與錨點樣本和正樣本之間的距離
之差大於一個閾值
,可以表示為:
對於簡單容易學習的樣本
,這種對比起正樣本來說,負樣本和錨點樣本已經有足夠的距離了(即是大於 m ),此時 loss 為 0,網絡參數將不會繼續更新,對於其他樣本 loss>0 網絡參數可以正常更新。
針對此任務,如下圖 1 所示,錨點(Anchor)樣本為標題文本,正樣本(Positive)為標題對應的實體描述文本,負樣本(Negative)為其他隨機選擇與正樣本不同的實體描述文本,團隊採用了 Pytorch 中 TripletMarginLoss 類作為實驗方式,為了讓模型達到最優效果,將 margin 參數設置為 3(默認為 1)。
圖 1:Triplet loss
具體的召回模型圖如下圖 2 所示,Anchor 為商品標題,Positive 為正樣本的實體描述文本,Negative 為負樣本的實體描述文本,其中這三個輸入共享一套 BERT 模型參數。訓練時將上述三個文本輸入到 BERT 模型中,選取 BERT 模型的所有 Token 向量平均作為輸出,將三個輸入向量經過 TripletMarginLoss 得到損失值完成模型的訓練。負樣本選擇上採用動態負採樣,在訓練中的每個批次(batch)中,都對三元組進行動態的採樣樣本。
圖 2:Triplet BERT
模型推理
推理階段如下圖 3 所示,將所有標題文本和所有實體描述文本都經過 BERT 模型得到向量表徵,然後對於某一個標題文本的向量和所有實體描述文本的向量進行距離度量,其中採用歐式距離作為度量方式,選擇距離最近的 Top100,得到了該標題文本的前 100 個召回實體。
通過交叉驗證對訓練集進行預測,得到訓練集每個標題的前 100 個召回實體。對於測試集則採用了概率求平均進行模型的融合。其中 BERT 模型採用了兩種預訓練,分別是 ernie-1.0[6]和 roberta-wwm[7] 。對於兩個模型預測的結果也是採用了取平均的方式,在訓練集上召回覆蓋率達到 98.6%。
圖 3:召回推理
五、排序模型
排序分為兩個階段,分別是由 top100 排序得到 top10,再由 top10 排序得到 top1。每個標題的對應實體的 top100 由前面召回模型得到,在 top100 的基礎上構建粗排序模型,由粗排序模型得到 top10,然後在 top10 的基礎上構建精排序模型。
圖 4:排序模型圖
排序模型採用了基於二分類的排序方法,模型如上圖 4 所示,模型將標題文本和實體描述文本連在一起輸入到模型中,最後選取 CLS 位置的向量輸出進行二分類,然後對輸出的概率排序,完成實體的排序。
模型輸入有標題文本和實體描述文本構成,如:
標題文本:虎鏢肩頸舒
實體描述文本:虎標頸肩舒產地為新加坡,症狀為舒壓按摩,緩解肌肉緊繃,僵硬,酸痛等,主要成分為薄荷腦, 水楊酸甲酯
將上述兩段文本連在一起為:
[CLS]虎鏢肩頸舒 [SEP] 虎標頸肩舒產地為新加坡,症狀為舒壓按摩,緩解肌肉緊繃,僵硬,酸痛等,主要成分為薄荷腦, 水楊酸甲酯[SEP]
將上述文本輸入到 BERT 模型進行二分類,得到該標題與該實體的概率。
top100 -> top10
根據前面召回模型得到 top100,在此基礎上構建排序模型,負樣本選擇依舊採用動態負採樣。每個 Batch 在 top100 中選取 3 個與正樣本不同的樣本作為負樣本,也就是當前 Batch 內每個標題文本都對應有一個正樣本和 3 個負樣本。
預訓練模型依然採用了 ernie-1.0 和 roberta-wwm 這兩個模型,然後採用交叉驗證得到訓練集中每個標題對應的 top10 文本,對於測試集則採用對概率求平均的方式融合。在劃分的驗證集上 top100 -> top10 的覆蓋率達到 93% 左右。
top10 -> top1
top10 -> top1 和 top100 -> top10 訓練方式一樣,負採樣格式改成 2,對測試集採用了 ernie-1.0、roberta-wwm 和 bert-wwt 三個模型並進行了融合。在劃分的驗證集上最後的準確率達到 83% 左右。
六、結果與總結
採用上述方案,DeepBlueAI 團隊在最終的測試集上達到了 88.489 的準確率,對比後幾名有著很大的領先,證明了方案的有效性。
上述模型採用 bert-base 版本,速度較慢,所以也在 bert-tiny(3 層的 roberta)上進行過實驗,比 base 大概低 2 分左右,但是速度提升很快。在實際應用中可以嘗試使用 bert-tiny,這樣也能達到一個很好的效果。或者針對數據蒸餾出一個比 bert-tiny 效果更好的小模型,這也是一種可行的方案。
參考文獻
[1] Devlin J, Chang M W, Lee K, et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J]. 2018.
[2] Huang, Po-Sen, et al. "Learning deep structured semantic models for web search using clickthrough data." Proceedings of the 22nd ACM international conference on Information & Knowledge Management. 2013.
[3] Shen, Yelong, et al. "A latent semantic model with convolutional-pooling structure for information retrieval." Proceedings of the 23rd ACM international conference on conference on information and knowledge management. 2014.
[4] Reimers, Nils, and Iryna Gurevych. "Sentence-bert: Sentence embeddings using siamese bert-networks." arXiv preprint arXiv:1908.10084 (2019).
[5] Schroff, Florian, Dmitry Kalenichenko, and James Philbin. "Facenet: A unified embedding for face recognition and clustering." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.
[6] Sun, Yu, et al. "Ernie: Enhanced representation through knowledge integration." arXiv preprint arXiv:1904.09223 (2019).
[7] Cui, Yiming, et al. "Revisiting Pre-Trained Models for Chinese Natural Language Processing." arXiv preprint arXiv:2004.13922 (2020).
Amazon SageMaker實戰教程(視頻回顧)
Amazon SageMaker 是一項完全託管的服務,可以幫助機器學習開發者和數據科學家快速構建、訓練和部署模型。Amazon SageMaker 完全消除了機器學習過程中各個步驟的繁重工作,讓開發高質量模型變得更加輕鬆。
10月15日-10月22日,機器之心聯合AWS舉辦3次線上分享,全程回顧如下,複製連結到瀏覽器即可觀看。
另外,我們準備了Amazon SageMaker 1000元服務抵扣券,幫助開發者體驗各項功能。點擊閱讀原文,即可領取。
第一講:Amazon SageMaker Studio詳解
主要介紹相關組件,如studio、autopilot等,並通過在線演示展示這些核心組件對AI模型開發效率的提升。
視頻回顧地址:https://app6ca5octe2206.h5.xiaoeknow.com/v1/course/alive/l_5f715443e4b005221d8ea8e3
第二講:使用Amazon SageMaker 構建一個情感分析「機器人」
主要介紹情感分析任務背景、進行基於Bert的情感分析模型訓練、利用AWS數字資產盤活解決方案進行基於容器的模型部署。
視頻回顧地址:https://app6ca5octe2206.h5.xiaoeknow.com/v1/course/alive/l_5f715d38e4b0e95a89c1713f
第三講:DGL圖神經網絡及其在Amazon SageMaker上的實踐
主要介紹圖神經網絡、DGL在圖神經網絡中的作用、圖神經網絡和DGL在欺詐檢測中的應用和使用Amazon SageMaker部署和管理圖神經網絡模型的實時推斷。
視頻回顧地址:https://app6ca5octe2206.h5.xiaoeknow.com/v1/course/alive/l_5f715d6fe4b005221d8eac5d
© THE END
轉載請聯繫本公眾號獲得授權
投稿或尋求報導:content@jiqizhixin.com
喜歡此內容的人還喜歡
原標題:《CCKS 2020「基於標題的大規模商品實體檢索」競賽冠軍,DeepBlueAI團隊技術分享》
閱讀原文