PyText基于PyTorch進行語言識別


PyText基于PyTorch進行語言識別

文章插圖
盡管深度神經網絡風靡一時,但主要框架的復雜性已經成為新機器學習用戶的障礙 。提出了幾種改進和簡化高級應用編程接口來構造神經網絡模型的建議 , 這些建議從遠處看都很相似 , 但仔細研究就會發現有所不同 。
Keras是領先的高級神經網絡API之一 。它用Python編寫,支持多個后端神經網絡計算引擎 。
鑒于TensorFlow項目已經采用Keras作為TensorFlow2.0的高級API,Keras似乎是贏家,如果不一定是贏家的話 。在本文中,我們將討論Keras的原理和實現,重點理解為什么它是低級深度學習API的改進 。
即使在TensorFlow中,官方的TensorFlow入門教程也使用了TensorFlow中嵌入的高級KerasAPITF. Keras 。相比之下,tensorFlowCoreAPI需要使用TensorFlow來計算圖形、TensorFlow、操作和會話,其中一些在您剛開始使用TensorFlow時很難理解 。使用低級別的TensorFlowCoreAPI有一些優勢 , 主要是在調試期間,但幸運的是 , 您可以根據需要混合使用高級和低級別的TensorFlowAPI 。
喀拉斯原理
Keras被創建為用戶友好、模塊化、易于擴展,并與Python一起使用 。該API是“為人類設計的,而不是為機器設計的”,“遵循減少認知負荷的最佳實踐” 。
【PyText基于PyTorch進行語言識別】神經層、代價函數、優化器、初始化方案、激活函數和正則化方案都是獨立的模塊 , 可以組合在一起創建新的模型 。新模塊可以作為新的類和函數輕松添加 。模型是用Python代碼定義的,而不是單獨的模型配置文件 。
為什么是Keras?
使用Keras最大的原因是它的指導原則,主要是關于用戶友好的原則 。Keras除了易于學習和簡化模型構建之外,還具有被廣泛采用、支持廣泛的生產部署選項、集成至少5個后端引擎(TensorFlow、CNTK、antao、MXNet和PlaidML)以及強大支持多個GPU和分布式訓練等優勢 。此外,Keras還獲得了谷歌、微軟、亞馬遜、蘋果、英偉達、優步等公司的支持 。
Keras本身不執行自己的低級運算,如張量積和卷積;這取決于后端引擎 。雖然Keras支持多個后端引擎,但它的主要(也是默認)后端是TensorFlow,它的主要支持者是Google 。KerasAPI封裝在TensorFlow中,如前所述,它將成為TensorFlow2.0的主要TensorFlowAPI 。
要更改后端 , 只需編輯$HOME/ 。keras/文件 , 并指定另一個后端名稱,如anano或CNTK ?;蛘?,您可以通過在shell或Python代碼中使用OS. environ[' KERAS_后端']屬性定義環境變量來覆蓋配置的后端 。
Keras模型
該模型是Keras的核心數據結構 。Keras中有兩種主要類型的模型:順序模型,以及模型與功能API一起使用的類 。
Keras序列模型
順序模型是層的線性堆疊,可以非常簡單地描述層 。以下是Keras文檔中的一個示例,它用于()來定義順序模型中的兩個密集層:
臉書已經開放了PyText項目 , 這是一個用于自然語言處理(NLP)的機器學習庫,旨在使實驗項目與生產系統更容易結合 。
PyText是用臉書現有的機器學習PyTorch庫構建的,公司內部使用,旨在解決如何使用神經網絡(如NLP)進行機器學習 。他們在一篇文章中說,這些庫通常是“為實驗優化的框架和為生產優化的框架之間的權衡” 。
臉書的工程師寫道,為實驗構建的框架允許快速原型制作 , 但會遭受“生產延遲和內存使用增加”的困擾 。另一方面,為生產而構建的框架在負載下工作得更好,但更難快速開發 。
PyText的主要區別在于它的工作流程 , 臉書聲稱它可以針對實驗或生產用途進行優化 ??蚣艿慕M件可以拼接在一起以創建一個完整的NLP管道,或者部分可以分解并在其他上下文中重用 。
新的訓練模型可以分布在多個節點上,可以同時訓練多個模型 。PyText也可以使用很多現有的模型進行文本分類,在這些情況下不需要訓練 。
PyText還通過上下文模型提高理解能力,這是一種豐富模型對先前輸入文本理解的方法 。例如,聊天機器人可以在討論中重用早期消息中的信息來塑造他們的答案 。
PY中的一個函數展示了如何找到一個Python驅動的機器學習系統 。
避免語言可能出現的性能問題的方法 。PyText模型可以以優化的ONNX格式導出,以便使用Caffe2進行快速推理 。這樣,推理過程不受Python運行時的限制,但Python仍然用于組裝管道和編排模型訓練 。
PyTorch本身最近獲得了正式的1.0版本,其自身的功能部分旨在加速訓練和推理 , 而不受Python的限制 。其中之一,Torch Script,及時編譯Python代碼以加速其執行,但它只能用于語言的一個子集 。
PyText的近期計劃包括“支持多語言建模和其他建模功能,使模型更易于調試,并為分布式培訓添加進一步優化”,Facebook的工程師說 。
上面代碼中的注釋值得一讀 。還有一點值得注意的是,與低級TensorFlow API相比 , 實際代碼中有多少 。每個層定義需要一行代碼 , 編譯(學習過程定義)需要一行代碼,擬合(訓練),評估(計算損失和度量),以及預測訓練模型的輸出每行需要一行代碼 。
Keras功能API
Keras Sequential模型很簡單,但在模型拓撲中受到限制 。所述Keras功能API是用于與共享層創建復雜的模型,如多輸入/多輸出模式,有向非循環圖(DAG) , 和模型是有用的 。
功能API使用與Sequential模型相同的層,但在將它們組合在一起時提供了更大的靈活性 。在功能API中 , 首先定義圖層,然后創建模型,編譯它 , 然后擬合(訓練)它 。評估和預測與Sequential模型基本相同,因此在下面的示例代碼中已省略 。
在前面的例子中 , 我們只使用了Dense圖層 。Keras有多種預定義的圖層類型 , 還支持編寫自己的圖層 。
核心層包括Dense(點積加偏差),Activation(傳遞函數或神經元形狀),Dropout(在每次訓練更新時隨機將輸入單位的一部分設置為0以避免過度擬合),Lambda(將任意表達式包裝為Layer對象),以及其他幾個 。卷積層(使用濾波器創建要素圖)從1D到3D運行,包括最常見的變體 , 例如每個維度的裁剪和轉置卷積層 。2D卷積受到視覺皮層功能的啟發,通常用于圖像識別 。
池(縮減)層從1D到3D運行并包括最常見的變體 , 例如最大和平均池 。局部連接的層就像卷積層一樣 , 除了權重是非共享的 。循環層包括簡單(完全連接的重復) , 門控 , LSTM等; 這些對于語言處理以及其他應用程序非常有用 。噪聲層有助于避免過度擬合 。
Keras通過ets課程提供了七個常見的深度學習樣本數據集 。這包括cifar10和cifar100小彩色圖像,IMDB電影評論,路透社新聞專題,MNIST手寫數字 , MNIST時尚圖片和波士頓房價 。
Keras還提供十種著名的模型,稱為Keras應用程序,預先針對ImageNet:Xception,VGG16 , VGG19,ResNet50,InceptionV3,InceptionResNetV2,MobileNet,DenseNet,NASNet , MobileNetV2TK 。您可以使用它們來預測圖像的分類,從中提取特征,以及在不同的類集上微調模型 。
順便說一句,微調現有模型是加速培訓的好方法 。例如,您可以根據需要添加圖層,凍結基礎圖層以訓練新圖層,然后解凍一些基礎圖層以微調培訓 。您可以通過設置凍結圖層able = False 。
該Keras實例庫包含超過40個樣本模型 。它們涵蓋了視覺模型,文本和序列以及生成模型 。