Facebook開源NLP建模框架PyText,從論文到產品部署只需數天
選自code.fb
作者:AHMED ALY HEGAZY、CHRISTOPHER DEWAN
機器之心編譯
參與:淑婷、張倩
Facebook AI Research(FAIR)今天宣布推出 PyText 的開源版本,它是這家公司正在使用的主要自然語言處理(NLP)建模框架,目前每天在為 Facebook 及其應用程序系列的用戶提供超過 10 億次 AI 任務處理。
Yann LeCun 對此介紹道,「PyText 是一個工業級的開源 NLP 工具包,可用於在 PyTorch 中開發 NLP 模型,並通過 ONNX 部署。其預訓練模型包括文本分類、序列標註等。」
項目地址:https://github.com/facebookresearch/pytext
為了降低人們創建、部署自然語言處理系統的難度,Facebook 開源了一個建模框架——PyText,它模糊了實驗與大規模部署之間的界限。這一框架基於 PyTorch,可以為 NLP 的發展帶來以下好處:
提供簡化的工作流程,加速實驗。
提供一大批預構建的模型架構和用於文本處理和辭彙管理的工具,以促進大規模部署。
提供利用 PyTorch 生態系統的能力,包括由 NLP 社區中的研究人員、工程師預構建的模型和工具。
AI 研究人員和工程師現在可以利用 PyText 加快實驗進度,部署用於文檔分類、序列標註、語義分析、多任務建模及其他任務的系統。利用該框架,Facebook 在幾天內就實現了 NLP 模型從理念到完整實施的整個過程,還部署了依賴多任務學習的複雜模型。現在,PyText 被 Facebook 用於超過十億次的日常預測工作,這表明該框架可以以產品級的規模運行,能夠滿足嚴格的延遲要求。
在優化框架時,神經網路工程師一直都在實驗和生產之間進行權衡,NLP 系統的工程師更是如此。NLP 系統需要創建、訓練、測試數十個模型,其結構具有動態特性。以研究為導向的框架可以提供一個簡單的 eager-execution 介面,加快創建動態高級模型的進程,但如果將它們部署到生產,就會面臨延遲多、內存佔用多的困境。針對生產進行優化的框架可以通過將模型展示為靜態圖來加快部署,但這種方法增加了創建文本序列動態表徵的難度。PyTorch 1.0 是一個統一的框架,縮短了從研究到生產的路徑。而基於 PyTorch 的 PyText 則著眼於滿足 NLP 建模的特定需求。
此次一起開源的還有一些用於大規模訓練和部署 PyText 模型的預訓練模型及教程。
走向更好的 NLP
AI 研究人員及工程師擁有許多可以理解語言的系統應用,而且這些應用還在增加。Facebook 利用 NLP 向用戶提供相關性更強的內容,為他們提供更加強大的可用功能、標記違規動態、翻譯等其它服務。會話 AI 的前沿研究進展迅速,PyText 可以進一步加快這一進程,同時提高產品質量。PyText 目前已經部署到 Facebook 的視頻通話設備 Portal 以及 Messenger 的 M suggestions 功能中。此外,Facebook 還在探索 PyText 在會話 AI 領域的其它應用。
藉助 PyText,Portal 可以支持「Hey Portal」語音命令中的組合和嵌套調用查詢。這一功能使得用戶可以使用類似「給我爸打電話」這樣的語音命令。這種命令要求系統理解呼叫者與被呼叫者之間的關係,利用了 Facebook 論文《Semantic Parsing for Task Oriented Dialog using Hierarchical Representations》中提到的語義分析技術。
Facebook 已經利用 PyText 快速迭代 Portal NLP 模型的持續改進,如組裝、條件隨機域及用在所有領域的混合模型。這種做法將 Facebook 核心領域模型的準確率提高了 5 到 10 個百分點。他們還藉助 PyText 對分散式訓練的支持將 Portal 的訓練時間縮短到原來的 1/3 到 1/5。
利用 PyText 實現的快速迭代還提高了 Facebook NLP 模型的效率和可擴展性。在 Portal、Messenger 及其它許多用例中,模型需要實時運行,以提供快速響應。此外,Facebook 還需要大規模運行的高效 NLP 系統。PyText 降低了 Facebook 工程師在系統中部署實時高級 NLP 技術的難度,這些系統有數十億使用多種不同語言的用戶。
PyText 以 Facebook 的其它 NLP 系統為基礎,並對其它系統進行補充。例如,它可以和 Facebook 的 fastText library 一起使用。研究人員和工程師可以在 fastText 中訓練詞嵌入,然後將其應用到 PyText 中。
PyText 還針對 DeepText 進行了一些重要改進,如後者無法實施動態圖。由於模型中的有條件執行和自定義數據結構,PyText 中的一些語義解析和多任務學習模型無法利用 DeepText 構建。PyText 還加速了訓練,因為它可以利用 GPU 及更易實施的分散式訓練。Facebook 打算將 PyText 作為未來主要的 NLP 平台。
靈活的模塊化設計
PyText 是建立在 PyTorch 上的,它可以連接 ONNX 和 Caffe2。藉助 PyText,AI 研究人員和工程師可以把 PyTorch 模型轉化為 ONNX,然後將其導出為 Caffe2,用於大規模生產部署。
它為模型組件提供了一個靈活的模塊化工作流程,具有可配置的層和可擴展介面。PyText 可作為端到端平台,開發者可以立即應用它來創建整個 NLP 流程。而其模塊化結構也允許工程師將單個組件整合到現有系統中。
每個組件所扮演的角色以及與其它組件的交互視任務而定。例如,數據處理程序組件和訓練器、損失、優化器組件一起訓練模型。但數據處理程序也會和預測器、模型交互來執行推斷(在真實環境中運行訓練好的模型)。這種模塊化方法增強了 PyText 的多功能性,該平台幾乎可被用於從研發到生產過程中的任何環節,從零開始構建整個 NLP 系統,或者對現有系統進行修改。
PyText 還具備其它改進 NLP 工作流程的功能。該框架支持分散式訓練,這可以極大加速需要多次運行的 NLP 實驗。它還支持多任務學習,以同時訓練多個模型。對訓練的其它優化包括:
便攜性。PyText 模型是建立在 PyTorch 之上的,可以輕鬆在 AI 社區的不同組織之間共享。
預構建模型。PyText 具有專註於各種常見 NLP 任務(如文本分類、語義解析和語言建模)的多種模型,因此可以輕鬆地在新數據上使用預構建模型,僅需極少的額外工作。
上下文模型。為了提高對各種 NLP 任務中的會話理解,我們可以使用用 PyText 利用上下文信息,例如會話線程的早期部分。Facebook 在 PyText 中構建了兩種上下文模型:用於意圖標註任務的 SeqNN 模型和用於兩個任務聯合訓練的 Contextual Intent Slot 模型。在 Facebook 的測試中,引入上下文信息使 M suggestions 在多個數據集上產生了顯著的性能提升。
至於生產中的優化推斷,PyText 使用 PyTorch 1.0,通過優化的 Caffe2 執行引擎導出模型進行推斷。Native PyTorch 模型需要 Python 運行時,而由於 Python 的 Global Interpreter Lock 的多線程限制,這種運行時無法充分擴展。導出至 Caffe2 則提供了高效的多線程 C++後端,以高吞吐量地高效服務巨大流量。PyText 的其它功能也使將模型移動並部署到生產中變得更加容易,如:
適用於研究和生產的 NLP 工作的通用資源,如用於訓練和推斷的簡單 API,還有用於訓練和推斷的文本預處理。
辭彙管理,因此 PyText 可以在模型導出至 Caffe2 以後將辭彙添加到模型中。
增加了對字元串張量的支持,以便在訓練和推斷中有效處理文本。
從研究到生產變得更容易
PyText 的誕生最初是為了創建一個新的 NLP 模型,它為降低創建新模型、編輯現有模型的難度提供了必要的抽象概念。訓練和評估這些模型非常簡單,然後執行參數掃描來確定最佳模型。PyText 旨在讓開發者專註於其想要改變的特定組件或模型,並在系統的其餘部分使用「開箱即用」組件。
由此產生了一個可以在 Python 環境下運行的 PyTorch 模型。藉助 PyText 的 Python 服務,AI 開發者可以通過部署其模型和接收一小部分使用該產品的用戶的流量來快速獲得在線指標。
一旦工程師對模型的性能感到滿意,那他/她就可以利用 PyText 中的 exporter 模塊,通過 ONNX 把模型導出至 Caffe2。然後 Caffe2 可以在 C++ 處理產品流量的推斷服務中評估和部署。
這個代碼示例展示了如何使用 ONNX 將模型導出至 Caffe2,預先添加一個運算符(如 string2id),然後執行任何必要的後處理。
PyText 和 NLP 工具的未來
在 Facebook 內部的部署證明,PyText 可以幫助工程師加快 NLP 建模方法的迭代速度,然後快速將其擴展到生產中。NLP 領域規模龐大,發展迅速,所以 Facebook 將繼續提升 PyText 測試新最佳模型的能力,並高效、大規模部署這些模型。
由於在移動設備上部署複雜 NLP 模型仍是一大挑戰,Facebook 正在努力為設備內置(on-device)模型構建端到端的工作流程。其近期的計劃包括支持多語言模型和其它建模能力,使模型更容易調試,進一步優化分散式訓練。
更多關於 PyText 的細節請參考:https://research.fb.com/publications/pytext-a-seamless-path-from-nlp-research-to-production/
※開源一年多的模型交換格式ONNX,已經一統框架江湖了?
※CVPR論文復現爭議後續:華人一作苦戰兩月給出有態度的分析結果
TAG:機器之心 |