模型部署到移动端_TensorFlow Lite 自然语言处理模型的最新功能,助力设备端 NLP 部署...
設備端機器學習框架 TensorFlow Lite 為手機、微控制器和 Edge TPU 等邊緣設備提供機器學習功能,已被廣泛用于許多應用領域。其中,”自然語言處理“ (Natural Language Processing) 是備受研究界和業界關注的關鍵領域之一。去年我們在 TensorFlow World 上演示了基于 TFLite 的設備端問答用例后,引起了社區的濃厚興趣,并且獲得將更多此類 NLP 模型用于設備端推理的期待與反饋。
知乎視頻?www.zhihu.com得益于這些反饋的啟發,今天我們很高興推出支持 TensorFlow Lite 上 NLP 任務端到端部署的新功能。在新功能的幫助下,越來越多的 NLP 模型能夠在手機上運行,用戶可以享受 NLP 模型的優勢,同時個人數據仍保留在設備端。本文中,我們將介紹一些新功能:
使用新的預訓練 NLP 模型
參考應用
參考應用是一組開源移動應用,封裝了預訓練的機器學習模型、推理代碼和可運行的演示。我們提供了一系列與 Android Studio 和 XCode 集成的 NLP 應用,因此開發者只需點擊一下就可以將其構建并部署在 Android 或 iOS 手機上。
使用以下 NLP 參考應用,移動開發者可以了解如何集成現有 NLP 模型(BERT、MobileBERT或ALBERT)、轉換原始文本數據以及連接模型的輸入和輸出以生成預測結果的端到端流程。
- 文本分類:模型根據給定的文本數據預測標簽
- 問答應用:給定文章和用戶問題,模型可以根據文章的內容回答問題
- 智能回復 (Smart reply):基于給定的上下文,模型可以預測并生成潛在的自動回復
上述參考應用中使用的預訓練模型可在 TensorFlow Hub 中找到。下表顯示了模型之間的延遲、大小和 F1 得分。
Pixel 4 CPU、4 線程基準測試,2020 年 3 月(模型超參數:序列長度 128,詞匯量 30K)針對設備端用例優化 NLP 模型
與服務器端模型相比,設備端模型有不同的約束。它們運行在內存較低、芯片速度較慢的設備上,因此需要針對模型大小和推理速度進行優化。以下是我們如何針對 NLP 任務優化模型的幾個示例。
量化 MobileBERT
MobileBERT 是在 GitHub 上開源的緊湊型 BERT 模型。它的大小約為基礎版 BERT (float32) 的四分之一,速度也比后者快 5.5 倍,并且能夠在 GLUE 和 SQuAD 數據集上實現相當的結果。
在初始版本后,我們進一步改進了模型 - 使用量化優化模型大小和性能,使其能夠利用 GPU/DSP 等加速器(如果有)。量化后的 MobileBERT 的大小為基礎 BERT 的十六分之一,速度加快 8 倍,卻幾乎沒有準確率損失。MLPerf for Mobile 社區正在利用量化 MobileBERT 模型進行移動推理基準測試,該模型還可以通過 TensorFlow.js 在 Chrome 中運行。
下表顯示了量化后的 MobileBERT 與基礎版 BERT 基礎模型 (416MB) 在相同設置下的性能比較。
使用投影方法的無嵌入向量 NLP 模型
語言識別是對給定文本的語言進行分類的一種問題類型。最近我們開源了兩個使用投影方法的模型,即 SGNN 和 PRADO。
我們使用 SGNN 展示了使用 Tensorflow Lite 處理 NLP 任務的簡單和高效。SGNN 將文本投影到固定長度的特征,然后是全連接層。利用注釋來告知 TensorFlow Lite 轉換器融合 TF.Text API,這樣我們可以獲得一個更高效的模型在 TensorFlow Lite 上推理。以前,該模型在基準上運行需要 1332.87 μs;而在融合后,在同一臺機器運行,需 64.06 μs,帶來了 20 倍加速。
我們還演示了名為 PRADO 的模型架構。PRADO 首先從單詞分詞序列中計算出可訓練的投影特征,然后應用卷積和注意力將特征映射到固定長度編碼。通過結合投影層、卷積和注意力編碼器機制,PRADO 實現了與 LSTM 相似的準確率,但模型大小卻是后者的百分之一。
這些模型背后的理念是使用投影來計算文本中的特征,這樣模型就不需要維護一個很大的嵌入向量表來將文本特征轉換為嵌入向量。通過這種方式,我們證明了該模型將比基于嵌入向量的模型要小得多,但是能夠保持相似的性能和推理延遲。
創建您自己的 NLP 模型
除了使用預訓練的模型外,TensorFlow Lite 還為您提供了諸如 Model Maker 之類的工具,讓您可以根據自己的數據自定義現有模型。
TensorFlow Lite Model Maker:面向機器學習初學者的遷移學習工具包
TensorFlow Lite Model Maker 是一款易于使用的遷移學習工具,可根據您的數據集調整最前沿 (SOTA) 的機器學習模型。借助 Model Maker,移動開發者在沒有任何機器學習專業知識的情況下也可以創建模型,通過遷移學習減少所需的訓練數據并縮短訓練時間。
在專注于視覺任務的初始版本之后,我們最近向 Model Maker 添加了兩個新的 NLP 任務。您可以按照文本分類和問答的 Colab 和指南進行操作。執行以下操作以安裝 Model Maker:
pip install tflite-model-maker開發者需要編寫幾行 Python 代碼來自定義模型,如下所示:
# Loads Data. train_data = TextClassifierDataLoader.from_csv(train_csv_file, mode_spec=spec) test_data = TextClassifierDataLoader.from_csv(test_csv_file, mode_spec=spec)# Customize the TensorFlow model. model = text_classifier.create(train_data, model_spec=spec)# Evaluate the model. loss, acc = model.evaluate(test_data)# Export as a TensorFlow Lite model. model.export(export_dir, quantization_config=config)轉換:NLP 模型轉換為 TensorFlow Lite 更輕松
由于 TensorFlow Lite 內置算子庫僅支持部分 TensorFlow 算子,因此在將 NLP 模型轉換為 TensorFlow Lite 時可能會遇到問題,原因可能是缺少算子或不受支持的數據類型(如 RaggedTensor 支持、哈希表支持和資源文件處理等)。以下是有關在這些情況下如何解決轉換問題的一些提示。
在 TensorFlow Lite 中運行 TensorFlow 算子和 TF.text 算子
我們增強了選擇 TensorFlow 算子以支持各種情況。按照“選擇 TF 算子”的說明操作,開發者可以在沒有內置 TensorFlow Lite 等效算子的情況下利用 TensorFlow 算子在 TensorFlow Lite 上運行模型。例如,在訓練 TensorFlow 模型時通常會使用 TF.Text 算子和 RaggedTensor,現在這些模型可以輕松轉換為 TensorFlow Lite 并采用必要的算子運行。
此外,我們還提供使用算子選擇性構建的解決方案,獲得用于移動部署的精簡二進制文件。它可以在最終的構建目標中選擇一小組使用過的算子,從而縮減部署中的二進制文件大小。
更高效、更友好的自定義算子
在 TensorFlow Lite 中,我們為 NLP 提供了一些新的適合移動設備的算子,例如 Ngram、SentencePieceTokenizer、WordPieceTokenizer 和 WhitespaceTokenizer。
以前,有一些限制會阻止 SentencePiece 模型轉換為 TensorFlow Lite。面向移動設備的新 SentencePieceTokenizer API 解決了這些難題,同時優化了實現,使其運行更快。
同樣,Ngram 和 WhitespaceTokenizer 現在不僅受支持了,而且能夠在設備上更高效地執行。
TensorFlow Lite 最近推出了與 MLIR 的算子融合。我們使用相同的機制將 TF.Text API 融合到自定義 TensorFlow Lite 算子中,顯著提高了推理效率。例如,WhitespaceTokenizer API 由多個算子組成,在 TensorFlow Lite 的原始計算圖中運行需要 0.9 ms。在將這些算子融合成一個單獨的算子后,只需 0.04 ms 即可完成計算,速度提高了 23 倍。事實證明,這種方式在上述 SGNN 模型中可以大幅改善推理延遲。
哈希表支持
哈希表對于許多 NLP 模型都很重要,因為我們通常需要通過將單詞轉換為 token ID 來在語言模型中利用數字計算,反之亦然。哈希表將很快在 TensorFlow Lite 中啟用。其支持方式是以 TensorFlow Lite 格式原生處理資源文件并將算子內核作為 TensorFlow Lite 內置算子。
部署:如何在設備端運行 NLP 模型
現在,使用 TensorFlow Lite 運行推理比以前要容易得多。僅需 5 行代碼您便可以使用預構建的推理 API 集成模型,或者使用實用工具構建自己的 Android/iOS 推理 API。
用 TensorFlow Lite Task Library 進行簡單的模型部署
TensorFlow Lite Task Library 是一個功能強大且易于使用的特定于任務的庫,它為 ML 推理提供了所需的開箱即用的預處理和后處理實用工具,使應用開發者能夠使用 TensorFlow Lite 輕松創建機器學習功能。Task Library 支持三種文本 API,分別對應于上述用例和模型:
- NLClassifier:將輸入文本分類為一組已知類別。
- BertNLClassifier:為 BERT 系列模型而優化的文本分類。
- BertQuestionAnswerer:根據給定段落的內容,使用 BERT 系列模型回答問題。
Task Library 可在 Android 和 iOS 上跨平臺運行。以下示例顯示了使用 Java/Swift 代碼的 BertQA 模型推理:
// Initialization BertQuestionAnswerer answerer = BertQuestionAnswerer.createFromFile(androidContext, modelFile); // Answer a question List answers = answerer.answer(context, question); // Initialization let mobileBertAnswerer = TFLBertQuestionAnswerer.mobilebertQuestionAnswerer(modelPath: modelPath) // Answer a question let answers = mobileBertAnswerer.answer(context: context, question: question)自定義推理 API
如果現有任務庫不支持您的用例,您還可以利用 Task API Infrastructure,使用同一倉庫中的通用 NLP 實用工具(如 Wordpiece 和 Sentencepiece 分詞器)構建自己的 C++/Android/iOS 推理 API。
結論
在本文中,我們介紹了 TensorFlow Lite 中對 NLP 任務的新支持。利用 TensorFlow Lite 的最新更新,開發者可以輕松地在設備端創建、轉換和部署 NLP 模型。我們將繼續提供更多實用的工具,并加快從研究到生產的設備端 NLP 模型的開發流程。我們希望聽到您對新的 NLP 工具與實用工具的反饋和建議。請向 tflite@tensorflow.org 發送電子郵件或在 GitHub 為 TensorFlow Lite 提 issue。
致謝
感謝 Khanh LeViet、Arun Venkatesan、Max Gubin、Robby Neale、Terry Huang、Peter Young、Gaurav Nemade、Prabhu Kaliamoorthi、Ping Yu、Renjie Liu、Lu Wang、Xunkai Zhang、Yuqi Li、Sijia Ma、Thai Nguyen、Xingying Song、Chung-Ching Chang、Shuangfeng Li 對本文的貢獻
谷歌開發者官方現已開通知乎專欄:TensorFlow 學習資源站,一站式收錄來自官方的 TensorFlow 相關實用技術資源,歡迎關注,及時收到更新提醒!
想獲取更多產品發布新消息?歡迎關注 TensorFlow 官方微信公眾號(TensorFlow_official)!總結
以上是生活随笔為你收集整理的模型部署到移动端_TensorFlow Lite 自然语言处理模型的最新功能,助力设备端 NLP 部署...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 昆仑万维「天工」大模型正式向全社会开放
- 下一篇: 11.11 今日攻略:无门槛红包新一轮开