カスタム テキスト分類モデルを作成し、このモデルでアプリを更新する

1. 始める前に

この Codelab では、元のスパムコメント データセットから構築されたテキスト分類モデルを更新する方法を学びますが、このテキスト分類モデルでは、独自のコメントを使用して拡張され、データに対して機能するモデルを作成できます。

前提条件

この Codelab は、モバイル テキスト分類パスウェイの一部です。このパスウェイの Codelab は順番に行います。使用するアプリとモデルは、最初のパスウェイに沿っている間にすでに構築されているはずです。前のアクティビティをまだ完了していない場合は、ここで停止して停止してください。

  • 基本的なメッセージ スタイル アプリを作成する
  • コメントスパム機械学習モデルを構築する
  • スパムフィルタの機械学習モデルを使用するようにアプリを更新する

学習内容

  • 「モバイル テキスト分類を始める」で作成したテキスト分類モデルを更新する方法
  • アプリで最も蔓延しているスパムをブロックするようにモデルをカスタマイズする方法

必要なもの

  • 前のアクティビティで構築、構築したメッセージ アプリと迷惑メールフィルタのモデル。

2. テキスト分類を強化する

このコードは、このリポジトリのクローンを作成し、TextClassificationStep2 からアプリを読み込むことで取得できます。これは TextClassificationOnMobile->Android パスにあります。

完成したコードは TextClassificationStep3 としても利用できます。

作成したメッセージ アプリを開いてこのメッセージを試した場合、迷惑メールスコアは非常に低くなります。

f111e21903d6fd1f.png

このようなスペルミスは、スパムフィルタを回避する一般的な方法です。迷惑メールではないメッセージであっても、多くの場合、ユーザー ID 内にリンクが追加されます(メッセージ内のリンクではフィルタがトリガーされることがあります)。

このラボでは、新しいデータでモデルを更新する方法について学びます。最後に、同じ文を使用して実行すると次の結果が返されます。このメッセージは迷惑メールに分類されます。

c96613a0a4d1fef0.png

3. CSV ファイルを編集する

元のモデルをトレーニングするために、スパムまたはスパムではないとラベル付けされた約 1, 000 件のコメントを含むデータセットを 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 など)で保存すると、新しいモデルのトレーニングに使用できます。

この Codelab の残りの部分では、オンライン取引の更新を用いて、Google Cloud Storage 上で提供、編集、ホストされる例を使用します。独自のデータセットを使用する場合は、コード内の URL を変更できます。

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)

トレーニング中、モデルは引き続き高い精度でトレーニングされます。

10248485c.png

ノートブックを実行し、modelvocablabels ファイルをダウンロードします。次のステップで Android に統合します。

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 パスにあります。

完成したコードは TextClassificationStep3 としても利用できます。

前の Codelab を実施している場合は、ベースモデルで動作する iOS バージョンの TextClassificationStep2 が得られます。既存のバージョンから開始する場合は、そのバージョンをリポジトリから取得します。これは、コメントスパム データでトレーニングされた最初のモデルで機能します。次のような結果が表示されます。

553b845565b5b822.png

新しいモデルを使用するようアプリを更新するのはとても簡単です。最も簡単な方法は、ファイル エクスプローラーに移動し、model.tflitevocablabels.txt の新しいバージョンを取得してプロジェクト ディレクトリにコピーすることです。

それが完了すると、アプリが新しいモデルで動作し、試すことができます。以下は、同じ文で、新しいモデルを使用した例です。

9031ec260b1857a3.png

7. 完了

これで、新しいデータでモデルを再トレーニングし、Android アプリと iOS アプリの両方に追加することで、新しいコードを記述しなくても機能を更新することができました。

次の手順

このモデルは 1, 000 個のアイテムのみからトレーニングされた、単なるおもちゃです。

自然言語処理を行う中で、大規模なデータセットを扱えるようになる場合があります。継続的なトレーニング パイプラインを設定することもできます。これにより、新しいデータが受信されてスパムとして報告されたら、バックエンドでモデルを自動的に再トレーニングし、Firebase Model Hosting を使用してそのモデルをデプロイできます。

ユーザーは更新したモデルをシームレスにアセットを取得できます。モデルをコピーして貼り付けたり、再コンパイル、再配布したりする必要はありません。たとえば、これまでの 0.8 ではなく、Firebase Remote Config を使用して迷惑メールの送信のしきい値を管理することもできます。

可能性は無限大です。このコースの今後の Codelab で、それぞれの仕組みを見ていきましょう。