《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > Facebook開源NLP建模框架PyText,,從論文到產(chǎn)品部署只需數(shù)天

Facebook開源NLP建??蚣躊yText,從論文到產(chǎn)品部署只需數(shù)天

2018-12-17
關(guān)鍵詞: FAIR 自然語言處理 Facebook

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

微信圖片_20181217190010.jpg


為了降低人們創(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)變得更容易

微信圖片_20181217190038.jpg


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)品的用戶的流量來快速獲得在線指標,。

微信圖片_20181217190104.jpg


一旦工程師對模型的性能感到滿意,那他/她就可以利用 PyText 中的 exporter 模塊,,通過 ONNX 把模型導(dǎo)出至 Caffe2,。然后 Caffe2 可以在 C++ 處理產(chǎn)品流量的推斷服務(wù)中評估和部署。

微信圖片_20181217190126.jpg

這個代碼示例展示了如何使用 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/


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。