無標註數據是雞肋仍是寶藏?阿里工程師這樣用它

阿里妹導讀:針對業務場景中標註數據不足、大量的無標註數據又難以有效利用的問題,咱們提出了一種面向行爲序列數據的深度學習風控算法 Auto Risk,提出經過代理任務從無標註數據中學習通用的特徵表示。這種思想與目前 NLP 領域前沿的 Bert 等預訓練模型不謀而合,可是因爲行爲序列數據和業務的特色顯著區別於 NLP,模型的設計和實現又有很大區別。最終,模型在真實場景中落地並取得了顯著的增益;實驗驗證具備較好的多場景泛化能力;相比純粹的監督學習,在小樣本狀況下提高明顯。算法

1、背景

行爲序列數據,如淘寶購物,支付寶風控事件等,在內部場景十分常見,也是推薦、風控等問題的源頭級輸入之一。給定一個用戶的交易序列,要求預測他接下來會買什麼;給定風控事件序列,要求預測是好人仍是黑產,都依賴於將行爲序列表示成特徵向量,進而實現序列分類的基礎能力。網絡

行爲序列示意圖app

傳統方法是依據人工經驗設計大量的觸發、累積等特徵,在此基礎上訓練 GBDT 等分類器。近年來,一個較爲成功的方向是使用 RNN、CNN、Attention 等神經網絡,直接以原始行爲序列做爲輸入,輸出分類結果或者特徵向量。這種方法充分發揮 Everything-to-Vector 的思想,避免了繁瑣的人工特徵工程。例如,咱們團隊提出的 Detail Risk 框架,將一個用戶的行爲序列通過離散字段 embedding、文本卷積、多字段融合、事件卷積、Attention 等多層網絡,最終轉化爲分類向量,在等多個場景落地,大量減小了人工工做,同時提升了模型效果。框架

Detail Risk 框架示意圖性能

美中不足的是,這類方法大可能是監督學習,label 樣本不足的陰影始終揮之不去:少許樣本沒法真正發揮神經網絡模型容量大的優點;引入 multi task label 輔助又要仔細權衡各個 task 之間的遷移能力,容易按下葫蘆起了瓢。學習

而在另外一方面,咱們的業務中積累了堪稱海量的未標註數據,若是能利用這些未標註數據訓練模型,學習通用的高層特徵,而將有限的 label 留給下游場景訓練一個簡單的分類器,將會極大地提升數據的使用率;另外,這些無監督產生的特徵向量和人工設計的特徵徹底不一樣,融合後更容易取得效果提高。測試

2、預訓練

相同的問題並不是只發生在內部業務中,更加本源性的 NLP 研究從去年開始揭示了一條解決之道:Pretrain (預訓練)技術——利用隨手可得、可是蘊含知識的代理任務+大量的未標註數據+更深的網絡,讓模型自動學到有效的高層特徵,在下游任務中稍加 finetune 便可取得很好的效果。進入2018年以後,ELMo、GPT、BERT、GPT二、 ERNIE 等預訓練模型一遍又一遍地刷新了 NLP 各個基礎問題的 SOTA,大有長江後浪推前浪之勢。其中 BERT 更是一舉刷新11項記錄,同時也刷爆了算法工程師的朋友圈。優化

與訓練原理示意圖ui

在 CV 領域,使用 imagenet 預訓練的大型網絡能夠追溯到深度學習的寒武紀時代——2014年;在 NLP 領域,使用 word2vec 或者 glove 預訓練的詞向量也是常規作法。可是,預訓練一個像 Bert 這樣大型的、可以顯著提升下游任務效果的、還不使用 label樣本的模型,卻直到最近才爆發。做者認爲是4個前置條件的達成解鎖了這個科技。編碼

  • 代理任務的積累:代理任務並不是隨便選擇,從簡單的 Cbow 和 SkipGram,最終到 Masked-LM、NSP,代理任務愈來愈難,也愈來愈能抓住高層抽象知識,這是 Pretrain 的關鍵。
  • 深層網絡:越是深層的、大容量的網絡,越能抽取高層的特徵、存儲更豐富的知識。ResNet、各類 Norm 技術、乃至 SBBB(ShortCut、BottleNeck、Branches、BatchNorm)這類構造模式的出現讓深層網絡的搭建和訓練變得簡單。
  • Attention:把 Attention 單獨拎出來提並不過度。能夠說它爲神經網絡提供了專門的 memory,以及各類基於 memory access 的功能:對齊、組合、遠程依賴、全局視野等,極大豐富了模型的表示能力。這一點在咱們關心的序列數據上尤其明顯。
  • CNN 流崛起:相比 RNN,CNN 本來並不是爲序列數據設計,可是它天生易並行,對工業應用友好;易堆疊,適合作深層模型;欠缺的全局視野留給 Attention 去完成。本質上,Transformer 也屬於 CNN 流:寬度爲1的卷積核加上 Self-Attention。最近兩年來,ConvS2S,ByteNet,WaveNet,SliceNet,Transfomer 等各類 CNN 流的工業級框架,正在逐步佔領曾經屬於 RNN 的天下。

預訓練模型 Bert 所依賴的科技樹

3、問題分析

目前,內部一些 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、模型設計

4.1 代理任務

預訓練模型不須要任何實際任務的 label,可是須要隨手可得的代理任務來驅動訓練。代理任務的設計徹底決定了模型會挖掘什麼樣的知識。咱們將行爲序列數據和文本進行類比,將每一個時刻t當作一個詞,每一個連續序列1:T當作一個文檔,那麼相似於 BERT,咱們也設計了兩類代理任務:

兩類代理任務

  • 詞/事件級別的代理任務 Masked Language Model。咱們掩蓋輸入序列在某個時刻 t 處的值,要求模型在t處輸出的詞級別向量能預測被掩蓋的值。顯然這個任務會驅動模型去挖掘序列先後的關聯,將行爲放到上下文中考察。
  • 句子/序列級別的代理任務 Quick Thought。咱們經過採樣把每一個序列都分割成先後兩個子序列,使用孿生網絡對兩個子序列分別編碼爲一個向量,再把 batch 內的子序列們兩兩隨機組合,要求模型預測組合後的 pair 是否同源。這個方法最先來自 Skip Gram 的句子級別泛化——Skip Thought,然後將其中運行較慢的Encoder-Decoder 換成速度更快的孿生網絡,所以稱做 Quick Thought。顯然,qt 任務會驅動網絡去挖掘序列的標誌性特色。

4.2 網絡結構

代理任務提供了隨手可得的 label,具體模型結構的核心則是 Encoder 網絡。根據筆者在第2、三章的分析,像 BERT、GPT 那樣直接使用重型武器 Transformer 是很是低效的。咱們提出了一個更加高效的基於卷積和注意力的 Encoder 結構:

  • Embedding 層,用於把輸入字段向量化,例如事件類型、時間、金額、付款渠道、商品名等不一樣字段,通通 embedding 表示,而後經過 Add 或者 Concat 融合;其中文本字段是 List 形式,不只要 Embedding,還要經過卷積或者 Average 等方式彙總成單個向量。
  • Convolution 層,負責抓取局部上下文,咱們假設這是行爲序列的主要特徵(在風控場景中),要作得準確、高效;
  • Attention 層,負責抓取全局上下文,咱們假設這是行爲序列的次要特徵(在風控場景中),重要的是提供額外的視野和能力;
  • 一個 Convolution 層和一個 Attention 層組成一個 Block,使用 ResNet 的形式疊加多個這樣的 Block 造成一個 Encoder,就如同疊加多個 Transformer 造成一個 BERT 同樣,可以幫咱們實現信息的抽象、整合。

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 帶來了優秀的視野和能力,但代價是_2019_08_15_9_16_21的顯存佔用,由於它須要在序列內作兩兩對比。實踐中,在序列長度超過1000時,一層 Self-Attention 就會形成顯存溢出 OOM,而1000在行爲序列問題中還並不算很長。出於現實考量,咱們研究了 Fixed Size Attention 或者 Block Attention 替換通常的 Self-Attention,以微小的性能下降爲代價,分別將顯存佔用率優化到 O(2NK) 和_2019_08_15_9_17_07,最終實如今單 GPU 上,對長度4000的序列,可以疊加3層改進後的 Attention,順利覆蓋業務需求。

注意力改進

要訓練一個這樣的大型網絡,還有不少 trick 要用到,本篇再也不贅述,後續由系列文章分享。

4.3 訓練

通過以上一系列優化,咱們最終僅用一張顯卡實現:

  • 在長度4000的序列上訓練3層 Encoder 疊加的網絡,而基於 Transformer 的 Bert 模型最多隻能在1000之內的序列上訓練一層網絡。
  • 2~3倍於 Transformer 的 batch 訓練速度(序列越長越顯著)和更少的收斂步數,一天以內就能夠完成千萬級別數據的訓練。

下面這張圖對比了使用不一樣 Encoder 結構的訓練過程,能夠發現:

  • 使用卷積+注意力 Encoder 比僅使用卷積 Encoder 或注意力 Encoder 都要好;
  • 卷積對 Loss 的貢獻更大,發揮主要做用,注意力發揮次要做用;
  • 疊加多層 Block 效果更好。

5、應用效果

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幣卡/",...]

6、總結

咱們提出了一種行爲序列深度學習算法 Auto Risk,不須要具體 label 訓練,而是基於相似於 Bert 的代理任務預訓練思想,從大量的未標註數據中,挖掘上下文關聯和標誌性特色,生成有用的高層特徵,解決了 label 樣本不足而 unlabel 樣本又難以利用的問題。咱們特別針對數據和業務特色設計模型結構,以方便快速訓練部署。該方法在咱們的實際業務中落地,取得了明顯的效果提高;因爲訓練過程不須要 label,模型結果對其餘場景的泛化能力較強;另外,對小樣本場景提高明顯;序列 Analogy 的實驗側面印證了 Auto Risk 向量空間可以捕捉高層語義。後續,咱們將持續這部分工做,擴展到更多類型的數據源和應用場景,並檢驗其餘的代理任務,包括歷史積累的多場景 label 做爲代理任務等。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索