PyText框架簡介

2021-09-05 10:28:19 字數 3281 閱讀 4778

自然語言處理(nlp)在現代深度學習生態中越來越常見。從流行的深度學習框架到雲端api的支援,例如google雲、azure、aws或bluemix,nlp是深度學習平台不可或缺的部分。儘管已經取得了令人難以置信的進步,但構建大規模的nlp應用依然還有極大的挑戰,在學習研究和生產部署之間還存在很多摩擦。作為當前市場上最大的會話環境之一,facebook已經面對構建大規模nlp應用的挑戰有一些年頭了,最近,facebook的工程團隊開源了第乙個版本的pytext,乙個基於pytorch的nlp框架,可以用來構建高效的nlp解決方案。

pytext的最終目標是簡化端對端的nlp工作流實現。為了實現這一目標,pytext需要解決當前nlp流程中的一些問題,其中最令人頭疼的就是nlp應用在實驗環境和生產環境的不匹配問題。

現代nlp解決方案通常包含非常重的實驗環節,在這個階段資料科學家們將借鑑研究檔案快速測試新的想法和模型,以便達成一定的效能指標。在實驗階段,資料科學家傾向於使用容易上手、介面簡單的框架,以便快速實現高階、動態的模型,例如pytorch或tensorflow eager。當需要部署到生產環境時,動態圖模型的固有侷限性就帶了新的挑戰,這一階段的深度學習技術需要使用靜態計算圖,並且需要為大規模計算進行優化。tensorflow、caffe2或mxnet都屬於這一型別的技術棧。結果是大型資料科學團隊不得不為實驗和生產部署使用不同的技術棧。

pytorch是最早解決了快速實驗與規模化部署之間衝突的深度學習框架之一。基於pytorch構建的pytext為nlp領域應用了這些解決實驗環境與生產部署之間衝突的優化原則。

從概念角度觸發,pytext被設計為實現以下四個基本目標:

盡可能簡單、快速的實現新模型

簡化將預構建模型應用於新資料的工作量

同時為研究者和工程師定義清晰的工作流,以便構建和評估模型,並以最小的代價上線模型

確保部署的模型在推理時具有高效能:低延遲、高吞吐量

pytext的處理容量最終打造的建模框架,可供研究者和工程師構建端到端的訓練或推理流水線。當前的pytext實現涵蓋了nlp工作流宣告週期中的基本環節,為快速實驗、原始資料處理、指標統計、訓練和模型推理提供了必要的介面。乙個高層級的pytext架構圖可以清晰地展示這些環節如何封裝了框架的原生元件:

如上圖所示,pytext的架構包含以下組成部分:

你可以看到,pytext利用onnx(open neural network exchange format)將模型從實驗環境的pytorch格式轉換為生產環境的caffe2執行模型。

pytext預置了眾多nlp任務元件,例如文字分類、單詞標註、語義分析和語言模型等,可以快速實現nlp工作流。類似的,pytext使用上下文模型介入語言理解領域,例如使用seqnn模型用於意圖標註任務,或者使用乙個上下文相關的意圖槽模型用於多個任務的聯合訓練。

從nlp工作流的角度來說,pytext可以快速將乙個思路從實驗階段轉換為生產階段。乙個pytext應用的典型工作流包含如下的步驟:

用pytext實現模型,確保測試集上的離線指標正確

將模型發布到打包的基於pytorch的推理服務,在實時樣本上執行小規模評估

自動匯出到caffe2網路,不過在有些情況下,例如當使用複雜的流程控制邏輯時,或者使用自定義資料結構式,pytorch 1.0還不支援

如果第3步不支援,那麼使用py-torch c++ api9重寫模型,並封裝為乙個caffe2操作符

將模型發布為生產就緒的caffe2**服務並啟動

上手pytext非常簡單,按標準python包的方法安裝框架:

$ pip install pytext-nlp
然後,我們就可以使用乙個任務配置來訓練nlp模型了:

(pytext) $ cat demo/configs/docnn.json}}}

$ pytext train < demo/configs/docnn.json

task是pytext應用中的用來定義模型的核心部件。每乙個任務都有乙個嵌入的配置,它定義了不同元件之間的關係,如下面**所示:

from word_tagging import modelinputconfig, targetconfig

class wordtaggingtask(task):

class config(task.config):

features: modelinputconfig = modelinputconfig()

targets: targetconfig = targetconfig()

data_handler: wordtaggingdatahandler.config = wordtaggingdatahandler.config()

model: wordtaggingmodel.config = wordtaggingmodel.config()

trainer: trainer.config = trainer.config()

optimizer: optimizerparams = optimizerparams()

scheduler: optional[schedulerparams] = schedulerparams()

metric_reporter: wordtaggingmetricreporter.config = wordtaggingmetricreporter.config()

exporter: optional[textmodelexporter.config] = textmodelexporter.config()

一旦模型訓練完畢,我們就可以對模型進行評估,也可以匯出為caffe2格式:

(pytext) $ pytext test < "$config"

(pytext) $ pytext export --output-path exported_model.c2 < "$config"

需要指出的是,pytext提供了可擴充套件的架構,可以定製、擴充套件其中任何乙個構建模組。

pytext代表了nlp開發的乙個重要里程碑,它是最早解決實驗與生產匹配問題的框架之一。基於facebook和pytorch社群的支援,pytext可能有機會稱為深度學習生態中最重要的nlp技術之一。

web框架簡介,django簡介

目錄django簡介 建立django專案的方式 django各個檔案的作用 django小白必會三板斧 c s架構 客戶端服務端 b s架構 瀏覽器伺服器 本質 b s架構其實也是c s架構 超文字傳輸協議 規定了客戶端和服務端訊息傳輸的格式 四大特性 1 基於tcp ip協議作用於應用層的協議 ...

JAVA SSH 框架簡介

在struts spring hibernate的組合框架模式中,三者各自的特點都是什麼?struts 的mvc設計模式可以使我們的邏輯變得很清晰。spring 的ioc和aop可以使我們的產品在最大限度上解藕。hibernate的當然就是實體物件的持久化了 典型的j2ee三層結構,分為表現層 中間...

測試框架簡介

1.linear 乙個automation test case只實現乙個manual test case,automation test case不能重用。測試資料也被hard code在automation test case裡.for example string username aaa st...