天天看點

在人工智能工程化裡,前端能做什麼?

作者 | 柏愚、北島
在人工智能工程化裡,前端能做什麼?

注:本文所說的人工智能特指機器學習,不涉及人工智能的其它形态。

随着人臉識别、搜尋推薦、自動駕駛等方方面面的人工智能應用逐漸向人們靠近,人工智能與人類社會生活的融合程度也在逐漸提升,伴随着技術的發展以及算力的增強,可預見将來人工智能能做的事情将會越來越多,我們的生活與人工智能會更加密不可分。

那麼在這場人工智能浪潮中,前端工程師們能在 AI 工程化方面做些什麼事情呢?下面我們将根據業界已有的一些服務、平台還有我們自己的經驗,來聊聊前端在這方面的工程經驗。在此之前,先簡單介紹一下機器學習是什麼,它大概有哪些流程。

什麼是機器學習?

在人工智能工程化裡,前端能做什麼?

--圖檔來自 pixabay,允許免費商用

機器學習的核心如果用一句話來概括,那就是根據已有的資料,采用特定的算法進行訓練,得到可用于預測的模型。

在這句話裡有三個關鍵詞:資料、算法、模型。圍繞這三個關鍵詞我們進行展開:

資料

資料是機器學習的根本,無論是訓練還是預測,都是圍繞資料在進行的,是以必須先收集或記錄大量的資料,然後才能做更多的事情。

有了可用的資料後,我們就要了解資料有哪些特征,特征需要被提前标注出來,然後算法工程師再從中發現或者創造出來一些可用的特征,圍繞這些特征進行機器學習模型的訓練。

以一個具體的例子來說,假設我們需要預測一單外賣訂單的送達時間,我們首先需要獲得以往記錄下來的大量資料,之後還需要資料中的這些特征資訊:下單時間、送餐地點、下單菜品種類和資料、餐廳的平均準備時間等,可以認為訓練就是在找這些特征與我們的目标(預計送達時間)之間的關系,一個訓練良好的模型,輸入一條新的資料,能很好地實作我們的預測目标,然後在使用者的手機裡顯示一個相對準确的預計送達時間。

算法

根據預測目的的不同,我們需要采用不同的算法來處理資料。預測目的從大類上來說,可以分為“監督學習”和“無監督學習”。

“監督學習”是指目标是已經注标好了,我們産生的模型擷取到輸入資料後,會按照給定的目标得出我們想要的結果,常見的監督學習解決的問題包括“分類”和“回歸”:

  • 分類的目标就是把結果分成幾類,并給出屬于每種類别的機率。典型的分類問題比如“二分類”,它的預測目的就是“是或否”,比如這一筆轉賬是否有風險,有風險的機率是多少。
  • 回歸的目标是根據輸入預測輸出結果的值,比如根據一個人的月消費種類和數量,推測出這個人的年收入是多少。

“無監督學習”是指目标并沒有提前标注好,模型最終的目的并不是要得到某個值。典型的無監督學習解決的問題有“聚類”問題:

  • 聚類的目的是把相似的資料聚在一起。比如推薦場景,聚類就可以把有相同興趣愛好的使用者劃分在一起,然後給他們推薦這個群體需要或喜歡的内容。還有比如上面連結中指向的可以自動寫作文的 GPT-3,也是屬于無監督學習。

算法就是為了完成上述不同的目的,需要選擇的對資料的處理方法,通過選擇合适的算法進行訓練來實作産出模型的目的。

模型

模型是機器學習訓練的最終産物,它實體上對應的是一個檔案,邏輯上對應的是一種模式,拿監督學習來舉例,假設把所有的輸入彙總看作是

x

,輸出看作

y

,監督學習可以認為是在盡量尋找出

y ≈ f(x)

這個式子,其中的函數

f

就是訓練得到的模型。我們最終就是利用這個模型,給它特定的輸入,得到我們需要預測的結果。

在實際的工程實踐中,這個模型檔案并不會被業務團隊直接使用,一般是将其部署在伺服器上,上層對應着一個 API 可以調用這個模型做預測,業務團隊最終通過調用 API 來使用模型的預測能力。

什麼是機器學習平台?

在人工智能工程化裡,前端能做什麼?

簡單介紹了機器學習是什麼,有什麼,接下來講一下本文的重點 — 機器學習平台。

首先介紹一下為什麼需要有機器學習平台,上面的機器學習簡介和概括隻提到了大體的流程,但一個機器學習模型從零到最終上線提供服務,中間還有很多工程和效率的問題需要解決,是以一般的公司都需要有一個或一些相關的平台來解決這方面的事情。

  • 資料倉庫

首先需要解決的是資料問題,資料會有不同的來源,有的是采集的,有的是業務記錄的;資料的類型也不盡相同,有的是關系型資料,有的是 CSV,有的是對象存儲;資料的規模也可能特别龐大,還需要專門的人員來維護大規模資料存取的問題。是以就需要有一個資料倉庫,來把所有資料整合到一起,資料的存儲和擷取都在這一個地方進行,進而提升資料的存儲和擷取的效率,同時解決資料之間互相隔絕的問題。

  • 标注平台

機器并不天生就了解它處理的資料,是以必須要提前賦予這些資料意義,比如要識别圖檔裡的小狗,必須要先在訓練資料集裡把小狗标注出來,這樣它才能了解什麼是小狗。這裡我們可以了解到,資料的标注是會影響到模型訓練的效果的,資料标注的品質和數量越高,模型訓練的效果也會越好,甚至标注本身還可能會成為突破模型關鍵名額的瓶頸,是以标注本身也具有足夠的重要性,會需要有一個專門的标注平台來标注資料。關于資料标注具體要做什麼,該怎麼做,可以檢視最下方"參考引用"裡的文章。

  • 特征平台

特征從字面上了解意思是“區分事物的關鍵”,事物的特征可以有非常多,比如有一籃水果,那麼水果的顔色、形狀、大小、重量等等都是不同的特征,如果想要統計籃子裡大于 50g 的水果的數量,就隻需要重量這一個特征就夠了,顔色、形狀、大小這些都可以不考慮。

實際的機器學習訓練中,我們也需要把資料中符合我們目的特征選出來,其它和目的不相符的特征舍棄掉,此外還需要把互相相關的特征排除掉,實際的事情也往往沒有像上面的選水果重量這麼簡單,因為很多特征不是直接可見的,我們需要對這些不顯性可見的特征進行相關性選擇、備援排除,是以需要做特征的選取。

特征選取通常從兩個方面入手:1. 特征是否發散,即這個特征是否獨特,是否所有資料在這個特征上都相同或者相似;2. 特征與目的的相關性,相關性越高越有用。在這個過程中需要做大量的計算,結合資料和結果的可視化,最終選出我們需要的特征。

對于算法工程師來說,找出良好的特征,通常是模型訓練過程中最難的一步,這一個環節費事費力,是以建立一個統一的特征庫是很有用的,算法工程師們可以做特征的加工和錄入以及更新,它可以解決特征的複用和共享的問題,并且随着特征庫的不斷更新的擴大,這筆特征的資産也會産生越來越多的價值。

  • 模型訓練平台

到這個階段,所有的“原材料”就準備好了,那接下來算法工程師需要在哪裡去利用這些原材料“煉出丹藥”呢?可以肯定不會是在自己的工作電腦上,這樣首先就會面臨計算資源不足還有資料安全等問題,這時候模型訓練平台就上場了,模型訓練平台會作為一個與其它各個平台打通的角色,把模型訓練前後的流程串起來,算法工程師可以在這裡讀取需要的資料,然後選擇需要的特征,調整模型訓練的參數,之後運作任務進行模型訓練。

一般情況下具體的過程是:通過資料倉庫提供的 SDK 讀取資料,通過平台的資料可視化能力對資料做進一步分析,利用一些可視化或者非可視化的手段加工特征,選擇完特征和配置完參數以後發起任務、訓練模型、評估模型效果。

模型訓練平台一般會提供一個 Web IDE 或者可互動式的程式設計環境給算法工程師,讓他能夠寫代碼完成工作,如果平台的标準化、自動化程度做得足夠高,還可能會提供一個拖拉拽式的圖形界面來幫助平台使用者串起整個模型訓練流程,通過算法的封裝和複用降低使用的門檻,用更加簡單的方式實作模型訓練。

  • 模型服務平台

模型訓練好、評估好以後,怎麼才能最終投入使用、被業務團隊調用呢?這就需要部署成一個可遠端調用的服務,一般會有一個專門的模型服務平台,在這裡上傳模型檔案,然後部署成一個可 HTTP 調用的 API,這個過程叫做模型服務的上線。模型上線之後,一般就會對這個模型服務進行監控,監控模型的調用次數、調用時間、調用結果等,確定模型服務的正常運作。随着外部環境的變化,模型的預測結果會發生漂移,此時就需要重新訓練模型,然後在模型服務平台上更新線上的模型,更疊服務的版本。随着業務的變化,一個模型服務可能最終也會停止使用,這時候就可以到模型服務平台進行模型服務的下線。除此之外,模型服務平台一般還會擁有資源管理能力、服務熔斷機制等能力來確定模型服務的穩定性和高并發。

前端能做什麼?

上面說了這麼多人工智能是什麼,機器學習平台是什麼,這一段進入我們的主題 — 前端工程師在這裡面能做什麼呢?基于我們的經驗,我們認為大概有這些工作:

  • 平台的産品化開發

上面提到的各種平台都會有 Portal 頁或管理頁,通常是大量的表單和清單,針對這些頁面的産品化開發,前端可以想辦法沉澱一些技術方案,例如 schema form,通用前端元件(例如 antd, pro-components)等,提升産品化頁面的開發效率。

此外這些平台的業務往往會比較複雜,而且随着業務的發展将持續演進,是以前端代碼的架構需要有足夠的提前考慮,要設計出具有足夠的可維護性的架構,并且能夠漸進演進。

  • 資料的埋點上報與分析

對于前端來說,有機會擷取到使用者在用戶端的一些行為資料,可以将一些資訊埋點并上報,為資料制造更多的來源,這裡可以開發一些通用的前端埋點工具。

此外我們還可以基于這些資料做産品的優化,通過可視化的方式了解産品的營運情況,了解子產品的使用情況等,輔助我們進行産品疊代的決策。

  • 資料可視化

機器學習流程裡充斥着資料,在這種到處是資料的場景下,資料分析和資料洞察能力的建設是前端工程師天然的輸出點,圍繞資料可視化,有許多工作可做可輸出,例如通過可視化的方式快速了解資料的分布、通過可視化的方式進行模型效果的評估等。

在各種各樣的可視化場景下,前端工程師需要根據業務需求,形成業務領域内可複用的可視化能力,同時還可以沉澱出底層的資料可視化解決方案。例如螞蟻在業務中沉澱處理的可視化解決方案 - antv。

  • 代碼編輯器

模型訓練的時候,需要編寫一些簡單的 SQL 以及 python 等語言的代碼,這些場景下前端工程師需要提供代碼編輯器,同時提供一些例如代碼高亮、自動補全等能力。

編輯器本身,目前的主流選擇一般是 Monaco Editor 或者 CodeMirror,前端工程師需要在此基礎上積累對應的技術經驗,例如使用 TextMate 的文法進行代碼高亮的定制。

  • 雲端開發環境

包括基于通用 Web IDE(theia, code-server)定制的機器學習專用 Web IDE,互動式程式設計環境(jupyter notebook)等。它們能通過雲端服務,提供良好的開發體驗,包括語言服務、自動補全、代碼調試等,還有 jupyter notebook 的分步執行、分步調試、文檔編寫等各種便捷高效的服務和工具。

除此之外,這些雲端開發環境往往不隻需要關注浏覽器端代碼的開發,還需要關注開發環境後端的開發,同時編寫 JS、Node、python 三端的代碼,整體的代碼量比較龐大,這需要了解或設計完整的雲端開發環境前、後端架構,在設計良好的架構下才能支撐業務正常需求和快速疊代。

  • 流程編排

機器學習的流程是相對固定和标準的,基于這種标準的流程做封裝複用,自動化能力就可以大大提升,平台上的模型開發人員隻需要通過可視化拖拉拽的方式進行簡單的流程編排,再進行一些基本的配置和編寫就可以完成模型的訓練,模型開發人員的體驗和效率都可以得到提升,并且也降低了開發的門檻。流程編排也是一個前端工程師可以發力的點,比如 antv 中的 x6 就是一個能解決這方面問題的圖編輯引擎。

  • 模型評估和模型可解釋性

模型的評估名額,通過可視化的方式可以做更好的展示,讓模型開發人員更直覺地了解模型的效果。此外還可以通過可視化的方式展示跟蹤模型訓練的過程,幫助模型開發人員更好地了解模型訓練的過程,追蹤訓練過程中的名額和資料随時間的變化,例如 TensorBoard。

  • 模型服務的監控

模型服務上線之後,需要持續監控模型服務的效果和狀态,這裡也需要可視化的能力對各種監控名額進行展示和互動。業界比較出名的解決方案有 Grafana 和 Kibana, 在螞蟻内部也有相應的解決方案。

  • 端智能

端智能是指把模型直接部署在用戶端機器,通常是手機上,然後在手機 App 上直接以 SDK 的形式調用模型進行預測。端智能相比于部署在服務端來說,具有實時性好、節約服務端資源、隐私性好等特點,并且随着移動端的算力不斷增強,模型壓縮技術的不斷成熟,端智能也正在打開新的局面和場景。

在端智能方向上,從資料到模型預測的鍊路比傳統的模式要更長,端側環境又更加複雜,是以這裡也需要前端工程師來解決算法和工程協同的問題,這就要求前端工程師不止有豐富的端上開發經驗,也需要有一定的算法功底,甚至對端上的機器學習架構(例如 TensorFlow.js)也有相當的研究,然後在端上做一些架構層的優化和應用層的落地。

以上就是我們根據業界現有的産品和服務,結合我們自己的經驗看到人工智能領域内前端工程師可以做的事情,這篇文章是我們《AI 前端》系列文章的第一篇,主要起到一個概括和開頭的作用,對于前端方面的工作做了些簡單的介紹,後面我們将會持續深入“AI 前端”這個話題,結合講述業界的産品、業務、技術,更細緻地講解前端工程師在人工智能領域所做的工作和創造的價值。

我們是螞蟻金服體驗技術部的資料智能團隊,主要做的是人工智能工程化平台方面的事情,歡迎通過 [email protected] 與我們交流。

參考引用

在人工智能工程化裡,前端能做什麼?

關注「Alibaba F2E」

把握阿裡巴巴前端新動向

繼續閱讀