建立自訂文字分類模型,並透過該模型更新應用程式

1. 事前準備

在本程式碼研究室中,您將瞭解如何更新從原始部落格垃圾內容留言資料集建構的文字分類模型,並使用自己的留言加以強化,以便取得適用於您資料的模型。

必要條件

這個程式碼研究室是「開始使用行動裝置文字分類」學習路徑的一部分。本課程中的程式碼研究室是循序進行。您要使用的應用程式和模型應已在第一個課程中建構完成。如果尚未完成先前的活動,請立即停止並完成:

  • 建構基本訊息樣式應用程式
  • 建構留言垃圾內容機器學習模型
  • 更新應用程式,使用垃圾內容篩選機器學習模型

課程內容

  • 如何更新在「開始使用行動裝置文字分類」路徑中建構的文字分類模型
  • 如何自訂模型,在應用程式中封鎖最常見的垃圾內容

軟硬體需求

  • 您在先前活動中觀察及建構的訊息應用程式和垃圾內容篩選模型。

2. 加強文字分類

如要取得這項功能的程式碼,請複製這個存放區,然後從 TextClassificationStep2 載入應用程式。您可以在 TextClassificationOnMobile->Android 路徑中找到這項資訊。

您也可以使用TextClassificationStep3取得完成的程式碼。

如果您開啟建構的訊息應用程式並嘗試傳送這則訊息,會發現垃圾內容分數非常低:

f111e21903d6fd1f.png

這類錯別字是避開垃圾內容篩選器的常見手法。雖然訊息本身無害,但垃圾郵件傳送者通常會在使用者 ID 中加入連結 (而不是訊息本身,因為在訊息中加入連結可能會觸發篩選器)。

在本實驗室中,您將瞭解如何使用新資料更新模型。完成後,使用相同句子執行會得到以下結果,其中這則訊息會被識別為垃圾內容!

c96613a0a4d1fef0.png

3. 編輯 CSV 檔案

為訓練原始模型,我們建立了一個 CSV 檔案 (lmblog_comments.csv) 資料集,其中包含近千則留言,並標示為垃圾郵件或非垃圾郵件。(如要檢查 CSV 檔案,請在文字編輯器中開啟)。

CSV 檔案的第一列會說明各欄,在此標示為 commenttextspam

後續每列都遵循這個格式:

64c0128548e1d082.png

右側的標籤會針對垃圾郵件顯示 true,非垃圾郵件則顯示 false。在這種情況下,第 3 行會視為垃圾內容。

如要新增自己的留言,舉例來說,如果許多人在你的網站上發布有關線上交易的垃圾訊息,你只需要在網站底部新增垃圾留言範例。例如:

online trading can be highly highly effective,true
online trading can be highly effective,true
online trading now,true
online trading here,true
online trading for the win,true

完成後,請以新名稱儲存檔案 (例如 lmblog_comments.csv),即可用來訓練新模型。

在本程式碼研究室的其餘部分,您將使用提供的範例,並在 Google Cloud Storage 上編輯及代管,以取得線上交易更新。如要使用自己的資料集,可以變更程式碼中的網址!

4. 使用新資料重新訓練模型

如要重新訓練模型,只要重複使用先前的程式碼 (SpamCommentsModelMaker.ipynb),但指向名為 lmblog_comments_extras.csv 的新 CSV 資料集即可。如要取得更新內容的完整記事本,請前往 SpamCommentsUpdateModelMaker.ipynb.

如果您可以存取 Google Colab,可以直接從這裡啟動,否則請從存放區取得程式碼,並在您選擇的筆記本環境中執行。

更新後的程式碼如下:

training_data = tf.keras.utils.get_file(fname='comments-spam-extras.csv',   
          origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/
                  lmblog_comments_extras.csv', 
          extract=False)

訓練時,您應該會發現模型仍會訓練至高準確度:

8886033d1f8161c.png

逐步完成筆記本,下載模型詞彙標籤檔案。在下一個步驟中,您將在 Android 中整合這些項目。

5. 更新 Android 應用程式

  1. 在 Android Studio 中開啟應用程式,並確認專案瀏覽器頂端已選取「Android」Android
  2. 找出包含舊版模型檔案標籤、模型和詞彙的 assets 檔案。

91116524e9016ed4.png

  1. 在資產資料夾上按一下滑鼠右鍵。
  2. 在選單中,選取使用作業系統的檔案管理員開啟資料夾的選項。(在 Mac 上為「在 Finder 中顯示」,如圖所示。在 Windows 上會顯示「在檔案總管中顯示」,在 Linux 上則會顯示「在檔案中開啟」或類似選項。

25f63f9629657e85.png

  1. 作業系統的檔案管理工具隨即會開啟目錄,內含模型、詞彙和標籤。將上一個步驟建立的項目複製到這些項目上。

您不需要變更應用程式中的程式碼。執行並測試應用程式,您會看到如上所示的結果,模型已改善,可偵測「onllline trading」文字情境。

存放區中提供完成的程式碼版本,名稱為 TextClassificationStep3。

6. 更新 iOS 版應用程式

如要取得這項功能的程式碼,請複製這個存放區,然後從 TextClassificationStep2 載入應用程式。您可以在 TextClassificationOnMobile->Android 路徑中找到這項資訊。

您也可以使用TextClassificationStep3取得完成的程式碼。

如果您已完成上一個程式碼研究室,應該會有適用於基礎模型的 TextClassificationStep2 iOS 版本。如要從現有版本開始,只要從存放區中取得該版本即可。這會與第一個以留言垃圾內容資料訓練的模型搭配運作,您可能會看到類似以下的結果:

553b845565b5b822.png

更新應用程式以使用新模型非常簡單。最簡單的方法是前往檔案總管,取得 model.tflitevocablabels.txt 的新版本,然後複製到專案目錄。

完成後,應用程式就會使用新模型,您可以試試看。以下是使用新模型生成的相同句子:

9031ec260b1857a3.png

7. 恭喜

大功告成!您只要使用新資料重新訓練模型,並將模型新增至 Android 和 iOS 應用程式,就能更新應用程式功能,不必編寫任何新程式碼!

後續步驟

這個模型只是玩具,只用 1000 個資料項目訓練而成。

探索自然語言處理時,您可能需要處理較大的資料集。您也可以設定持續訓練管道,這樣一來,當有新資料傳入並標示為垃圾內容時,系統就能在後端自動重新訓練模型,然後使用 Firebase 模型代管服務部署該模型。

使用者可以順暢地取得更新的模型,您不必複製並貼上模型做為資產、重新編譯及重新發布。舉例來說,您也可以使用 Firebase 遠端設定管理傳送垃圾內容的門檻值,而不是目前的 0.8。

有許多可能性,我們會在日後的程式碼研究室中探索這些內容!