1. 始める前に
この Codelab では、ブログ スパムコメント データセットから作成されたテキスト分類モデルを更新し、独自のデータでモデルが機能するように、独自のコメントを使ってモデルを改善する方法を学びます。
前提条件
この Codelab は、モバイル テキスト分類を使ってみるパスウェイの一部です。このパスウェイの Codelab は順番に行っていきます。この Codelab を学習する前に、最初のパスウェイで学習したアプリとモデルをあらかじめ構築しておく必要があります。前のアクティビティをまだ完了していない場合は、ここで停止して、次のことを行ってください。
- 基本的なメッセージ スタイルのアプリを構築する
- コメントスパムの ML モデルを構築する
- スパムフィルタリングの ML モデルを使用するようにアプリを更新する
学習内容
- モバイル テキスト分類を使ってみるパスウェイで作成したテキスト分類モデルを更新する方法
- アプリで最も蔓延するスパムをブロックするようにモデルをカスタマイズする方法
必要なもの
- 前のアクティビティで確認して構築したメッセージ アプリとスパムフィルタリング モデル。
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)のコードを再利用して、新しい 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)
トレーニングを行うと、トレーニングによってモデルの精度が高くなっていることがわかります。

ノートブックに沿って、モデル、語彙、ラベルの各ファイルをダウンロードします。次のステップでは、これらを Android に統合します。
5. Android アプリを更新する
- Android Studio でアプリを開き、プロジェクト エクスプローラの最上部で [Android] が選択されていることを確認します。
- モデルファイルの古いバージョンからラベル、モデル、語彙を含む
assetsファイルを見つけます。

- アセット フォルダを右クリックします。
- メニューで、オペレーティング システムのファイル マネージャーでフォルダを開くオプションを選択します。(Mac の場合は [Finder で表示] をクリックします。Windows では [エクスプローラーで表示]、Linux では [ファイルで開く] などが表示されます。

- これにより、オペレーティング システムのファイル マネージャーで、モデル、語彙、ラベルを含むディレクトリが開きます。前の手順で作成した新しいものをコピーして、これらに上書きします。
アプリのコードを変更する必要はありません。アプリを実行してテストすると、上記の例のように、モデルが改善されて「onllline trading」というテキスト シナリオを検出できるようになります。
完成版のコードは、リポジトリの 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 で、これらの可能性を探っていきましょう。