次の方法で共有


コンテンツ モデレートのリファレンス アーキテクチャ

オンラインでのプレイ中、すべてのプレイヤーが適切な行動をとるとは限らないため、プレイヤー間でのやりとりを歓迎的で礼儀にかなったものにし、楽しいエクスペリエンスを維持するためには、モデレートが必要になります。 コミュニティによって生成された不適切なメッセージ コンテンツを検出し、そのコンテンツを削除したうえでパブリックビューに表示することで、この目標を達成することができます。

この記事では、GitHub のこのサンプルで使用されているアーキテクチャについて説明します。 このリファレンス アーキテクチャのコードはガイダンスの例にすぎず、運用環境で使用するにはコードの最適化が必要な場合があることに注意してください。

アーキテクチャの図

Cコンテンツ モデレート アーキテクチャ

アーキテクチャのサービス

  • Content Moderator - 有害である、リスクがある、または望ましくない可能性がある内容のテキスト、画像、ビデオ コンテンツをチェックします。 このような内容が見つかると、コンテンツに適切なラベル (フラグ) が適用されます。
  • Azure Traffic Manager - 複数の地域へとグローバルにスケーリングする場合、このサービスでは、DNS 経由で接続する最も近い地域が選択されます。
  • Event Hubs - 多数のイベント (この場合はチャットの文字列) の受信と処理を正しい順序でリアルタイムに行うためのサービスです。構成や管理のオーバーヘッドはほとんど生じません。
  • Azure Functions - コード (この場合は、さまざまなコグニティブ サービスを呼び出すコード) を、オンデマンドで実行するためのサーバーレス コンピューティング サービスです。

アーキテクチャの考慮事項

作成する必要がある Event Hub 名前空間は 1 つだけです。この名前空間に、メッセージの送信用と受信用の 2 つの Event Hub を含めることになります。

Azure Content Moderator では、不適切発言 (マスクされているかどうかにかかわらず) と PII が検出されます。 複数のコンテンツ タイプがサポートされています: テキスト画像および動画。 このアーキテクチャで扱われるコンテンツ タイプはテキストのみです。

デプロイ テンプレート

プロジェクトを Azure サブスクリプションにデプロイするには、次のボタンをクリックします。

この操作を実行すると、Azure サブスクリプションに対する azuredeploy.json ARM テンプレート ファイルのテンプレート デプロイがトリガーされ、必要な Azure リソースが作成されます。 これにより、Azure アカウントの料金が発生する場合があります。

Azure サービスの名前付け規則と制限事項をまとめたセクションが含まれる一般的なガイドライン ドキュメントを参照してください。

注意

ARM テンプレートの動作に興味がある場合は、このリファレンス アーキテクチャで利用されている各サービスの Azure Resource Manager テンプレートのドキュメントを参照してください。

Azure Cognitive Services には 2 種類のサブスクリプションがあります。 1 つ目は、単一サービスのサブスクリプションです (Computer Vision や Speech Servicesなど)。 単一サービスのサブスクリプションは、そのサービスのみに限定されます。 2 つ目の種類は、マルチサービス サブスクリプションです。 これは、1 つのサブスクリプションで複数の Azure Cognitive Services を利用できるようにするものです。 このオプションでは、課金も統合されます。 このリファレンス アーキテクチャでは、機能を可能な限りモジュール化するため、コグニティブ サービスがそれぞれ 1 つのサービスとしてセットアップされます。

最後に、次の Function アプリケーション設定を追加して、サンプル プロジェクトが Azure サービスに接続できるようにします。

  • EVENTHUB_CONNECTION_STRING = 作成された Azure Event Hub 名前空間への接続文字列
  • CONTENTMODERATOR_KEY - 作成された Azure Content Moderator Cognitive Service にアクセスするためのアクセス キー

ヒント

Azure Functions をローカル環境で実行するには、local.settings.json ファイルをこれらの同じアプリ設定で更新します。

ステップ バイ ステップの手順

  1. プレイヤーのデバイスで、Azure Traffic Manager により決定された特定の地域のチャット サーバーに対し、暗号化された永続的な接続が開かれます。 チャット サーバーでは、プレイヤーとの接続を維持するためのプロセスと、いくつかの基本的なメタデータが作成されます。
  2. 以前に作成されたセキュアな接続を介して、プレイヤーのクライアントからチャット サーバーにチャット メッセージが送信されます。 チャット サーバーにあるプレイヤーのプロセスによって、メッセージが受信され、復号化されて解析されます。
  3. 標準的な検証が実行され、メッセージの順序を維持したまま、チャット サーバーによって Azure Event Hubs サービスが呼び出されます。
  4. Azure Event Hub は、Azure Function の入力トリガーとして機能します。
  5. Azure Function によって Azure Content Moderator サービスが呼び出されます。このサービスにより、プレイヤーから送信されたメッセージがレビューされ、結果が返されます。
  6. もう 1 つの Azure Event Hub が、Azure Function 用の出力として設定されます。
  7. チャット サーバーで、Azure Event Hub からのメッセージが受信されます。
  8. 必要な場合、チャット サーバーは、元のメッセージと Azure Content Moderator からの結果の両方を、Azure Data Lake Storage のような永続的ストレージに保存します。
  9. メッセージが保存されたら、必要に応じて、それらを分析用に Azure Data Lake Analytics に保存することもできます。
  10. その後、Azure Content Moderator サービスの結果が、チャット サーバーにある受信側プレイヤーのプロセスに送信されます。 このプロセスは、メッセージに対してさらなる検証を実行し、メッセージをシリアル化したうえで、セキュアな接続を介して受信側プレイヤーのデバイスにメッセージを送信します。

Azure Event Hubs

イベントを複数のプログラミング言語で Event Hub に送信するための簡単な実装については、こちらのクイックスタートを参照してください。 こちらでは、いくつかの追加的なサンプルが提供されています。

Azure Event Hub によって別の Azure Event Hub へとトリガーされる関数

Event Hubs トリガー関数がトリガーされる際には、それをトリガーするメッセージが文字列として関数に渡されます。 イベント ストリームにイベントを書き込むには、Event Hubs 出力バインディングを使用します。

[return: EventHub("ehigce-output", Connection = "EventHubConnectionAppSetting")]
    public static string Run([EventHubTrigger("ehigce-input", Connection = "EventHubConnectionAppSetting")] string chatString, ILogger log)

Cognitive Services を呼び出す際に発生する 401 アクセス拒否エラーの一般的な原因と解決策を確認してください。

セキュリティに関する考慮事項

Event Hub や Cognitive Services の接続文字列を Function のソースにハードコードすることはしないでください。 代わりに、少なくとも、関数アプリの設定を利用するか、より強力なセキュリティのためには、代わりに Key Vault を使用します。 キー コンテナーを作成する方法、関数でマネージド サービス ID を使用する方法、および最後に関数から Key Vault に格納されているシークレットを読み取る方法について説明されているチュートリアルがあります。

Event Hub の認証とセキュリティ モデルの概要に関する記事を確認し、その内容を実践して、チャット サーバーが Event Hub と通信できるようにしてください。

スケーリング

このアーキテクチャでは、次の 2 つの点がボトルネックになる可能性があるため、それらについて計画を立てる必要があります。

  1. Cognitive Services は柔軟にスケーリングできますが、既定では調整されています。 容量を増やすために大規模な環境での使用を計画している場合は、Azure サポートまでお問い合わせください。
  2. Azure Event Hub の応答を受信するチャット サーバーで、スケーリングが必要になります。 需要に対応できる十分な数の仮想マシンをスピンアップするようにしてください。

代替手段

Apache Spark ベースのプラットフォームを使用して分析データを収集する場合は、Azure Cache for RedisAzure Databricks を利用することを検討してください。

その他のリソースとサンプル

Azure Event Hubs SDK for Unity: これはサンドボックス プロジェクトです。 この記事の内容はサポートされていないため、古いか、動作しない可能性があります。

価格設定

Azure サブスクリプションをお持ちでない場合は、無料アカウント を作成して 12 か月間の無料サービスの利用を開始できます。 それらのサービスの制限を超えない限り、Azure 無料アカウントで無償で提供されているサービスに対して料金が発生することはありません。 Azure Portal または使用状況ファイルを通じて使用状況を確認する方法について説明します。

これらのリファレンス アーキテクチャの実行中に使用される Azure サービスのコストはユーザーが負担します。 その合計は使用状況によって異なります。 リファレンス アーキテクチャで使用されていた各サービスの価格は、Web ページで確認ください。

また、Azure の料金計算ツールを使用して、使用する予定の Azure サービスのコストを構成および見積もることもできます。