TensorFlow.js: コメントケース スパム検出モデルを再トレーニングしてエッジケースを処理する

1. 始める前に

この Codelab は、このシリーズの前回の Codelab の結果に基づき、TensorFlow.js を使用したコメントスパムの検出を行います。

前回の Codelab では、架空の動画のブログ用に完全に機能するウェブページを作成しました。ブラウザでストレージに対する事前トレーニング済みのコメントスパム検出モデルを使用し、保存のためにサーバーやその他接続されたクライアントに送信する前に、コメントに対するスパムをフィルタリングすることができました。

この Codelab の最終的な結果を以下に示します。

ee0f13398ea4e91e.gif

これは非常にうまく機能しましたが、検出できなかったエッジケースがあります。処理できなかった状況を考慮して、モデルを再トレーニングできます。

この Codelab では、自然言語処理(人間の言語をパソコンで理解する技術)に重点を置き、作成した既存のウェブアプリを変更する方法について説明します(Codelab を順番に受講することを強くおすすめします{/1)。 })を使って作成されました。

この Codelab では、さらに一歩進めて、ML モデルを再トレーニングします。これにより、現在のトレンドや、話題となっているトピックに基づいて、時間とともに変化するスパム メッセージ コンテンツの変化をモデルに反映し、モデルを常に最新の状態に維持できます。しています。

前提条件

  • このシリーズの最初の Codelab を完了しました。
  • HTML、CSS、JavaScript などのウェブ技術に関する基本的な知識

作成するアプリの概要

事前構築したウェブサイトを、リアルタイムのコメント欄のある架空のビデオブログに再利用します。そして、TensorFlow.js を使ってトレーニング済みのスパム検出モデルのカスタム トレーニング バージョンを読み込むようにアップグレードします。これにより、以前は失敗したエッジケースでのパフォーマンスが向上します。をご覧ください。当然ながら、ウェブ デベロッパーやエンジニアは、この仮想的な UX を変更して、日々の業務で使用するウェブサイトで再利用し、ブログ、フォーラム、その他のクライアント ユースケースに合わせてソリューションを調整できます。 CMS の形式(Drupal など)

ハッキングを開始...

学習内容

このチュートリアルでは、次のことを行います。

  • トレーニング済みのモデルでエラーとなったエッジケースを特定する
  • Model Maker を使用して作成されたスパム分類モデルを再トレーニングする。
  • この Python ベースのモデルを TensorFlow.js 形式にエクスポートして、ブラウザで使用できるようにします。
  • ホストされたモデルとその辞書を、新たにトレーニングされたモデルで更新して、結果を確認する

このラボでは、HTML5、CSS、JavaScript に精通していることを前提としています。「co lab」ノートブックで Python コードを実行して、Model Maker で作成したモデルを再トレーニングしますが、Python の知識は必要ありません。

2. コードの設定

ここでも、Glitch.com を使用して、ウェブ アプリケーションをホストおよび変更します。前提条件の Codelab をまだ完了していない場合は、ここから最終結果をクローンできます。コードの動作にご不明な点がある場合は、続行する前に、このウェブアプリを機能させる方法を説明した前の Codelab を完了することを強くおすすめします。

Glitch で、[リミックス] ボタンをクリックしてフォークすると、編集できる新しいファイルのセットが作成されます。

3. 前のソリューションでエッジケースを見つける

クローンを作成したウェブサイトを開いてコメントを入力してみると、想定どおりに動作するはずです。また、スパムと思われるコメントをブロックし、正当な回答も可能になっています。

しかし、巧妙に表現して、モデルを破壊しようとするフレーズがあれば、おそらく成功するでしょう。少し試してみるだけで、以下のような例を手動で作成できます。以下を既存のウェブアプリに貼り付けてみて、コンソールを確認します。コメントがスパムである可能性が戻ってきます。

問題のない正当なコメント(真陰性):

  1. 「わぁ、あの動画、すばらしい! 確率スパム: 47.91854%
  2. 「これらのデモはとても楽しかったです。 詳細は以上です。」 確率スパム: 47.15898%
  3. 「詳しくは、どのウェブサイトをご覧くださいか?」 確率スパム: 15.32495%

これは素晴らしいことですが、上のすべてに当てはまる可能性はかなり低く、デフォルトの完了に成功しています。SPAM_THRESHOLD 75% 以上の確率で行動を起こします(script.js )をご覧ください。

次に、スパムとしてマークされている最先端のコメントを書いてみましょう。

スパムとしてマークされた正当なコメント(偽陽性):

  1. 「お客様が着用しているマスクのウェブサイトをリンクすることはできるでしょうか?」 確率スパム: 98.46466%
  2. 「Spotify でこの曲を購入できますか?誰か教えてください。」 確率スパム: 94.40953%
  3. 「TensorFlow.js のダウンロード方法について、何か詳しい情報を教えてもらえますか?」 確率スパム: 83.20084%

​これらの正当なコメントは、許可されるべきもののスパムとしてマークされているようです。どうすれば解決できますか。

簡単な方法の 1 つとして、SPAM_THRESHOLD を 98.5% 超に確信させる方法があります。その場合、誤って分類されたコメントが投稿されます。これを念頭に置いて、以下で考えられる他の結果を見てみましょう。

スパムとしてマークされたスパムコメント(真陽性):

  1. 「こちらの優れたダウンロード リンクをウェブサイトでご紹介しています。」 確率スパム: 99.77873%
  2. 「薬をしてくれる人もいるかもしれませんが、詳細については pr0file をご覧ください」確率 スパム: 98.46955%
  3. 「自分のプロフィールで、さらにすごい動画をダウンロードできるよ。http://example.com」をご覧ください。確率スパム: 96.26383%

当初の 75% のしきい値では想定どおりに機能していますが、前のステップで SPAM_THRESHOLD を 98.5% 超に変更したため、ここでは 2 つの例を使用します。が大きすぎます。96% のほうがよいでしょうか。 その場合、前のセクションのコメントの 1 つ(誤判定)は、98.46466% と評価されるため、正当なものであればスパムとみなされます。

そのような場合は、そうした実際のスパムコメントをすべてキャプチャして、上記の失敗について再トレーニングすることをおすすめします。しきい値を 96% に設定することで、すべての真陽性がキャプチャされ、上記の偽陽性のうち 2 つが除外されます。番号を 1 つだけ変更しても悪くありません。

先に進みましょう。

投稿が許可されるスパムコメント(偽陰性):

  1. 「もっとすごい動画をダウンロードして、プロフィールで見る!」 確率スパム: 7.54926%
  2. ジム トレーニング クラスが割引になります(pr0file)」 確率スパム: 17.49849%
  3. 「GOOG の在庫が急増しました。遅すぎないで!」 確率スパム: 20.42894%

これらのコメントについては、SPAM_THRESHOLD 値をさらに変更するだけでは何もできません。スパムのしきい値を 96% から 9% に下げると、正当なコメントであっても、正当なものであっても 58% はスパムとしてマークが付けられます。このようなコメントに対処する唯一の方法は、トレーニング データに含まれるそのようなエッジケースでモデルを再トレーニングすることで、スパムの有無に応じて世界の見方を調整することです。

残りはモデルを再トレーニングすることだけですが、さらに、スパムを誘発してパフォーマンスを改善する目的で、しきい値を変更する方法がわかりました。人間として、75% はかなり自信があるように思えますが、このモデルでは、サンプル入力でより効果的に機能するために 81.5% に近づく必要がありました。

複数のモデルでうまく機能する魔法の値は 1 つではありません。このしきい値は、実際に効果のあるデータをテストした後で、モデルごとに設定する必要があります。

偽陽性(または陰性)があると(医療業界などで)深刻な結果を招く場合があります。そのため、閾値が非常に高くなるように調整し、基準を満たさないユーザーに対する追加の手動審査をリクエストできます。この選択肢はデベロッパーにとって最適な選択肢であり、テストが必要です。

4.コメントスパム検出モデルを再トレーニングする

前のセクションでは、これらの状況を考慮するためにモデルを再トレーニングすることでした、モデルで失敗するエッジケースをいくつか特定しました。本番環境システムでは、コメントが手動でスパムとして報告された場合や、フラグが付けられたコメントを確認しているモデレーターが実際にはスパムではなく、再トレーニング対象としてマークを付ける場合があります。これらのエッジケースの新しいデータが大量に収集されると仮定して(可能であれば、新しいセンテンスのバリエーションをいくつか用意する必要があります)、ここで、これらのエッジケースを考慮してモデルを再トレーニングする方法を確認します。

作成済みのモデルのまとめ

ここで使用した事前作成済みのモデルは、サードパーティ(Model Maker を使用)が作成したモデルです。ここでは、「平均単語埋め込み」モデルが使用されています。

Model Maker でモデルが作成されたため、Python に簡単に切り替えてモデルを再トレーニングしてから、作成したモデルを TensorFlow.js にエクスポートしてブラウザで使用する必要があります。ありがたいことに、Model Maker ではモデルを使用するのがとても簡単になるため、このプロセスは順調に進めることができ、これまでに Python を使ったことのない方でもご心配なくご利用いただけます。

Colab

この Codelab には、さまざまな Python ユーティリティをすべてインストールして Linux サーバーをセットアップすることには関心がないので、「Colab ノートブック」を使用してウェブブラウザからコードを実行できます。これらのノートブックは「バックエンド」に接続できます。バックエンドとは単に、何かがプリインストールされたサーバーであり、ウェブブラウザ内で任意のコードを実行して結果を表示します。これは、迅速なプロトタイピングやこのようなチュートリアルでの使用に非常に役立ちます。

colab.research.google.com にアクセスすると、次のようなウェルカム画面が表示されます。

b2df89c1f7b38cc9.png

ポップアップ ウィンドウの右下にある [New Notebook] ボタンをクリックすると、次のような空白の colab が表示されます。

100a875f67d6e34f6.png

次の次のステップでは、フロントエンドの Colab をバックエンド サーバーに接続し、これから記述する Python コードを実行します。これを行うには、右上の [接続] をクリックし、[ホストされているランタイムに接続] を選択します。

f4fcd56ae53527bd.png

接続すると、その場所に次のように RAM とディスクのアイコンが表示されます。

d979e93ba595d1de.png

よくできました!Python でコーディングを開始して、Model Maker モデルを再トレーニングできるようになりました。手順は次のとおりです。

ステップ 1

現在空になっている最初のセルで、次のコードをコピーします。「pip」という Python のパッケージ マネージャーを使用して、TensorFlow Lite Model Maker がインストールされます(npm と同様です。このラボのほとんどの読者が JS エコシステムに慣れ親しんでいる可能性があります)。

!pip install -q tflite-model-maker

ただし、セルにコードを貼り付けても実行されません。次に、上記のコードを貼り付けた灰色のセルにカーソルを合わせると、セルの左側に次のような小さな「再生」アイコンが表示されます。

be966130d68b5aac.png 再生ボタンをクリックすると、セルに入力したコードが実行されます。

モデルメーカーがインストールされています。

276bc0fbde89a60d.png

セルの実行が完了したら、次の手順に進みます。

ステップ 2

次に、以下に示すように新しいコードセルを追加します。最初のセルの後に別のコードを貼り付けて個別に実行できます。

7ec405d0d82b2143.png

次に実行するセルには、ノートブックの残りのコードで使用する必要がある多数のインポートが行われます。以下のコードをコピーして、作成した新しいセルに貼り付けます。

import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Python に精通していなくても、ごく簡単なコードです。スパム分類器に必要なユーティリティと Model Maker 関数をインポートしているだけです。また、Model Maker に必須の TensorFlow 2.x を使用しているかどうかも確認できます。

最後に、前と同じようにセルを実行してセルを実行し、次のステップ用の新しいコードセルを追加します。

ステップ 3

次に、リモート サーバーからデバイスにデータをダウンロードし、ダウンロードされたローカル ファイルのパスとして training_data 変数を設定します。

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

Model Maker では、ダウンロードしたようなシンプルな CSV ファイルからモデルをトレーニングできます。テキストを保持する列とラベルを保持する列を指定するだけで済みます。手順 5 で説明します。CSV ファイルを直接ダウンロードして、ファイルの内容を確認することもできます。

このファイルには、jm_blog_comments_extras.csv という名前が付いています。このファイルは、最初のコメントスパム モデルを生成するために使用された元のトレーニング データです。発見した新しいエッジケース データと結合し、すべてを 1 つのファイルで実現します。これから学習する新しい文に加えて、モデルのトレーニングに使用する元のトレーニング データも必要です。

省略可: この CSV ファイルをダウンロードして最後の数行をチェックすると、以前は正常に機能しなかったエッジケースの例を確認できます。これらは、事前トレーニング済みモデルを使用して既存のトレーニング データの末尾に追加されただけです。

このセルを実行して、完了したら新しいセルを追加し、ステップ 4 に進みます。

ステップ 4

Model Maker を使用する場合、モデルをゼロから作成する必要はありません。通常は既存のモデルを使用して、必要に応じてカスタマイズします。

Model Maker には、事前学習済みのモデル エンベディングがいくつか用意されていますが、最も簡単で早いのは、前の Codelab でウェブサイトを構築したときに使用した average_word_vec です。以下にコードを示します。

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

新しいセルに貼り付けたら、実行してみましょう。

Google Workspace の

num_words

parameter

これは、モデルで使用する単語の数です。シンプルである方が良い場合もありますが、一般的には、各単語が使用される頻度に応じて適切な範囲があります。コーパス全体ですべての単語を使用すると、モデルは 1 回だけ使用される単語の重みの学習とバランス調整を試みることになる場合があります。これはあまり役立ちません。多くのテキスト コーパスでは、多くの単語は 1 回か 2 回しか使用されず、多くの場合、モデルで使用するのは感情にほとんど影響しないため、価値がありません。そのため、num_words パラメータを使用して、必要な単語数でモデルを調整できます。数値を小さくするとモデルは小さくなり、早く認識されますが、認識する単語数が少ないため精度が低くなる可能性があります。この数値が大きいほど、モデルは大きくなり、速度が低下する可能性があります。最適な場所を見つけることは重要であり、ユースケースに最適な方法は機械学習エンジニアにあります。

Google Workspace の

wordvec_dim

parameter

wordvec_dim パラメータは、各単語のベクトルに使用するディメンションの数です。これらの次元は本質的には異なる特徴です(トレーニング時に機械学習アルゴリズムによって作成され、プログラムが特定の単語を評価して、意味のある方法で類似する単語を最適に関連付けようとするため)。

たとえば、単語がどの程度「医学的」であるかを示すディメンションがある場合、「ピル」などの単語はこのディメンションで高いスコアが付けられ、「xray」などのスコアの高い他の単語と関連付けられますが、「猫」はスコアを取得します。 。「医療ディメンション」は、それを使用する重要なディメンションと組み合わせて他のスパムと組み合わせて判断する場合に役立ちます。

「医学的次元」においてスコアの高い単語の場合は、単語と身体を関連付ける 2 つ目の次元が有用であると考えられます。「脚」、「腕」、「首」などの単語はスコアがこれより多く、医療分野のスコアもかなり高くなります。

このモデルは、これらのディメンションを使用することで、スパムに関連している可能性が高い単語を検出できるようになります。迷惑メールには、体の一部と人間の部位の両方が含まれる単語が含まれる可能性が高いと考えられます。

調査から判断した目安は、このパラメータの単語数の 4 乗根です。たとえば 2, 000 語なら、7 次元から始めるとよいでしょう。使用する単語の数も変更できます。

Google Workspace の

seq_len

parameter

一般的に、入力値に関しては、モデルは非常に厳格です。これは、言語モデルの場合、言語モデルが静的で特定の長さの文を分類できることを意味します。これは、「シーケンス長」を表す seq_len パラメータによって決まります。単語を数字(またはトークン)に変換すると、文がそれらのトークンのシーケンスになります。そのため、モデルは、この場合には 20 個のトークンを含む文を分類して認識するようにトレーニングされます。この数より長い場合、文は切り捨てられます。これよりも短い場合はパディングされます。このシリーズの最初の Codelab と同様です。

ステップ 5 - トレーニング データを読み込む

先ほど CSV ファイルをダウンロードしました。次に、データローダを使用して、このデータをモデルで認識可能なトレーニング データに変換します。

data = DataLoader.from_csv(
      filename=data_file,
      text_column='commenttext',
      label_column='spam',
      model_spec=spec,
      delimiter=',',
      shuffle=True,
      is_training=True)

train_data, test_data = data.split(0.9)

CSV ファイルをエディタで開くと、各行には値が 2 つのみあり、値はファイルの 1 行目にテキストで記述されます。通常、各エントリは「列」とみなされます。最初の列の記述子は commenttext で、各行の最初のエントリはコメントのテキストです。

同様に、2 番目の列の記述子は spam で、各行の 2 番目のエントリは TRUEFALSE です。これは、このテキストがコメントスパムと見なされます。他のプロパティには、ステップ 4 で作成したモデル仕様と区切り文字が設定されます。この場合は、ファイルがカンマ区切りなのでカンマです。また、シャッフル パラメータを設定してトレーニング データをランダムに並べ替えて、類似または一緒に収集されたものがデータセット全体にランダムに分散されるようにします。

次に、data.split() を使用して、データをトレーニング データとテストデータに分割します。.9 はデータセットの 90% がトレーニングに使用され、残りはテストに使用されることを示します。

ステップ 6 - モデルを構築する

モデルを構築するコードを追加する別のセルを追加します。

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

これにより、Model Maker でテキスト分類モデルを作成し、使用するトレーニング データ(ステップ 4 で定義)、モデル仕様(ステップ 4 で設定する)、エポック数(今回は 50。

機械学習の基本原則は、パターン マッチングの一種です。最初は単語の事前トレーニング済みの重みを読み込み、グループ化してスパムを示すものとそうでないものを区別する「予測」でグループ化しようとします。最初は以下のように 50:50 に近づく可能性が高いため、モデルの使用が開始されるのは以下のような場合です。

d6c8116f8e7e781b.png

その後、この結果を測定し、モデルの重みを変更して予測を微調整してから、もう一度やり直します。これはエポックです。そのため、epochs=50 を指定すると、次に示すようにその「ループ」を 50 回繰り返します。

fc7bf6a948b7aa26.png

したがって、モデルは 50 エポックに達するまでに、はるかに高いレベルの精度を報告します。この場合は 99.1% です。

ステップ 7 - モデルをエクスポートする

トレーニングが完了したら、モデルをエクスポートできます。TensorFlow は独自の形式でモデルをトレーニングします。ウェブページで使用するには、これを TensorFlow.js 形式に変換する必要があります。新しいセルに次の内容を貼り付けて実行します。

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

このコードの実行後、Colab の左側にある小さなフォルダのアイコンをクリックすると、上記にエクスポートしたフォルダに移動し(ルート ディレクトリでレベルを上げる必要があります)、フォルダの zip バンドルを見つけて、 ModelFiles.zip に含まれるエクスポートされたファイル。

ZIP ファイルは、最初の Codelab と同じように使用するので、パソコンにダウンロードします。

a9d8595a3e2564dc.png

次のPython のパートは終わりです。お好きな JavaScript のランドスケープに戻ることができます。さて、

5. 新しい機械学習モデルの提供

モデルを読み込む準備がほぼ整いました。その前に、Codelab で先ほどダウンロードした新しいモデルファイルをアップロードし、コード内でホストして使用できるようにする必要があります。

まず、まだ実行していない場合は、実行した Model Maker Colab ノートブックからダウンロードしたモデルのファイルを解凍します。さまざまなフォルダ内に次のファイルが含まれています。

270-0534

機能はありますか?

  • model.json - これは、トレーニング済みの TensorFlow.js モデルを構成するファイルの 1 つです。この特定のファイルは JS コードで参照します。
  • group1-shard1of1.bin - エクスポートされる TensorFlow.js モデルの保存されたデータの大部分を含むバイナリ ファイルです。サーバー上の任意の場所にホストして、上記の model.json と同じディレクトリにダウンロードする必要があります。
  • vocab - この拡張子のない奇妙なファイルは、Model が理解できるように文中の単語をエンコードする方法を示しています。これについては、次のセクションで詳しく説明します。
  • labels.txt - これは、モデルが予測する結果のクラス名のみを示します。このモデルでは、このファイルをテキスト エディタで開くと、"false" と "true" のみが表示され、予測出力として「スパムではない」または「スパム」が示されます。

TensorFlow.js モデルファイルをホストする

まず、ウェブサーバーで生成された model.json ファイルと *.bin ファイルをウェブページからアクセスできるようにします。

既存のモデルファイルを削除する

このシリーズの最初の Codelab の結果に基づいて、最初に既存のモデルファイルを削除する必要があります。Glitch.com を使用している場合は、左側のファイルパネルで model.jsongroup1-shard1of1.bin を確認し、各ファイルのその他メニューのプルダウンをクリックして、削除を選択します。

7412b0b795d3b84f.png

Glitch への新しいファイルのアップロード

次の新しいファイルをアップロードします。

  1. Glitch プロジェクトの左パネルで、assets フォルダを開き、同じ名前で古いアセットがアップロードされている場合は削除します。
  2. [アセットをアップロード] をクリックし、group1-shard1of1.bin を選択してこのフォルダにアップロードします。アップロードが完了すると、次のように表示されます。

25a2251c7f165184.png

  1. 次のmodel.json ファイルについても同様に 2 つのファイルをアセット フォルダ内に配置します。

51a6dbd5d3097ffc.png

  1. アップロードした group1-shard1of1.bin ファイルをクリックすると、URL をその場所にコピーできます。パスを次のようにコピーします。

92ded8d46442c404.png

  1. 画面左下にある [ツール] > [ターミナル] をクリックします。ターミナル ウィンドウが読み込まれるのを待ちます。
  2. 読み込まれたら、次のように入力して Enter キーを押して、www フォルダに移動します。

terminal:

cd www
  1. 次に、wget を使用して、以下の 2 つのファイルをダウンロードします。以下の URL は、Glitch の assets フォルダにあるファイル用に生成された URL に置き換えます(各ファイルのカスタム URL は assets フォルダを確認してください)。

2 つの URL の間のスペースと、使用する必要がある URL は、実際の URL と異なりますが、次のようになります。

ターミナル

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

スーパー これで、www フォルダにアップロードしたファイルのコピーが作成されました。

しかし、現時点では見慣れない名前でダウンロードされます。ターミナルで「ls」と入力して Enter キーを押すと、次のように表示されます。

9cc90f1d053f517f.png

  1. mv コマンドを使用して、ファイル名を変更します。コンソールに次のように入力し、各行の後に Enter キーを押します。

terminal:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. 最後に、ターミナルで「refresh」と入力して Enter キーを押して、Glitch プロジェクトを更新します。

terminal:

refresh

更新すると、ユーザー インターフェースの www フォルダに model.jsongroup1-shard1of1.bin が表示されます。

212-0016

次の最後に、dictionary.js ファイルを更新します。

  1. 新しくダウンロードした vocab ファイルを正しい JS 形式に変換します。手動でテキスト エディタを使用するか、このツールを使用して、出力を dictionary.js として www フォルダに保存します。dictionary.js ファイルがすでにある場合は、新しいコンテンツをコピーして貼り付け、ファイルを保存するだけで済みます。

おめでとうございます!変更されたすべてのファイルが正常に更新されました。ウェブサイトの使用を試みると、再トレーニングされたモデルが、次のように検出、学習したエッジケースを説明できることがわかります。

3ece5dbd0a673987.gif

ご覧のとおり、最初の 6 個はスパムとして正しく分類されず、6 個目の 2 つ目のバッチはすべてスパムとして識別されます。正解です。

さまざまなバリエーションを試して、一般化が可能かどうか確認してみましょう。もともとは次のような文で誤りがありました。

「GOOG の在庫が急増しました。遅すぎないで!

現在は迷惑メールとして正しく分類されていますが、次のように変更するとどうなるでしょうか。

「その結果、XYZ の株価が上昇しました。お早めに購入されることをおすすめいたします。」

ここでは、在庫の記号と表現を少し変えたとしても、スパムである可能性は 98% と予測されています。

もちろん、この新しいモデルを壊そうとすれば、それは不可能です。その結果、より多くのトレーニング データを収集して、オンラインで発生する可能性のある一般的な状況に対してより独自性のあるバリエーションを取り込む機会を得ることができます。今後の Codelab では、フラグを付けて、ライブデータでモデルを継続的に改善する方法を紹介します。

6. 完了

おつかれさまでした。これで、既存のエッジモデルに対応するように既存の機械学習モデルを再トレーニングし、実際のアプリケーションで使用する TensorFlow.js を使用してブラウザに変更をデプロイできました。

内容のまとめ

この Codelab では次のことを学びました。

  1. 既定のコメントスパム モデルを使用しても機能していなかったエッジケースを発見しました
  2. 発見したエッジケースを考慮して Model Maker モデルを再トレーニングする
  3. 新しいトレーニング済みモデルを TensorFlow.js 形式にエクスポート
  4. ウェブアプリを更新して新しいファイルを使用する

次のステップ

このアップデートは正常に機能しますが、他のウェブアプリと同様に、時間の経過とともに変更される可能性があります。アプリが毎回自動的に手動で改善するのではなく、継続的に改善していく方がはるかに良いでしょう。たとえば、100 件の新しいコメントが誤って分類されたとマークされた後に、モデルを自動的に再トレーニングするためにこれらの手順をどのように自動化できましたか。 定期的にウェブ エンジニアリングの仕事を続ければ、パイプラインを自動的に構築するパイプラインが見つかります。まだの場合は、次のシリーズで Codelab をご確認ください。

作成したものを共有する

他のクリエイティブ ユースケースでも、今回作成した機能を簡単に拡張できます。また、既成概念にとらわれずに、引き続きハッキングを行うことをおすすめします。

ソーシャル メディアで #MadeWithTFJS ハッシュタグを使用すると、作成したプロジェクトが TensorFlow ブログ今後のイベント。作品づくりを楽しみにしています。

理解を深めるための TensorFlow.js のその他の Codelab

参考になるウェブサイト