画像と自然言語処理を使用して、ほぼリアルタイムの分析でニュース フィードを分析する

Azure Cosmos DB
Azure Functions
Azure Service Bus
Azure Translator Text
Azure Face

このサンプル シナリオでは、パブリック RSS ニュース フィードから到着する大量のドキュメントの取り込みとほぼリアルタイムの分析のパイプラインについて説明します。 ここでは、Azure Cognitive Services を使用して、テキスト翻訳、顔認識、センチメント検出に基づいた有益な分析情報を提供します。 特に、画像と自然言語の処理手順は、Azure Service Bus に基づくメッセージング パイプラインで相互に接続されています。 パイプラインの出力は、分析情報や解析情報を含む通知です。

アーキテクチャ

アーキテクチャ図: 画像とテキストの処理を使用して RSS フィードを取り込んで分析し、通知を送信します。このアーキテクチャの Visio ファイルをダウンロードします。

データフロー

このソリューションのデータ フローは次のとおりです。

  1. RSS ニュース フィードは、ドキュメントや記事からデータを取得するジェネレーターとして機能します。 たとえば、記事の場合、データには通常、ニュース項目のタイトルと元の本文の概要が含まれており、時にはイメージが含まれていることもあります。

  2. ジェネレーターまたはインジェスト プロセスにより、記事および関連するイメージが Azure Cosmos DB のコレクションに挿入されます。

  3. 通知により、Azure Functions で Ingest 関数がトリガーされます。この関数は、記事のテキストを Azure Cosmos DB に格納し、記事のイメージ (ある場合) を Azure Blob Storage に格納します。 それから、記事が次のキューに渡されます。

  4. キュー イベントによって Translate 関数がトリガーされます。 Azure Cognitive Services の Translate Text API を使用して言語が検出され、必要に応じて翻訳が行われて、本文とタイトルからセンチメント、キー フレーズ、およびエンティティが収集されます。 それから、記事は次のキューに渡されます。

  5. キューに入れられた記事から、Detect 関数がトリガーされます。 Computer Vision サービスを使用して関連したイメージでオブジェクト、ランドマーク、および書き込まれたテキストが検出されて、記事が次のキューに渡されます。

  6. キューに入れられた記事から、face 関数がトリガーされます。 Azure Face API サービスを使用して関連したイメージで性別と年齢について顔の検出が行われて、記事が次のキューに渡されます。

  7. すべての関数が完了すると、Notify 関数がトリガーされます。 これは、記事の処理されたレコードを読み込んで、必要な結果がないかスキャンします。 見つかるとコンテンツにフラグが設定され、選択したシステムに通知が送信されます。

この関数は、それぞれの処理手順で Azure Cosmos DB に結果を書き込みます。 最終的に、希望どおりにデータを使用することができます。 たとえば、それを使用して、ビジネス プロセスを強化したり、新しい顧客を見つけたり、顧客満足度の問題を識別したりすることができます。

Components

この例では、次の Azure コンポーネントの一覧が使用されます。

  • Azure Storage は、記事に関連付けられた生のイメージ ファイルとビデオ ファイルを保持するために使用されます。 Azure App Service によりセカンダリ ストレージ アカウントが作成され、Azure Function のコードとログをホストするために使用されます。

  • Azure Cosmos DB は、記事のテキスト、イメージ、およびビデオの追跡情報を保持します。 Cognitive Services の手順の結果もここに格納されます。

  • Azure Functions は、キュー メッセージに応答して着信コンテンツを変換するために使用される関数コードを実行します。 Azure App Service は、関数コードをホストして、レコードを順次処理します。 このシナリオには、次の 5 つの関数が含まれています。取り込み、変換、オブジェクトの検出、顔、および通知。

  • Azure Service Bus は、関数によって使用される Azure Service Bus キューをホストします。

  • Azure Cognitive Services は、Computer Vision サービス、Face API、および Translate Text 機械翻訳サービスの実装に基づくパイプラインの AI を提供します。

  • Azure Application Insights は、問題を診断してアプリケーションの機能を理解するのに役立つ分析を提供します。

代替

  • "キューの通知" と Azure Functions に基づくパターンを使用する代わりに、このデータ フローに対して "トピックとサブスクリプション" パターンを使用できます。 この例で行われたシリアル処理とは対照的に、Azure Service Bus トピックを使用して、記事のさまざまな部分を並行して処理できます。 詳細については、キューとトピックを比較してください。

  • Azure Logic Apps を使用して、関数コードを実装し、Redlock アルゴリズムによって提供されるようなレコード レベルのロック (Azure Cosmos DB で部分ドキュメントの更新がサポートされるまでは、並列処理で必要) を実装します。 詳細については、「Functions と Logic Apps の比較」を参照してください。

  • 既存の Azure サービスではなく、カスタマイズされた AI コンポーネントを使用して、このアーキテクチャを実装します。 たとえば、この例で収集される一般的な人々の数、性別、および年齢のデータとは対照的に、イメージで特定の人々を検出するカスタマイズしたモデルを使用してパイプラインを拡張します。 このアーキテクチャで、カスタマイズされた機械学習や AI のモデルを使用するには、Azure Functions から呼び出せるように RESTful エンドポイントとしてモデルを構築します。

  • RSS フィードではなく別の入力メカニズムを使用します。 複数のジェネレーターまたはインジェスト プロセスを使用して Azure Cosmos DB と Azure Storage へのデータ フィードを行います。

  • Azure Search の AI 機能である Azure Cognitive Search を使用すると、画像、BLOB、他の非構造化データ ソースからテキストを抽出することもできます。

シナリオの詳細

このシナリオに含まれるのは、英語ロシア語ドイツ語のニュース フィードですが、このシナリオは他の RSS フィードおよび他の言語にも容易に拡張できます。 デプロイを容易にするために、データの収集、処理、および分析は、すべて Azure サービスに基づいて行われます。

考えられるユース ケース

このシナリオは、RSS フィードの処理に基づいて作成されていますが、次のことを実行する必要があるすべてのドキュメント、Web サイト、または記事に関係があります。

  • テキストを任意の言語に翻訳する。
  • デジタル コンテンツでキー フレーズ、エンティティ、およびユーザーのセンチメントを見つける。
  • ディジタル記事に関連したイメージでオブジェクト、テキスト、およびランドマークを検出する。
  • デジタル コンテンツに関連したイメージで性別と年齢によって人々を検出する。

考慮事項

これらの考慮事項は、ワークロードの品質向上に使用できる一連の基本原則である Azure Well-Architected Framework の要素を組み込んでいます。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。

簡単にするために、このサンプル シナリオでは、Azure Cognitive Services で使用可能な API およびサービスの一部のみを使用しています。 たとえば、イメージのテキストは、Text Analytics API を使用して分析できます。 このシナリオのターゲット言語は、英語と想定されていますが、入力を任意のサポートされている言語に変更できます。

スケーラビリティ

Azure Functions のスケーリングは、使用されているホスティング プランによって異なります。 このソリューションでは、必要に応じてコンピューティング能力が自動的に関数に割り振られる従量課金プランが想定されています。 課金されるのは、関数が実行されているときのみになります。 もう 1 つのオプションは、専用プランを使用することです。これにより、複数のレベル間でスケーリングを行って、さまざまなリソース量を割り振ることができます。

Azure Cosmos DB の場合、鍵は、十分な数のパーティション キーにワークロードをほぼ均等に分散することです。 コンテナーが格納できる合計データ量やコンテナーがサポートできるスループットの合計量には制限はありません。

管理とログ記録

このソリューションは、Application Insights を使用してパフォーマンスとログ記録の情報を収集します。 デプロイにより、このデプロイに必要なその他のサービスと同じリソース グループ内に Application Insights のインスタンスが作成されます。

ソリューションによって生成されたログを表示するには、以下の手順を実行します。

  1. Azure portal に移動し、デプロイのために作成されたリソース グループに移動します。

  2. Application Insights インスタンスを選択します。

  3. [Application Insights] セクションから [調査\検索] に移動して、データを検索します。

セキュリティ

セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を提供します。 詳細については、「セキュリティの重要な要素の概要」を参照してください。

Azure Cosmos DB は、Microsoft で提供されている C# SDK を使用して、セキュリティで保護された接続と共有アクセス署名を使用します。 外部に面している攻撃対象は他にはありません。 Azure Cosmos DB のセキュリティのベスト プラクティスについて確認します。

コスト最適化

コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳しくは、コスト最適化の柱の概要に関する記事をご覧ください。

Azure Cosmos DB はパワフルですが、このデプロイで最も高いコストが発生します。 提供されている Azure Functions コードをリファクタリングすることにより、別のストレージ ソリューションを使用できます。

Azure Functions の価格は、実行されるプランによって異なります。

このシナリオのデプロイ

Note

既存の Azure アカウントが必要です。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

このシナリオのすべてのコードは、GitHub リポジトリから入手できます。 このリポジトリには、このデモのパイプラインにデータをフィードするジェネレーター アプリケーションの構築に使用されるソース コードが含まれています。

次のステップ

追加の分析アーキテクチャ: