天天看點

EasyModeling算法架構介紹

作者:閃念基因

0. 背景

在全球數字化經濟浪潮的背景下,大資料與機器學習成為了這個新時代的弄潮兒。經營數字化、助力商家精細化經營符合公司“一體兩翼”的戰略目标,同時也是大勢所趨。機器學習、深度學習算法基于曆史積累的資料資訊進行決策,為商戶賦能提供了可能。

下圖是人工智能發展的時間線,随着計算機技術的不斷發展,機器學習已廣泛應用于資料挖掘[1]、計算機視覺[2]、自然語言處理[3]、生物特征識别、搜尋引擎、醫學診斷、檢測信用卡欺詐、證券市場分析、DNA序列測序、語音和手寫識别、戰略遊戲和機器人等領域。其中,深度學習屬于機器學習的一個分支,其利用的結構是神經元構成的神經網絡,更偏向于完成端到端的任務,如自然語言處理、計算機視覺等。

模組化工具鍊簡介

算法開發的工作平台依托于阿裡雲人工智能平台PAI[4](Platform of Artificial Intelligence)。資料源一般來自數倉(ODPS)和對象存儲(OSS),利用PAI-DSW(Data Science Workshop)Notebook互動式AI研發平台進行算法開發,選用PAI-DLC(雲原生AI基礎平台)或者PAI-EAS(Elastic Algorithm Service,線上預測)進行模型服務的部署。

1. EasyModeling架構簡介

建構EasyModeling架構的初衷:

面對收錢吧衆多的業務線,往往對于算法模組化任務會提出不同的需求,這就造成了:

  • 資料來源不固定:有的需求是需要從數倉中取數,有的要在OSS上,有的則是要對資料進行人工标注後才能訓練模型,重要的資料集沒有進行版本管理,資料資産得不到充分利用;
  • 任務目标不固定:有的需求是表格型資料挖掘任務,有的需求則是需要對非結構化的資料進行深度學習訓練,訓練代碼一個任務寫一次,如深度學習訓練模型,訓練過程可以形成模版,後面複用;
  • 部署方式不固定:有的需求實時性要求較高,有的需求則是T+1批量更新,模型預測器沒有統一的接口,在修改部署方式時,需要同時修改預測邏輯;
  • 第三方開源的解決方案性能發揮不到極緻:例如一開始的odps SDK隻能單核讀取數倉資料,針對上億的C端消費者模型打标,往往都要耗時3-5天,嚴重影響到了開發進度;還有現在開源的算法庫無法針對特定的任務進行最有效的優化。

這些都是需要去解決的問題。基于此,力求給模組化人員提供便利,提高模型開發的效率,并保留高度自定義的能力,并且為了更全面地支援模組化人員在PAI平台上對PyTorch、Tensorflow等深度學習算法的開發,提供了從訓練到部署的一站式模型開發體驗,着手開發了EasyModeling架構。明顯提高了模組化的效率和模型的可複用性,并對資料和模型等資料資産持久化。

EasyModeling架構擁有以下幾個特性:

  • 高可複用:針對于不同的部署場景,隻需要一套預測邏輯;模型和有價值的資料通過自研的架構形成資料資産,可以針對不同任務對模型和推斷邏輯進行無縫遷移和微調。模型儲存雲端,随時可以進行遷移訓練、微調等任務;
  • 易用:模組化人員可以根據自己的需求進行模型、資料處理、訓練、評估、預測等上進行自定義,降低使用算法的門檻;
  • 相容開源:可以無縫接入huggingface/transformers的預訓練模型;

2. 架構Overview

注:本模組化架構拒絕重複造輪子,旨在提升開發效率,并追求高可複用性和靈活性,并持久化收錢吧的資料資産。

EasyModeling算法架構介紹

3. 元件介紹

3.1 基礎子產品

3.1.1 IO子產品

  • 結合odps的python SDK接口,建立odps reader使模組化、分析人員常用的pandas dataframe結構與數倉中的表結構無縫銜接,僅一行代碼就可以實作常用的資料操作,如建立、寫入分區、(分區)表,删除分區、(分區)表,多核讀取分區、(分區)表;
  • 将python内置的io子產品與自研的oss io子產品做了一層包裝,使得讀取、寫入oss的模型檔案就像讀取本地模型檔案一樣輕松簡單;
  • 針對原資料檔案的格式與模型需要的輸入資料格式不一緻的問題,采用疊代器的方式進行批量的資料的預處理與後處理,與pytorch等深度學習架構的輸入資料流無縫銜接。

3.1.2 深度學習子產品

深度學習模型的訓練主要是針對指定Loss的優化,采用梯度下降和反向傳播的優化方法進行的模型參數的更新。是以,在訓練和驗證階段,需要不同的梯度保留政策,顯然利用靈活的trainer模版可以提高開發效率和保證開發的方向正确。Trainer模版包含了大部分深度學習開發所需要的基礎及高階功能,支援GPU加速訓練,并支援多卡并行訓練任務,log及tensorboard存放本地或者oss bucket上。

内置自定義Loss案例

若要真正解決業務痛點,做個“調包俠”遠遠不夠。如信貸業務線的信用模型,逾期資料與非逾期資料存在嚴重的類别不均衡。除了預處理時的資料增強,還可以修改Loss函數,這種方式直接提升了5%-10%的模型效果。如Kaiming大神的Focal Loss,一開始是為了計算機視覺中目标檢測出現的類别不均衡的問題而引入的loss計算方式。我們就可以修改為适合業務場景的loss,不僅可以調整正負樣本的權重,又能控制難易分類樣本的權重。進而使得模型的預測目标和業務預期目标保持一緻。

EasyModeling架構中用python實作了Focal Loss的計算方式,并可以用于LightGBM等ML模型的訓練上。

3.1.3 Tools

這個工具子產品主要是提供模組化時的一些log輸出,全局參數管理可以儲存每次訓練的環境參數和模型參數,保證模型或問題的可複現。

3.1.4 DM Hub

針對模型所需的訓練資料,有時并不是從數倉取出來的,而是業務同學花費人力、資源标注出來的,這些資料對公司對業務來講,都是有巨大價值的,是以将其持久化,使用的時候一鍵調用。對于模型來說也是如此,随着時間的變化,之前部署的模型的預測能力和預測穩定性會下降。模型儲存雲端,随時可以進行遷移訓練、微調等任務。

3.2 應用層

3.2.1 模型庫

不僅提供了預訓練模型的調用接口,也提供常用的模型結構、NN子產品。如用于推薦系統的DIN,DIEN等模型,如用于文本挖掘的TextCNN,Transformer等模型。其中,Transformer結構如下:

EasyModeling算法架構介紹

因為其可以給序列加位置編碼,注意力機制等特點,是用于文本挖掘的常用模型結構。而文本的含義就是這種基于上下文的特征得出的,和Transformer的結構相吻合。是以,往往大文本的任務都是基于Transformer的預訓練模型經過finetune得到的。

每個字在文本中的位置都會被不同的向量編碼,并且理論上不會重複,為了可視化這種位置編碼。下圖中代表了一段文本中不同位置的字,每個處在文本不同位置上的字都被賦予了不同的512維(y axis)的一個向量,顔色代表了數值的大小。

EasyModeling算法架構介紹

3.2.2 自動化調參工具

模型除了訓練得到的參數優化外,控制模型泛化能力(複雜程度)的參數并不是通過訓練獲得的,而是認為根據特定領域的特定經驗來進行調整的,俗稱“煉丹”。這部分參數除了可以認為調整外,還可以通過貝葉斯優化等優化算法得到全局最優解的近似解。

通過引入Hyperopt、NNI[5](Microsoft)等開源AutoML工具,對訓練代碼進行簡單的包裝,就可以在訓練平台進行自動化的調參工作。下面是某模組化任務下的不同超參數對應的模型表現圖。

3.2.3 部署

根據業務或開發所需要的時效性将部署算法模型分為以下三個場景:

  1. 準實時調用模型服務業務或開發對模型的響應速度要求比較高,s級别或ms級别,例如SPA标品庫、老闆圈推薦等場景,需要将模型和預測邏輯打包成RESTful API服務,供後端開發調用。
  2. T+1定時離線批量調用模型結果針對業務對模型标簽更新頻率要求較高,例如T+1,例如信貸業務場景,用以更新人群/商戶标簽,每日BI分析、決策。
  3. 一次性離線批量調用模型結果業務隻需要一次模組化需求,将所有的或一部分B端商戶或C端消費者打标,更新頻率較低,可手動執行。

Easymodeling架構出現之前,往往模組化人員針對不同的部署場景,即使預測邏輯一緻,也會寫出不同的接口來應對不同的場景。Easymodeling架構内的BasePredictor基類統一了預測邏輯的接口,一套預測邏輯就可以适用于這三個場景。模型服務部署效率得以顯著提升。

4. 應用案例——建立智慧經營菜品标品庫

智慧門店的餐飲商家品類衆多,有面類、飯類、小吃、甜品等各種商家。理想的加料的規則應當覆寫全品類和商品。平台美食、甜點、飲品類線上商品有百萬級之多,其中很多是屬性資訊一緻的相同商品。建立對商品的标準化描述、聚合相同商品,是小料搭配業務場景的底層訴求。以此為引子,産品也提出後續基于标品庫的衆多應用簡化菜單錄入、動銷分析、小料搭配...

基于上述業務應用的痛點,啟動掃碼點單菜品的标品庫建設。目标是建立菜品的标準化名稱,實作對相同菜品的聚合,進而為業務提供合理粒度的概念劃分。其中有個從菜品名中識别食材、做法等實體資訊的任務,屬于自然語言處理NLP中的序列标注問題,它的目标是對給定序列中的文本單元進行打标,以擷取文本單元的額外資訊。

近年來,基于transformer架構的語言模型不斷突破NLP任務榜單上的成績,對自然語言的了解達到了新的高度。RoBERTa[6](Robustly Optimized BERT pretraining Approach)是由FaceBook(現為META)AI研究院在BERT的基礎上增加額外訓練資料以及改進預訓練政策而獲得的更強有力的預訓練語言模型,在自然語言了解任務中的性能表現顯著強于BERT。

此次模組化選擇的方式就是利用RoBERTa大模型加上Finetune的方法,去做特定領域上的實體識别任務。模型架構圖如下:

EasyModeling算法架構介紹

模型在測試集上的表現(量化名額)如下:

EasyModeling算法架構介紹

模型在預測菜品中的食材和做法上,能将90%以上的食材、做法召回,預測的準确程度也在90%以上,滿足業務的要求與預期。

5. 總結與展望

  1. 不斷深入業務需求,調整EasyModeling架構;
  2. 持續學習新知識,為EasyModeling增加新功能,如圖計算,模型蒸餾,給模型決策加入先驗知識等;
  3. 繼續提高架構的利用效率,用以提升開發效率。

參考資料

[1]

資料挖掘: https://zh.wikipedia.org/wiki/資料挖掘

[2]

計算機視覺: https://zh.wikipedia.org/wiki/計算機視覺

[3]

自然語言處理: https://zh.wikipedia.org/wiki/自然語言處理

[4]

機器學習PAI: https://help.aliyun.com/product/30347.html

[5]

Neural Network Intelligence: https://github.com/microsoft/nni

[6]

RoBERTa: A Robustly Optimized BERT Pretraining Approach: https://arxiv.org/pdf/1907.11692.pdf

作者:勾越

來源:微信公衆号:SQB Blog

出處:https://mp.weixin.qq.com/s/sVDIep2r6OX8ZsBmVsVm0w

繼續閱讀