1. 始める前に
この Codelab では、テキスト分類モデルを更新する方法を学びます。テキスト分類モデルは、オリジナルのブログスパムコメント データセットから構築し、独自のコメントで拡張して、データで機能するモデルを作ります。
前提条件
この Codelab は、「モバイル テキスト分類を使ってみる」コースの一部です。このパスウェイの Codelab は順番に行っていきます。アプリと作業するモデルは、すでに構築されているはずですが、最初のパスウェイに沿って作業を進めてください。前のアクティビティをまだ完了していない場合は、いったん停止して今すぐ完了してください。
- 基本的なメッセージ スタイル アプリを作成する
- コメントスパムの機械学習モデルを構築する
- 迷惑メールフィルタの機械学習モデルを使用するようにアプリを更新してください
学習内容
- 「モバイル テキスト分類のスタートガイド」パスウェイで作成したテキスト分類モデルを更新する方法
- アプリで最も蔓延するスパムをブロックするようにモデルをカスタマイズする方法
必要なもの
- 以前のアクティビティで確認および構築したメッセージ アプリと迷惑メールフィルタ モデル。
2. テキスト分類を強化する
このコードを取得するには、このリポジトリのクローンを作成し、TextClassificationStep2
からアプリを読み込みます。これは TextClassificationOnMobile->Android
パスにあります。
完成したコードは、TextClassificationStep3
としても利用できます。
作成したメッセージ アプリを開いてこのメッセージを試した場合、スパムスコアは非常に低くなります。
このようなスペルミスは、迷惑メールフィルタを回避する一般的な方法です。メール自体は無害ですが、迷惑メールの送信者は多くの場合、ユーザー ID にリンクを追加します(リンクが含まれているとフィルタがトリガーされる可能性があります)。
このラボでは、新しいデータでモデルを更新する方法を確認します。完了後、同じ文を実行すると下の結果が表示され、このメッセージは迷惑メールとして識別されます。
3. CSV ファイルを編集する
元のモデルをトレーニングするために、スパムまたは非スパムのラベルが付いた約 1, 000 件のコメントを含むデータセットを CSV(lmblog_comments.csv
)として作成しました。(CSV ファイルを確認する場合は、任意のテキスト エディタで開きます)。
CSV では、最初の行が列の説明となるように構成されています。ここでは、commenttext
と spam
というラベルが付いています。
以降の行はすべて次の形式になります。
右側のラベルは迷惑メールの場合は 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
)を再利用しますが、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)
トレーニングを実施しても、モデルは引き続き高い精度でトレーニングできることがわかります。
ノートブックから model、vocab、labels ファイルをダウンロードします。次のステップでは、これらを Android に統合します。
5. Android アプリの更新
- Android Studio でアプリを開き、プロジェクト エクスプローラの上部で [Android] が選択されていることを確認します。
- 古いバージョンのモデルファイルのラベル、モデル、語彙を含む
assets
ファイルを探します。
- アセット フォルダを右クリックします。
- メニューから、オペレーティング システムのファイル マネージャーでフォルダを開くオプションを選択します。(Mac の場合は Finder で表示してください)。Windows では [エクスプローラーで表示]、Linux では [ファイルで開く] などになります)。
- オペレーティング システムのファイル マネージャーに、モデル、語彙、ラベルを含むディレクトリが開きます。前のステップで作成した新しいラベルをこれらにコピーします。
アプリのコードを変更する必要はありません。これを実行してテストすると、上のような結果が表示されます。ここでは、モデルが「オンライン取引」を検出するように改善されています。説明します。
コードの完成版は TextClassificationStep3 としてリポジトリから入手できます。
6. iOS アプリの更新
このコードを取得するには、このリポジトリのクローンを作成し、TextClassificationStep2
からアプリを読み込みます。これは TextClassificationOnMobile->Android
パスにあります。
完成したコードは、TextClassificationStep3
としても利用できます。
前の Codelab を終えた場合は、ベースモデルで動作する TextClassificationStep2 の iOS バージョンが用意されています。既存のバージョンから始める場合は、リポジトリからそのバージョンを取得するだけです。これは、コメントスパムデータでトレーニングされた最初のモデルで動作し、次のような結果になる可能性があります。
新しいモデルを使用するようにアプリを更新するのは非常に簡単です。最も簡単な方法は、ファイル エクスプローラに移動し、model.tflite
、vocab
、labels.txt
の新しいバージョンを入手してプロジェクト ディレクトリにコピーすることです。
これが完了すると、アプリは新しいモデルで動作し、試すことができます。以下は、同じ文で新しいモデルを使用した場合の例です。
7. 完了
これで、新しいデータでモデルを再トレーニングし、Android アプリと iOS アプリの両方に追加することで、新しいコードを記述することなくモデルの機能を更新できます。
次のステップ
このモデルは単なるおもちゃのモデルで、1, 000 項目のデータでしかトレーニングされていません。
自然言語処理について調べているときに、より大きなデータセットを操作する必要がある場合があります。また、継続的なトレーニング パイプラインを設定して、新しいデータを受信してスパムのフラグが付いた場合に、バックエンドでモデルを自動的に再トレーニングし、Firebase Model Hosting を使用してそのモデルをデプロイすることもできます。
ユーザーは、アセットとしてコピーして貼り付け、再コンパイル、再配布することなく、更新されたモデルをシームレスに入手できます。また、たとえば迷惑メール送信のしきい値を現在の 0.8 からではなく Firebase Remote Config で管理することもできます。
非常に多くの可能性があるため、このコースの今後の Codelab でそれらについて説明します。