2021年2月16日 星期二

[NLP] 自然語言處理觀念整理-8 (工程面)

  

自然語言處理觀念整理-8

NLP專案工程面的觀念

當我們遇到NLP新問題時應該先思考的問題有:
  • 需要哪種資料來訓練?要重哪裡取得這些資料?
  • 有多少資料可以用?不夠的話要如何使用資料擴張技術?
  • 如何標注資料?
  • 正確的量化指標
  • 如何部屬系統?雲端API or 單體系統 or 在邊緣設備上嵌入模組?
  • 如何提供預測結果? 串流還是批次?
  • 需要更新模型嗎?多久更新一次?
  • 需要監控模型的性能和提醒機制嗎?
  • 計算成本
  • 正確的問題與正確的期望

微軟的敏捷迭代式資料科學處理流程, 目的是改善企業資料科學團隊之間的協作效率, 它不只針對專案, 還從商業和團隊管理的角度定義專案的生命週期, 包含了:
  • 商業理解
  • 資料採集與理解
  • 建模
  • 部屬
  • 顧客驗收


以下是資料科學專案的範例專案執行流程

建構和維護NLP系統:
  • 尋找更好的特徵, 可以參考此篇
  • 迭代既有模型 : model會隨時間而失去效用, 必須更新, 新就模型之間需要建立評估的標準, 確保新模型可以取代舊模型, 新舊模型之間可以使用ABtest, 並且以商業的KPI來進行評估, 採用新模型可子先讓一小部分user使用並監控效能, 與監控各項指標
  • 程式碼與模型再現:model的版本管理也想當重要, 在保存模型時應將參數個別保存, 不要寫死在程式碼中 , Data Version Control是一項專為模型管理的版本控制器, 比git來的好
  • 技術債最小化: 永遠重簡單模型先開始, 不要隨意導入最先進模型, 先進模型往往需要更大的運算資源
  • ML程序自動化: autoML技術, 除非不知道改採用哪種傳統方法來改變效能, 否則不要隨意使用, auto-sklearn是一個容易使用的套件, google Cloud AutoML提供原文分類, 個體提取, 情緒分析, 機器翻譯等NLP autoML服務 
  • 模型測試與監控: 
  1. k-fold交叉驗證模型性能
  2. 用邊緣案例來測試模型, 情緒分析使用雙重否定句來測試
  3. 建立資料異常偵測子系統來追蹤特徵的關鍵統計數據, 可以追蹤特徵平均值, 中位數, 標準差, 分布圖
  4. 建立模型異常偵測子系統來追蹤, 例如模型回應率突然上升
  5. 了解model內部如何工作, NLP模型的可解釋性較低, 可藉由最新技術Lime, attention networks來觀察
  6. 建立儀錶板監控分類問題每天類別的分布,  與相關KPI指標
  7. 影子測試 : 正式環境同時運行舊model和新model蒐集資料再比較
  8. A/B test : 大部分資料給舊model, 一部分給新model再觀察, 再慢慢把新model比例調大




開發NLP解決方案時需要一系列的程式庫:
  • web 服務建構: 例如flask, Django, fastapi
  • container: 相容性問題使用容器如K8S與docker
  • 其他問題如負載平衡, 延遲, 傳輸輛, 妥善率 AWS sageMaker與Azure Cognitive Services等雲端服務試圖降低這些工程任務的難度, 讓團隊可以專注在建模的工作上
AWS雲端服務原文分類服務架構



AI是支援人類擴充智慧而非取代人力, 模型並非100%正確, 即使是最先進的AI系統也被需人類監督



Ref:
  • 自然語言處理最佳實務, O'Reilly

沒有留言:

張貼留言