京東零售基於NLP的風控演算法模型構建實踐

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

  導讀:本團隊主要負責京東零售領域的風控演算法模型構建,針對京東零售風控方面,業務要求不斷地更新、模型失效快、更新迭代慢以及成本高昂等情況,我們提出了自己設計研發的 NLP 預訓練架構模型和使用者行為預訓練模型,並進行預訓練模型的平臺化,方便一鍵部署開發,快速迭代,簡單易用,推理速度提升等,有效解決了業務問題,並在公開資料集上也得到了很好的效果。

  本文將對我們的一些工作進行介紹,並對未來京東零售風控的發展方向進行展望。主要包括以下幾部分:

  背景介紹

  NLP 預訓練

  使用者行為預訓練

  預訓練平臺化

  展望

   01 背景介紹

  首先介紹一下京東零售風控的背景。  

  如上圖所示,京東零售風控的任務是維護京東零售平臺健康的交易生態環境,主要包括主站 APP、PC 端等。場景包括 C 端和 B 端兩大部分。

  C 端風控主要針對惡意刷券,使用外掛軟體獲取權益,比如用一些駭客軟體搶茅臺等,還有一些廣告辱罵的內容,比如發小廣告、不合規的內容等,以及價格方面的管控等。B 端風控主要是針對商家刷單行為、惡意套利行為,以及客服防騷擾。  

  如上圖所示,零售風控演算法能力整體上分為使用者行為和文字兩大部分。使用者行為這一塊,透過上面提到的場景,演算法人員可以將這些場景的資料構建成統計特徵、序列行為特徵,比如瀏覽頁面等。文字這一塊,主要是內容風控,包含輿情,地址異常等場景識別作為基礎,以 NLP 的文字特徵作為識別的基礎。風控領域相對於其他領域的 NLP 場景,其主要的特點是異音異形字的識別,比如加微信,如上圖中所示,透過一些異形字型,+薇信,躲避文字的風控檢測。

  以上兩大場景,存在以下幾個問題:

  第一,失效快,比如廣告引流場景,模型很快就會有效果衰減,具體原因就是惡意攻擊者,會反覆嘗試不同的字型和形式,用以破解演算法模型,從而達到自己的目的,導致模型失效或者效果下降。

  第二,針對新的業務場景,需要大量的人工標註資料,人工標註的成本會非常高,而且耗時比較長。

  第三,建模的效率低,效果差,因為首先要做特徵,特徵完之後,再預訓練模型,整個鏈條拉得非常長,等到模型做好之後,業務方可能不需要這個模型了,或是效果不能達到預期,有的模型效果要求準確率達到接近 100%。

  針對這三個問題,我們做了一些思考研究。針對失效快的問題,是否可以建立一個長期有效的機制來解決;針對需要人工標註大量資料這個問題,是否可以建立一個小樣本學習能力的模型,不需要標註那麼多的標籤資料,使用無監督的方式進行訓練;針對建模效率低、效果差等,是否可建立一個特徵,模型平臺化自動生成的機制,使預訓練模型和大模型更好地發揮作用,快速建模和生成模型。

  基於以上思考,我們依賴於預訓練技術,做了一些改進最佳化。

   02 NLP 預訓練  

  如上圖所示,NLP 是風控內容、輿情、地址等風控能力的基礎,而且,近年來,預訓練技術是處理 NLP 的最常用的方式。整體的流程如上圖所示:首先資料採集,然後進行模型預訓練,最後對模型進行微調。  

  如上圖所示,本團隊也嘗試在開源 Bert 上進行微調訓練,發現效果很差,主要原因有三:第一,公開資料集覆蓋的是普通文字,不是風控領域的資料,所以,收斂效果很差;第二,開源的資料集上沒有生僻字等情況,導致訓練出的模型容易失效,因為風控領域有很多的生僻字;第三,在小樣本的訓練集上效果不好。整體而言,就是資料偏差,即沒有風控領域的資料進行訓練,導致開源 bert 的效果無法發揮出來。

  首先,常見的 bert 改進分為三個方面:

  第一,資料方面,主要透過採用更多的資料集,或者有效資料的清洗策略;以及針對特殊領域引入領域內的資料,包括引入其他嵌入模型等,比如 Chinese-Bert,Ernie-T 等模型。

  第二,改變訓練任務,從而提高模型的泛化能力。主體上的改進方向有以下幾種:刪減 NSP 預訓練任務,比如 Roberta;基於實體的掩碼語言模型,比如 BERT-wwm 等;以及引入其他有效的預訓練任務等,比如 ERNIE 等。

  第三,其他的應用方向,比如一些跨語言模型,跨模態模型等。

  結合以上問題,以及常用的 BERT 改進方向,本團隊設計出一個適用於風控領域的自適應模型。  

  如上圖所示,結合調研的情況,本團隊在資料和字典這一塊,做了風控領域的資料和字典。如上圖左圖所示,主要是零售領域的業務資料,以及電商領域的資料,為了具有泛化能力,需要社群互動、對話資料以及百度百科等的資料,總共採集了 10 億條資料;在字典方面,如上圖右圖所示,增添了異音異形字、電商高頻字、生僻字等。  

  如上圖所示,第一步將語料和字典構建好,但是,如果僅僅引入生僻字,還是不具備足夠的泛化能力, 如果輸入換了一批生僻字,還是不能很好的識別,本團隊進行充分實驗和調研,針對異音異形字,有很多情況是形不一樣,但是音一樣,比如“+”和“加”,是一個音,所以新增了拼音的編碼。另一塊就是字形,比如“京東”的“京”,再加一個單人旁,變成“倞”,和“京”很相似,所以也引入了字形的編碼,從而提高對異音異形字的識別。  

  接下來,針對任務排程進行規劃。引入任務排程,主要是為了解決不同的業務場景,比如評論、輿情、地址、諮詢、直播等十幾個場景效果不均衡的問題。如上圖左圖所示,是本團隊調研的開源的解決方案。方案1主要是透過多工的學習方式進行學習,所以,會導致不同任務的收斂程度不一致;方案2是透過持續學習,但是,但是,比如 task1 已經學習的非常好了,但因為後面的 task 並沒有訓練好,共享的BERT部分的引數還是會不斷的調整,可能會破壞 task1 已經學到的特徵;方案3是結合了方案1和方案2,有一定的最佳化,但是,task 的難易程度是人為定義的,具有很大的主觀性,而且,也還是會存在 task1過度訓練的情況。

  針對前面幾個方案的分析,本團隊提出了上圖右圖的方案,構建內迴圈可持續學習任務排程方案。首先,針對不同的任務進行分組,然後在訓練過程中,感知到不同的組的訓練情況,比如某一個 task 的效果變差,即針對性的去訓練這個組,從而提升模型的能力。  

  接下來,如上圖所示,是本團隊針對訓練加速的方案設計。如果按照傳統的訓練方式,從頭訓練一個億級的規模模型需要十幾天的時間,如果是 T5 模型需要幾十天,耗時過長。本團隊基於京東自己的架構,並對資料和模型進行改進。首先,使用 ZeRO 的框架,可以在不影響通訊效率的情況下,讓模型的記憶體均勻的分配到每個 GPU 上,減少單個 GPU 的視訊記憶體個,提高並行效率。其次,在操作融合方面,透過將多個操作進行融合,一次執行多個計算邏輯,減少全域性記憶體的訪問,有效的提高訓練吞吐。最後,基於多源頭資料讀取能力,充分發揮 A100 顯示卡潛能。  

  推理加速方面,因為模型部署主要是實時場景,對時延要求比較高,所以需要對模型進行蒸餾,提高推理速度。基本上使用業界的主流方式,將模型引數壓縮 90%,推理速度提升 3 倍,效果接近於原始預訓練模型。  

  上圖是本團隊預訓練模型的效果展示。因為使用了開源資料集的緣故,所以具有泛化性,在開源的 6 個資料集上,基本上都達到了最好的效果。在內部資料集上,廣告識別,以及異常地址識別,有非常明顯的提升。在業務指標上,模型更新以及建模速度有了非常大的提升,並且小樣本訓練的效果有了非常大的提升。

   03 使用者行為預訓練  

  接下來介紹使用者行為預訓練。前面講到,使用者行為是風控能力識別能力的基礎,行為模型的深度決定了風控能力的上限。預訓練模型使用以前,不同的業務場景,會各自建設一個風控的模型,存在重複性的勞動,而且特徵選擇不盡相同,各個場景都是從 0 到 1 獨立的建模。該方式存在的問題:

  第一,效率低,統計特徵構建速度慢、人工澆築慢,未能有效利用龐大細分場景標籤;

  第二,效果差,模型簡單、建模方式簡單,魯棒性差等;

  第三,底層支援少,缺少統一建模方案。

  預訓練模型的特點,可以克服以上幾個問題,畢竟預訓練是站在巨人的肩膀上,底座模型加細分場景微調,可以快速建模;並且效果好,有監督、無監督預訓練可以充分挖掘存量標籤、資料知識等;由於特徵和模型統一建設,底層具有強支撐。  

  預訓練模型主要應用於 NLP 領域和 CV 領域,其他的領域方面,還處於起步階段。在業界,谷歌和騰訊等有行為預訓練在推薦和畫像等場景有應用,但是行為預訓練在風控領域處於空白狀態。風控領域的使用者行為特徵,主要還是瀏覽、搜尋等序列特徵,以及大量手動設計的統計特徵。  

  上圖展示了使用者行為預訓練模型的整體演算法模型。首先,將使用者的行為、類別等多模態資訊進行融合,透過 Transfermer 將其轉化成統一的行為特徵,輸入到 bert 中進行預訓練。總的引數量達到了 5 億多,表達能力遠超 Bert 模型。未來使用預訓練模型達到業務目的,本團隊也應用了很多對比學習的方法,比如 NSP、MLM、有監督等方法,放到內迴圈的學習系統裡面,使模型充分地學習到資料的知識。下一個階段,是進行微調。當微調的樣本不是很多,由於引數量很大,為了防止微調調偏,需要定製化的操作,比如凍結部分引數等,使模型具有更好的泛化效能。  

  上圖是整個使用者行為預訓練的框架。風控的場景有很多,比如惡意訂單、刷單等,異常的散亂複雜,而且碎片化,每個場景的準確度、召回率等要求不盡相同,所以需要考慮框架的適用性和泛化性。如上圖右邊所示,在自動化資料轉換過程中,直接將使用者的資料封裝起來,不同場景的輸入,作為引數,輸入到資料中,然後輸出轉換後的行為資料。並且將預訓練模型訓練過程也進行封裝,主要是對微調階段進行訓練處理。在微調階段,根據自定義模式,對模型進行微調,這樣不管業務是幾十個,甚至幾百個場景,底層的訓練是保持不變的,微調階段可以部署到不同的業務場景。 

  使用者行為預訓練模型的效果如上圖所示。首先在效率方面,建模效率大大提升,週期降低 8 倍以上;其次,在效果上,模型效果長期穩定,魯棒性非常強,而且在同等精度下,召回率提高一倍以上;在標註樣本方面,支援小樣本標註資料;在技術和資料沉澱方面,持續做大做強預訓練模型,提升風控全場景識別能力。

   04 預訓練平臺化

  預訓練平臺化的目的,是為了解決之前存在的問題:之前的模型框架的使用,只存在於程式碼階段,存在閱讀程式碼費時間、費人力,並且介面混亂,雜亂無章等問題。搭建平臺之後,支援一鍵式使用,方便高效。  

  如上圖所示,本團隊將 NLP 這塊的內容封裝到 RiskNLP 包中,非常簡單易用,而且功能十分健全,比如支援多種模型型別轉化,多工模型,NER 等複雜的功能,都可以一鍵式訓練出來;並且訓練速度,推理速度等,都可以一鍵式的配置,非常方便。  

  上圖是本團隊提出的 RiskCDA 工具包,主要是提高異音異形字的對抗能力。這個工具包,既支援 Python 安裝包一鍵部署,還支援本地線上擴充方式,並且支援自定義詞典,最重要的是支援多種基於深度學習的前沿擴充方式,比如 TextFooler 等。  

  最後,如上圖,是使用者行為預訓練模型的工具包——RiskBehavior 包。一鍵部署使用,與前面包所不同的地方就是這邊的特徵展出,也是部署成為服務的形式,針對內部需要的特徵,都可以進行產出。並且在速度最佳化方面,也得到了很好地實現。

   05 展望  

  對於未來的展望,主要分為以下幾個方面:

  第一,預訓練模型不能只停留在 NLP 和 CV 領域,可以在更多的領域,比如風控,多模態等特徵,容納更多的資料知識,賦能業務。

  第二,更強大的模型,包括更大的引數、更強結構模型以及蒸餾能力等。

  第三,更強大的易用能力,更加快速便捷地應用到業務。

  第四,擁抱開源,將框架,以及資料和模型脫敏之後進行開源。

來自 “ DataFunTalk ”, 原文作者:王三鵬;原文連結:http://server.it168.com/a2023/0128/6787/000006787370.shtml,如有侵權,請聯絡管理員刪除。

相關文章