自然語言處理觀念整理-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服務
- 模型測試與監控:
- k-fold交叉驗證模型性能
- 用邊緣案例來測試模型, 情緒分析使用雙重否定句來測試
- 建立資料異常偵測子系統來追蹤特徵的關鍵統計數據, 可以追蹤特徵平均值, 中位數, 標準差, 分布圖
- 建立模型異常偵測子系統來追蹤, 例如模型回應率突然上升
- 了解model內部如何工作, NLP模型的可解釋性較低, 可藉由最新技術Lime, attention networks來觀察
- 建立儀錶板監控分類問題每天類別的分布, 與相關KPI指標
- 影子測試 : 正式環境同時運行舊model和新model蒐集資料再比較
- A/B test : 大部分資料給舊model, 一部分給新model再觀察, 再慢慢把新model比例調大
開發NLP解決方案時需要一系列的程式庫:
- web 服務建構: 例如flask, Django, fastapi
- container: 相容性問題使用容器如K8S與docker
- 其他問題如負載平衡, 延遲, 傳輸輛, 妥善率 AWS sageMaker與Azure Cognitive Services等雲端服務試圖降低這些工程任務的難度, 讓團隊可以專注在建模的工作上
AWS雲端服務原文分類服務架構
Ref:
- 自然語言處理最佳實務, O'Reilly
沒有留言:
張貼留言