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