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