約45億4,000万人のインターネットユーザーがいるという現実(2020年6月)世界中には、前例のない量のコンテンツを生成すると、コンテンツモデレートを最適化するためのアプローチを見つける衝動が増えています。そして、このタスクは、アクティブユーザーの数が絶えず急勾配であり、コンテンツボリュームも指数関数的に成長し、機械学習とAIが非常に高価であり、手動の節度は非常に時間がかかり、時間が遅れているという事実により、このタスクが重くなっています。
そのため、ユーザーが生成したコンテンツが同様の問題に直面しているプラットフォームがあります。幸いなことに、機械学習はすでに成熟しており、コンピューター処理能力、ストレージ、データツール、Webなどの進歩により、機械学習技術がますます手頃な価格になりました。これと絶え間ない革新を目指して、Sashidoのチームは、オープンソースツールとライブラリのみで構築されたこのシンプルでエレガントな完全に機能するコンテンツモデレーションサービスを作成するようになりました。これは、3つの主要なコンポーネントで構成されています - 画像分類REST API、自動化エンジン、および管理パネル。これらを個別に統合するか、任意のParse Server node.jsプロジェクトに完全に統合し、どこでもホストできます。
デスクトップとモバイルに優しい管理パネルのシンプルなイラスト。ここで完全なデモを確認してください。
Adminアプリで承認のために表示される画像は、特定の基準に基づいて自動化エンジンから手動モデレーションのためにフラグが付けられた画像です。
特定のクラスの写真がREST APIによってどのように分類されるかの例をいくつか紹介します。
画像ソース | 画像ソース | 画像ソース |
---|---|---|
分類結果 | 分類結果 | 分類結果 |
[{ 「className」:「ニュートラル」、 「確率」:0.93821 }、{ 「classname」:「描画」、 「確率」:0.05473 }、{ 「classname」:「セクシー」、 「確率」:0.00532 }、{ 「className」:「Hentai」、 「確率」:0.00087 }、{ 「classname」:「ポルノ」、 「確率」:0.00085 }] | [{ 「classname」:「セクシー」、 「確率」:0.99394 }、{ 「className」:「ニュートラル」、 「確率」:0.00432 }、{ 「classname」:「ポルノ」、 「確率」:0.00164 }、{ 「classname」:「描画」、 「確率」:0.00006 }、{ 「className」:「Hentai」、 「確率」:0.00001 }] | [{ 「classname」:「描画」、 「確率」:0.96063 }、{ 「className」:「ニュートラル」、 「確率」:0.03902 }、{ 「className」:「Hentai」、 「確率」:0.00032 }、{ 「classname」:「セクシー」、 「確率」:0.00001 }、{ 「classname」:「ポルノ」、 「確率」:0.00005 }] |
ニュートラルデモ | セクシーなデモ | 描画デモ |
このサービスは、Mongo DBとParse Serverを使用してnode.jsに組み込まれています。標準のExpressアプリで使用できますが、リポジトリのファイル構造は分類されていることに留意してください。コードはsrc
フォルダーに編成されており、 src/cloud/main.js
サービスのルートファイルです。 React Vizualization Logicはそれぞれscr/react
フォルダーに導きます。
REST APIは、Tensorflow事前訓練モデルを使用するNSFW.JS分類で動作します。 URLを考えると、描画、ニュートラル、セクシー、ポルノ、ヘンタイなど、画像が各クラスに該当する可能性がどれほど可能かを予測します。このブログ投稿で見つけることができるロジックの背後にあるロジックとStackの詳細があります。
APIは、エクスプレスルートからの画像を分類するための2つのアプローチを提供します。または、パースSDKまたはパースレストAPIのいずれかを使用してクラウドコード関数から直接。
Expressエンドポイントから分類します
curl http://localhost:1337/api/image/classify?url=https://nsfw-demo.sashido.io/sexy.png
nsfwimageclassifyクラウドコード関数から分類-REST APIの例。
curl -X POST
-H "X-Parse-Application-Id: myAppId"
-H "X-Parse-REST-API-Key: myRestApiKey"
--data-urlencode "{"url":"https://nsfw-demo.sashido.io/sexy.png"}"
http://localhost:1337/functions/nsfwImageClassify
Automation Engineの目的は、特定の画像の分類が、プロジェクトにとって安全として設定したパラメーターにどのように対応するかを確認することです。このプロセスは、Save Trigger後のParse Serverで自動化されます。
最初は、5つのNSFWクラスと値のどれが有毒な写真を含めることができ、どれが安全かを定義することが不可欠です。視聴者にとって邪魔なすべてのクラスは、節度の好みに含める必要があります。
アイデアとセットアップを説明するために、大人の出会い系アプリの基準を設定する必要があると想像しましょう。出会い系アプリと同様に、ユーザーはプロフィール写真を持ち、さまざまな写真をアップロードできます。写真の種類が主にニュートラルであるべきであると仮定することができます...そしておそらくいくつかのセクシーな写真も許可されるでしょう。そのため、他のすべてのクラスをモデレートの好みに追加します。次のようなもの:
{
"Sexy": { "min": 0.6, "max": 1 },
"Drawing": { "min": 0.5, "max": 0.8 },
"Porn": { "min": 0.4, "max": 0.8 },
"Hentai": { "min": 0.2, "max": 0.8 }
}
Automation Engineは、設定に設定されたmax
制限の上に分類されたすべての画像を自動拒否し、 min
値を下回るすべてを承認します。
プロジェクトのパラメーターを微調整する方法の詳細については、こちらの記事で見つけることができます。
モデレートの設定は、生産アプリケーションのモデレーションスコア構成パラメーターに保存されます。これにより、必要に応じてその場で変更できるためです。
Aftersaveトリガーがユーザーで生成されたコレクションにフックされ、新しくアップロードされた写真を自動的にチェックし、安全、削除、または節度のためにマークします。 AfterSafeには、画像のAPI分類が定義された緩和設定にどのように対応するかを一致させるためのロジックが含まれています。渡されたすべてのデータに基づいて、決定が下され、結果がデータベースに保存されます。
REST API予測と自動化エンジンの結果のきちんとした記録を保持するには、ユーザーが生成したコンテンツを保持するデータベースコレクションにいくつかの列を追加する必要があります。
次の列をuserimageCollectionに追加する必要があります
min
値を下回っている場合、それはisSafe - true
。deleted - true
。これらの写真は、ファイルストレージから自動的に削除されません。Aftersaveは自動的に火災が発生しますが、視聴者にとって画像が有毒である場合にManualyを確認する必要がある場合に備えて、追加のAPIエンドポイントを追加しました。
curl http://YOUR_PARSE_SERVER_URL/api/image/is_safe?url=https://nsfw-demo.sashido.io/sexy.png
最終的なタッチは、平易なReactJSベースの管理者アプリケーションです。シンプルなログイン/ログアウト機能があり、承認されたモデレーターのみがアクセスが許可されています。
moderationRequired=true
として自動化エンジンによってフラグが付けられた写真は、アプリに表示されます。デスクトップとモバイルに優しいユーザーインターフェイスの両方を確実に構築するようにしました。そのため、旅行中に携帯電話から簡単に画像を承認または拒否できます。
デモで画像をいじり回って自分でテストしてください!
node.js> = 10.2.1
マンゴDB
サーバーを解析します
リポジトリのクローン:
git clone https://github.com/SashiDo/content-moderation-application.git
cd content-moderation-application
Env.Exampleを.ENVファイルにコピーし、お気に入りの編集者でローカル環境の環境変数を設定します。
cp env.example .env
mongodb uriとファイルURLを配置します。アプリがSashidoでホストされている場合は、Sashidoプロジェクトの資格情報を使用できます。すべてのキーとURLをアプリのダッシュボード - >アプリ設定で見つけることができます。
nb! Adminアプリケーションにローカルに手動モデレートを必要とする画像をロードするには、実際のapp_idも配置する必要があります!
これはフル機能の例であるため、すべての依存関係がpackage.jsonに存在します。実行するだけです:
npm install
npm run dev
生産サーバーに次のparse.configsを設定します。
ModerationScoresオブジェクトはparse.configとして保存する必要があるため、設定はその場で更新できます。
モデレーションオプションオプションコンテンツモデレートの自動化を有効/無効にするブール型タイプ。
生産のために、 NSFWモデルURL 、 NSFWモデルの形状サイズ、および自動構成のキャッシュ用変数を設定する必要があります。
モデルURL | サイズ | 形状サイズ | 正確さ |
---|---|---|---|
https://ml.files-sashido.cloud/models/nsfw_inception_v3/ | 巨大な | 299 | 93% |
https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/90/ | 2.6 MB | 224 | 90% |
https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/93/ | 4.2 MB | 224 | 93% |
このプロジェクトに使用されるInception_V3モデルのRAM/CPU消費量は高いことに注意してください。 2つのMobileNetモデルははるかに軽量です。
TF_MODEL_URL = MODEL_URL
TF_MODEL_INPUT_SHAPE_SIZE = MODEL_SHAPE_SIZE
CONFIG_CACHE_MS = CONFIG_CAHE_IN_MILISECONDS
# Example
TF_MODEL_URL = " https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/93/ "
TF_MODEL_INPUT_SHAPE_SIZE = 224
CONFIG_CACHE_MS = 10000
SashidoアプリをGitHubで接続すると、次にコードを2つの簡単なコマンドで簡単に展開でき、リモートブランチを追加して変更をプッシュできます。
git remote add production [email protected]:parsegroundapps/<your-pg-app-your-app-repo>.git
git push -f production master
このセクションを見てくれてありがとう。クールなアイデアはあらゆるアイデアを受け入れているので、あなたが持っていて、共有する意思がある場合は、レポをフォークし、変更を適用してプルリクエストを開きます。 :)
Copyright©2020、CloudStrap AD。詳細については、ライセンスを参照してください。