阿里妹導讀:針對業務場景中標註數據不足、大量的無標註數據又難以有效利用的問題,咱們提出了一種面向行爲序列數據的深度學習風控算法 Auto Risk,提出經過代理任務從無標註數據中學習通用的特徵表示。這種思想與目前 NLP 領域前沿的 Bert 等預訓練模型不謀而合,可是因爲行爲序列數據和業務的特色顯著區別於 NLP,模型的設計和實現又有很大區別。最終,模型在真實場景中落地並取得了顯著的增益;實驗驗證具備較好的多場景泛化能力;相比純粹的監督學習,在小樣本狀況下提高明顯。算法
行爲序列數據,如淘寶購物,支付寶風控事件等,在內部場景十分常見,也是推薦、風控等問題的源頭級輸入之一。給定一個用戶的交易序列,要求預測他接下來會買什麼;給定風控事件序列,要求預測是好人仍是黑產,都依賴於將行爲序列表示成特徵向量,進而實現序列分類的基礎能力。網絡
行爲序列示意圖app
傳統方法是依據人工經驗設計大量的觸發、累積等特徵,在此基礎上訓練 GBDT 等分類器。近年來,一個較爲成功的方向是使用 RNN、CNN、Attention 等神經網絡,直接以原始行爲序列做爲輸入,輸出分類結果或者特徵向量。這種方法充分發揮 Everything-to-Vector 的思想,避免了繁瑣的人工特徵工程。例如,咱們團隊提出的 Detail Risk 框架,將一個用戶的行爲序列通過離散字段 embedding、文本卷積、多字段融合、事件卷積、Attention 等多層網絡,最終轉化爲分類向量,在等多個場景落地,大量減小了人工工做,同時提升了模型效果。框架
Detail Risk 框架示意圖性能
美中不足的是,這類方法大可能是監督學習,label 樣本不足的陰影始終揮之不去:少許樣本沒法真正發揮神經網絡模型容量大的優點;引入 multi task label 輔助又要仔細權衡各個 task 之間的遷移能力,容易按下葫蘆起了瓢。學習
而在另外一方面,咱們的業務中積累了堪稱海量的未標註數據,若是能利用這些未標註數據訓練模型,學習通用的高層特徵,而將有限的 label 留給下游場景訓練一個簡單的分類器,將會極大地提升數據的使用率;另外,這些無監督產生的特徵向量和人工設計的特徵徹底不一樣,融合後更容易取得效果提高。測試
相同的問題並不是只發生在內部業務中,更加本源性的 NLP 研究從去年開始揭示了一條解決之道:Pretrain (預訓練)技術——利用隨手可得、可是蘊含知識的代理任務+大量的未標註數據+更深的網絡,讓模型自動學到有效的高層特徵,在下游任務中稍加 finetune 便可取得很好的效果。進入2018年以後,ELMo、GPT、BERT、GPT二、 ERNIE 等預訓練模型一遍又一遍地刷新了 NLP 各個基礎問題的 SOTA,大有長江後浪推前浪之勢。其中 BERT 更是一舉刷新11項記錄,同時也刷爆了算法工程師的朋友圈。優化
與訓練原理示意圖ui
在 CV 領域,使用 imagenet 預訓練的大型網絡能夠追溯到深度學習的寒武紀時代——2014年;在 NLP 領域,使用 word2vec 或者 glove 預訓練的詞向量也是常規作法。可是,預訓練一個像 Bert 這樣大型的、可以顯著提升下游任務效果的、還不使用 label樣本的模型,卻直到最近才爆發。做者認爲是4個前置條件的達成解鎖了這個科技。編碼
預訓練模型 Bert 所依賴的科技樹
目前,內部一些 NLP 產品已經率先用上了 BERT,可是在 NLP 以外的領域目前還未見獲益。究其緣由主要有:
1. 數據形式不一樣。風控、推薦等場景裏的數據不是文本,而是行爲序列。這不只致使了谷歌提供的預訓練參數不可用,更要求咱們的模型去適配如下的數據特色:在每一個時刻T 都有着多個輸入字段、字段之間模態不一樣、序列長度巨大,沒有自然存在的句子分隔,等等。
2. 訓練開銷巨大。這些專爲 NLP 問題設計的模型,走的都是重型武器的路子:單層1600萬參數的 Transformer,先來個十幾二十層,總體參數2億起;顯存殺手 Self-Attention,在輸入序列長度超過1000時單層就會致使 OOM(Out-Of-Memory);即使顯存燒得起,收斂速度也很慢,8臺最新的 GPU,訓練時間也要以月計。爲了解決天然語言中複雜的 parsing 和 composing 問題這樣作是值得的,可是對行爲序列數據來講,顯得有些浪費。
所以,要享受預訓練的好處,咱們還須要另起爐竈,根據數據和業務特色,設計並實現本身的 Pretrain 模型。本文正是基於這種背景,設計並實現了一套行爲序列無監督 Pretrain 框架,同時在實際業務落地中驗證了其有效性。因爲咱們的業務場景是風控,所以將其稱做 Auto Risk 模型。
4.1 代理任務
預訓練模型不須要任何實際任務的 label,可是須要隨手可得的代理任務來驅動訓練。代理任務的設計徹底決定了模型會挖掘什麼樣的知識。咱們將行爲序列數據和文本進行類比,將每一個時刻t當作一個詞,每一個連續序列1:T當作一個文檔,那麼相似於 BERT,咱們也設計了兩類代理任務:
兩類代理任務
4.2 網絡結構
代理任務提供了隨手可得的 label,具體模型結構的核心則是 Encoder 網絡。根據筆者在第2、三章的分析,像 BERT、GPT 那樣直接使用重型武器 Transformer 是很是低效的。咱們提出了一個更加高效的基於卷積和注意力的 Encoder 結構:
Auto Risk 模型結構示意圖
■ 4.2.1 Convolution 層改進
Convolution 用於序列時,須要疊加多層以增大視野,這就帶來了兩個反作用:1.梯度彌散,優化變難,2.參數和計算量巨增。爲了解決這兩個問題,咱們結合兩類特殊的卷積以替代通常卷積:Gated Conv 和 Depthwise Separable Conv。首先使用與 LSTM 相似的門機制來抑制梯度彌散問題,能夠疊更多的層數;再將一次卷積分解成depthwise 和 pointwise 兩步,使得參數量和計算量都從減小到,以特徵維度 D=256,卷積核寬度 K=5爲例,參數和計算量從32萬降到6萬,僅爲原來的20%;若採用 K=31這樣的大卷積核,甚至僅爲原來的3.6%。改進後的卷積層顯著提升了模型的收斂速度和最終效果。
卷積改進
■ 4.2.2 Attention 層改進
Attention 帶來了優秀的視野和能力,但代價是的顯存佔用,由於它須要在序列內作兩兩對比。實踐中,在序列長度超過1000時,一層 Self-Attention 就會形成顯存溢出 OOM,而1000在行爲序列問題中還並不算很長。出於現實考量,咱們研究了 Fixed Size Attention 或者 Block Attention 替換通常的 Self-Attention,以微小的性能下降爲代價,分別將顯存佔用率優化到 O(2NK) 和
,最終實如今單 GPU 上,對長度4000的序列,可以疊加3層改進後的 Attention,順利覆蓋業務需求。
注意力改進
要訓練一個這樣的大型網絡,還有不少 trick 要用到,本篇再也不贅述,後續由系列文章分享。
4.3 訓練
通過以上一系列優化,咱們最終僅用一張顯卡實現:
下面這張圖對比了使用不一樣 Encoder 結構的訓練過程,能夠發現:
5.1 業務增益
首先,咱們評估 Auto Risk 模型對業務的增益。咱們使用的風控行爲序列包括登陸、改密、交易等重點風控行爲。咱們從全體用戶中隨機採樣了部分做爲訓練集,訓練了一個三層、hidden=128的網絡,而後對其餘用戶,推斷其向量。最後將這些向量加入到特徵池子中,比較 AUC 效果提高。參與比較的有:
人工特徵 SOTA:人工特徵的 state-of-the-art,如資產能力、信貸信用等,這些都是在消費金融、信貸、先享後付等場景久經考驗的特徵。
+ AutoRisk pretrain:在人工特徵 SOTA 的基礎上,加上原始的 Auto Risk 向量。
+ AutoRisk finetune:在人工特徵 SOTA 的基礎上,加上場景 finetune 以後的 Auto Risk 向量。
可見,加入 Auto Risk 向量以後,AUC 取得3~6個點的顯著提高,說明無監督的 Auto Risk 可以從行爲序列中提取到有用的特徵;在具體場景中 finetune 一下網絡參數會比不作 finetune 更好,這一點與 Bert 等也是相同的。爲了簡化對比,這張圖只展現了使用風控事件做爲序列數據的效果。
5.2 多場景效果
因爲 pretrain 模型的訓練過程沒有用到任何具體的場景 label,所以學到的知識比較通用。咱們嘗試了不一樣場景,包括一些看似無關的預測性別和年齡的問題,既不加任何人工特徵,也不作 finetune,只用最簡單的 LR 分類器,分別作 train-test,結果比較驚喜,有的甚至 AUC 達到0.9。一個潛在的業務價值是,也許能夠用超低的代價,實現對各個業務的通用補充特徵。
爲什麼僅用 LR 就能夠取得這樣的效果?能夠這樣理解:Auto Risk 將行爲序列的信息比較完整地保留到一個性質較好的 Embedding 空間中,對不一樣的任務能夠找到各自適合的線性分類界面。下圖展現了消費金融場景的測試集樣本和分類平面,因爲使用了降維算法(Umap)將128維的向量降到3維,分類性能損失了大約6個點的 AUC,可是依然能夠清晰地看到:
1.非商戶具備明顯的分類平面;
2.空間具備明顯的流形結構,具體每一個簇表明什麼含義咱們尚未去分析,可是能夠確定的是簇中的點具備類似的行爲模式。
5.3 小樣本學習
Pretrain 帶來的另外一個優點是小樣本福音。深度學習模型由於參數衆多,通常在 label樣本較少時效果不佳,而 Pretrain 模型已經經過無監督代理任務學會了大部分知識,所以少許label樣本就能夠取得更好的結果,更適合冷啓動或者 label 昂貴的業務。咱們在先享後付場景 B 上對兩類不一樣的行爲序列數據分別進行了實驗,結果都代表 Auto Risk 會比從零開始訓練一個監督學習的神經網絡要好的多;在行爲日誌數據上,甚至都不用 finetune,僅用 Auto Risk+LR,就比監督學習更好。訓練集的 label 樣本數量已經達到4萬(正負樣本各2萬),監督學習尚未可以追上 Auto Risk+finetune。
5.4 序列 Analogy
Analogy,即單詞類比,是 Word Embedding 的一個有趣特性。在 Embedding 空間裏,國王(King)-男人(Man)=王后(Queen)-女人(Women),中國(China)-北京(Beijing)=法國(France)-巴黎(Paris),相似的等式從側面證實了 Embedding 空間確實抓住了高層語義。那麼,咱們的 Auto Risk 空間中的序列有沒有這種特性呢?咱們一樣進行了一個 A-B=C-D的實驗,對100萬個樣本構成的集合,選定 A、B 和 D,經過與A-B+D 向量的餘弦類似度召回 C。爲了看得更清楚,咱們將不一樣的字段分開展現,但訓練過程仍是多字段一塊兒的。
事件類型:A(淘寶花唄付款) - B(淘寶餘額付款) = C(站外花唄付款) - D(站外餘額付款)。A-B 獲得的淘寶付款方式的差別向量,加到站外付款用戶 D 上,一樣會把他的付款方式從餘額變成花唄,說明模型學到的 Embedding 空間中,有一些方向是專門記錄付款方式的。
A=[建立交易-淘寶實物擔保,花唄付款-淘寶實物擔保,建立交易-淘寶實物擔保,花唄付款-淘寶實物擔保,建立交易-淘寶實物擔保,花唄付款-淘寶實物擔保,建立交易-淘寶實物擔保,花唄付款-淘寶實物擔保,建立交易-淘寶實物擔保] B=[建立交易-淘寶實物擔保,餘額付款-淘寶實物擔保,建立交易-淘寶實物擔保,餘額付款-淘寶實物擔保,建立交易-淘寶實物擔保,餘額付款-淘寶實物擔保,建立交易-淘寶實物擔保,餘額付款-淘寶實物擔保,建立交易-淘寶實物擔保] C=[花唄付款-站外即時到帳,花唄付款-站外即時到帳,花唄付款-站外即時到帳,pc端-建立交易,login_登陸_app_其餘_,花唄付款-站外即時到帳,pc端-建立交易] D=[app端-登陸,餘額付款-站外即時到帳,餘額付款-站外即時到帳,餘額付款-站外即時到帳,餘額付款-站外即時到帳,餘額付款-站外即時到帳]
金額:A(大金額用戶) - B(小金額用戶) = C(大金額用戶) - D(小金額用戶)。召回的 C 也恰好和A同樣是8000和10000,看來模型對數字分檔的記憶力仍是不錯的。
A=[\\N,\\N,10000.0,10000.0,10000.0,8000.0,8000.0,8000.0,\\N,8000.0,\\N,\\N,8000.0,\\N,8000.0] B=[\\N,\\N,10.0,10.0,10.0,10.0,10.0,10.0,\\N,10.0,\\N,\\N,10.0] C=[\\N,\\N,\\N,8000.0,\\N,\\N,8000.0,\\N,\\N,\\N,\\N,\\N,\\N,10000.0,\\N,10000.0] D=[\\N,1.0,\\N,1.0,\\N,1.0,1.0,\\N,1.0,\\N,1.0,1.0,\\N,1.0,\\N,\\N]
商品名稱:A(打車高頻用戶) - B(充幣高頻用戶) = C(打車高頻用戶) - D(充幣高頻用戶)。注意商品名與其餘字段不一樣,須要通過一個 CNN 或 Average 的子網絡處理成向量,還能有這樣的特性,並且召回了一些與"滴滴快車"類似但不一樣的"汽車票"、"乘車時間"等,說明網絡對文本描述具備必定的泛化能力。
A=["滴滴快車-周師傅","滴滴快車-周師傅",...,"滴滴快車-邵師傅","滴滴快車-邵師傅",...] B=["騰訊Q幣100元qq","騰訊Q幣100元qq",...,"騰訊Q幣100元qq","騰訊Q幣100元qq",...] C=["滴滴快車-馮師傅","滴滴快車-馮師傅","汽車票**汽車總站(南區","","汽車票**汽車總站(南區)","","聯通話費10元快充","","","滴滴快車-亓師傅","滴滴快車-亓師傅","","","0000****-車牌【00*****】乘車時間:2019-04-1914:53:02"] D=["騰訊1000QQ幣1","騰訊QQ幣/Q幣卡/",...,"騰訊QQ幣/Q幣卡/","騰訊QQ幣/Q幣卡/",...]
咱們提出了一種行爲序列深度學習算法 Auto Risk,不須要具體 label 訓練,而是基於相似於 Bert 的代理任務預訓練思想,從大量的未標註數據中,挖掘上下文關聯和標誌性特色,生成有用的高層特徵,解決了 label 樣本不足而 unlabel 樣本又難以利用的問題。咱們特別針對數據和業務特色設計模型結構,以方便快速訓練部署。該方法在咱們的實際業務中落地,取得了明顯的效果提高;因爲訓練過程不須要 label,模型結果對其餘場景的泛化能力較強;另外,對小樣本場景提高明顯;序列 Analogy 的實驗側面印證了 Auto Risk 向量空間可以捕捉高層語義。後續,咱們將持續這部分工做,擴展到更多類型的數據源和應用場景,並檢驗其餘的代理任務,包括歷史積累的多場景 label 做爲代理任務等。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。