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

1. 事前準備

在本程式碼研究室中,您將瞭解如何更新文字分類模型,這個模型是以原始網誌垃圾留言資料集建立而成,但使用自有留言強化,讓模型能夠與資料搭配運作。

必要條件

這個程式碼研究室是「開始使用行動文字分類」課程的一部分。本課程中的程式碼研究室會依序進行。您用於處理的應用程式和模型應該是事先建構完成,您在第一個課程中也照著跟進。如果您尚未完成之前的活動,請立即停止參與:

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

課程內容

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

軟硬體需求

  • 您在先前的活動中觀察到並建立的訊息應用程式和垃圾郵件篩選模型。

2. 強化文字分類功能

您可以複製這個存放區,並從 TextClassificationStep2 載入應用程式,以取得這個程式碼的程式碼。您可以在 TextClassificationOnMobile->Android 路徑中找到這個 ID。

已完成的程式碼也可做為 TextClassificationStep3 使用。

如果你開啟先前建立的訊息應用程式後嘗試以下訊息,則垃圾郵件分數非常低:

f111e21903d6fd1f.png

如要避免垃圾郵件篩選器,常見的拼寫方式就是像這樣。此外,雖然郵件本身並不構成影響,但垃圾郵件散佈者通常會在使用者 ID 中加入連結,而非郵件本身,郵件中的連結可能會觸發篩選器。

本研究室將說明如何使用新資料更新模型。完成後,相同的句子會顯示以下結果,也就是系統將這封郵件歸類為垃圾郵件!

c96613a0a4d1fef0.png

3. 編輯 CSV 檔案

為了訓練原始模型,系統已建立 CSV (lmblog_comments.csv) 格式的資料集,其中包含將近數千則留言標示為垃圾內容或非垃圾內容。(如要檢查 CSV 檔案,請在文字編輯器中開啟該 CSV 檔)。

CSV 的組成內容是第一列說明資料欄,在這裡會加上 commenttextspam 標籤。

後續的每一列都會採用下列格式:

64c0128548e1d082.png

右側的標籤表示垃圾郵件,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) 的程式碼,但將其指向新的 CSV 資料集 (名為 lmblog_comments_extras.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

瀏覽筆記本,下載模型vocab標籤檔案。在下一個步驟中,您將在 Android 中整合這些 API。

5. 更新 Android 應用程式

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

91116524e9016ed4.png

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

25f63f9629657e85.png

  1. 系統會開啟目錄,當中包含作業系統檔案管理員中的模型、詞彙和標籤。複製您在上一個步驟中建立的捷徑,並複製到這些新位置。

您不需要修改應用程式中的程式碼。執行測試並加以測試,這樣就會看到如上所示的結果,也就是模型改善且能偵測「線上交易」的結果文字情境

完成後,存放區中會以 TextClassificationStep3 的形式提供完成的程式碼。

6. 更新 iOS 應用程式

您可以複製這個存放區,並從 TextClassificationStep2 載入應用程式,以取得這個程式碼的程式碼。您可以在 TextClassificationOnMobile->Android 路徑中找到這個 ID。

已完成的程式碼也可做為 TextClassificationStep3 使用。

如果您已完成先前的程式碼研究室,則可取得適用於基本模型的 iOS 版本的 TextClassificationStep2。如要從現有版本開始操作,可以從存放區取得該模型會與第一個根據垃圾留言資料訓練的模型搭配運作,您可能會看到如下的結果:

553b845565b5b822.png

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

完成後,您的應用程式就能支援新的模式,並立即開始試用。以下為相同語句的範例,但使用的是新模型:

9031ec260b1857a3.png

7. 恭喜

大功告成!使用新資料重新訓練模型,並同時新增至 Android 和 iOS 應用程式,您就可以更新其功能,完全不必編寫任何新程式碼!

後續步驟

這個模型只是一種玩具模型,僅使用 1, 000 個資料進行訓練。

在探索自然語言處理的過程中,可能會想使用更大型的資料集。您也可以設定持續訓練管線,讓系統在收到新資料並標記為垃圾內容時,自動在後端重新訓練模型,然後使用 Firebase Model Hosting 部署該模型。

使用者不必複製及貼上模型做為素材資源、重新編譯和重新發布,即可順暢取得新版模型。舉例來說,您也可以使用 Firebase 遠端設定來管理傳送垃圾郵件的門檻值,而不是現在使用的 0.8 版。

這有無限的可能,我們會在之後的程式碼研究室中探索。