DX station

画像も検索できる! Azure Cognitive Search を活用して簡単にファイル検索の仕組みを作ろう

小松﨑 一成

こんにちは。データサイエンスチームの小松﨑です。

本記事ではアプリケーションに手軽にファイル検索の仕組みを導入できる Microsoft のサービスである Azure Cognitive Search についてご紹介します。会社でもプライベートでも、活動する中でテキストや写真など新しいファイルが次々に増えていきますね。生み出されたファイルを活用するためには欲しいものを探す行為が必須になります。社内での利用にしても顧客に提供するサービスにしても、アプリケーションに検索の機能を導入したい機会は多いと思います。 Azure Cognitive Search を活用すれば Azure が提供する様々なストレージに格納されたファイルを検索する仕組みを簡単に作ることができます。さらに補助機能として AI の機能を利用できるサービスである Azure Cognitive Services を利用することで、画像ファイル等を分析してそれらを説明するテキストを生成し、本来言葉での検索が困難だった画像ファイル等も検索対象とすることもできます。本記事では Azure Cognitive Search を実際に使用して Blobストレージ内のファイルを検索できるようにするまでの手順について説明します。



「CogEra」はこちら

「機械学習導入支援サービス」はこちら


Azure Cognitive Search とは

Azure Cognitive Search は高度な検索機能をアプリケーションに簡単に搭載できるようにするためのサービスです。 Azure Blob ストレージ等の Microsoft が提供する様々なクラウドストレージ内に格納されているファイルを検索対象とすることができます。付加機能として Azure のAIサービスである Azure Cognitive Services を使用することで、例えば画像を事前に分析して含まれる内容をテキスト化し、検索対象に含めることも可能です。

 インデックスとは

Azure Cognitive Search の仕組みとして、まず重要な概念であるインデックスについて概要を説明します。 Azure Cognitive Search は検索時に指定のストレージ内を直接検索するのではなく、事前に検索対象としたいストレージに含まれるファイル群を分析してインデックスと呼ばれるものを作成しておき、インデックス内を検索します。インデックス内で1つの検索対象のファイルは json ファイルのように様々なキーと値のペアとして格納されます。例えば以降の章で説明するようにデフォルトの設定で Azure Cognitive Search の設定を進めていく場合、 pdf やエクセル等のテキストファイルに含まれるテキスト情報は content という名前のキーの値に格納されます。上述のように Azure Cognitive Services の機能で事前に画像を分析している場合、画像に含まれるものや概念について説明する単語等(例えば、猫、屋内、座っている、等)が imageTags という名前のキーの値に格納されます。 検索時はこのように事前に作成されたインデックス内を検索する仕組みになっています。

 関連度スコアについて

Azure Cognitive Search は検索クエリに対する関連度を示すスコアを検索結果に含めてくれます。スコアを利用することで最も関連度の高い検索結果のファイルを取得したり、関連度の高い上位3つのファイル名を表示する、等の様々な制御を実施することができます。

【参照 : Azure Cognitive Search】
https://azure.microsoft.com/ja-jp/services/search/



「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


ファイルの検索機能を作ってみよう

本章では Azure Cognitive Search を使用して検索システムを作成する手順について説明します。作業を始める前に検索対象とするファイルの用意をお願いします。お手持ちの資料でも良いですし、ウェブで見つけたものでもかまいません。 pdf やエクセル等のテキストデータと共に jpg や png 等の画像ファイルも用意してみてください。なおここでは Azure Cognitive Search を無料で試すことができる範囲で説明しますので、全ファイルの総データ量は50MB以下、Azure Cognitive Search の基本機能とは別に Azure Cognitive Services を使用する必要がある画像等のファイルは20個以下となるようにしてください。ここからは Azure ポータル上での作業について説明していきます。

【参照 : Azure Cognitive Search の価格】
https://azure.microsoft.com/ja-jp/pricing/details/search/

 ストレージの作成とファイルの格納

まずは検索対象とするファイルを格納するためのストレージを作成します。具体的には Azure のリソースであるストレージ アカウントを作成します。

Azure ポータルにアクセスし「リソースの作成」を選択します。

【参照 : Azure ポータル】
https://portal.azure.com/

      

検索欄で「ストレージ」等と検索してストレージ アカウントを見つけ「作成」ボタンをクリックします。

               

以下を参考にストレージ アカウント作成時の必要事項を設定し、「確認および作成」をクリックします。

  • サブスクリプション:リソースを構築できる任意のサブスクリプション
  • リソースグループ:新規作成(既存のリソースグループでも可)
  • ストレージ アカウント名:任意の名前
  • 地域:東日本
  • パフォーマンス:Standard
  • 冗長性:geo冗長ストレージ(GRS)

これでストレージ アカウントのリソースが構築できました。次にストレージ アカウント内にファイルを格納するための Blob コンテナーを作成します。作成したストレージ アカウントに移動し「Blob service」をクリックします。

         

「コンテナー」をクリックし、右に出てくる「新しいコンテナー」に任意の名前を入力し「作成」ボタンをクリックします。

作成したコンテナーに移動し「アップロード」ボタンをクリックします。右に出てくる「BLOB のアップロード」の青色のボタンをクリックし、事前に用意したローカルに保存されている検索対象とするファイルを選択します。 Ctrl ボタンを押しながら複数のファイルを選択することで複数のファイルを一括でアップロードすることができます。

これで検索対象とするファイルをストレージに格納する作業は完了となります。

 Azure Cognitive Search の構築

次に検索エンジン機能である Azure Cognitive Search リソースを作成し環境を整備していきます。ストレージの作成で説明した手順と同様に「リソースの作成」から Azure Cognitive Search を検索し「作成」ボタンをクリックします。

以下を参考に必要事項を設定し「確認および作成」をクリックします。価格はFreeを選択し無料の範囲で検証します。

  • サブスクリプション:上記作成したストレージ アカウントと同じサブスクリプション
  • リソースグループ:上記作成したストレージ アカウントと同じリソースグループ
  • ストレージ アカウント名:任意の名前
  • 地域:上記作成したストレージ アカウントと同じ地域
  • 価格レベル:Free

Azure Cognitive Searchのリソースが構築できました。次に上記作成した Blob コンテナーを検索対象とするように紐づけ処理を進めていきます。作成した Azure Cognitive Search リソースに移動し「データのインポート」をクリックし「Azure BLOB ストレージ」を選択します。

「Azure BLOB ストレージ」を選択します。

表示される設定画面で「データソース名」に任意の名前を入力します。「接続文字列」欄にある「既存の接続を選択します」をクリックし、検索対象ファイルが格納してあるBlob コンテナーを選択します。この作業により「接続文字列」と「コンテナー名」が自動で設定されます。設定を終えたら「コグニティブスキルを追加します」をクリックします。ここでは画像等のファイルをテキストで検索できるようにするための付加機能として Azure Cognitive Services の使用に関する設定を行います。

 

表示された画面の「Cognitive Services リソース名」で「無料(制限付きのエンリッチメント)」を選択します。今回はスコープ外ですが、無料枠を超える数の画像ファイルを使用したい場合は別途 Cognitive Services リソースを準備しここで紐づけを行うことになります。

   

同じ画面で少し下の「エンリッチメントの追加」タブを開き「OCRを有効にし、すべてのテキストを merged_content フィールドにマージする」にチェックを入れます。これにより画像ファイルに対してOCRが適用され、抽出されたテキスト情報がインデックスの merged_content という名前のキーの値に格納されます。また、デフォルトではエクセル等のファイルから抽出されたテキスト情報は content という名前のキーの値に格納されますが、OCRを有効にすることで merged_content に格納されるようになります。「スキルセット名」に任意の名前を入力しておきます。

       

さらに画面の少し下の方にある「画像の認知技術」で「画像からタグを生成する」にチェックを入れます。これにより画像に含まれる物体等の情報がインデックス内の imageTags キーの値に格納されるようになります。他にも、例えば言語系では「組織名を抽出」や「言語の検出」、画像系では「有名人の識別」等、様々な機能があることをご覧いただけると思います。興味があるものにはチェックを入れて後ほど結果を確認してみてください。目的の機能を選択し終えたら「対象インデックスをカスタマイズします」をクリックします。

「インデックス名」に任意の名前を入力します。以下画像ではデフォルトでチェックが付けられているもののみ抜粋して表示していますが、「フィールド名」がこの後作成されるインデックス内のキーになります。「検索可能」にチェックが付いているフィールドに関してインデックスでの検索が可能になります。アナライザーを「日本語 - Microsoft」に変更しておきます。設定を終えたら「インデクサーの作成」をクリックします。インデクサーはインデックスを作成するためのオブジェクトになります。

「名前」に任意の名前を設定し、スケジュールは1度を選択します。今回は対象外ですが、日常的に活用するなどにより検索対象とするストレージに格納されるファイルが変化していく場合などは、スケジュールを毎日等に設定することで、インデックスを定期的に最新に保つことができます。最後に「送信」を押すことでインデクサーの作成は完了となります。

        

ここまでの作業でインデックスを作成するためのオブジェクトであるインデクサーの作成は完了しましたが、画像を日本語で検索できるようにするために少し設定の変更が必要になります。「スキルセット」タブの下にある上記作成したスキルセットにアクセスします。

         

「スキルセットの定義(JSON)」内で defaultLanguageCode という名前のキーを探し、その値をデフォルト値の “en” から “ja” に変更します。これにより、付加機能として Azure Cognitive Services を利用した OCR の結果や、画像認識結果として生成されるタグの名前が日本語で出力されるようになります。これまでの手順通りに作業を実施してきた場合は OCR とタグ生成機能の2つのスキルに対応して2ヶ所の defaultLanguageCode の値を変更しますが、分析機能を追加している場合は変更すべき箇所が増えていると思いますのでご注意ください。変更が完了したら「保存」をクリックします。

         

それではいよいよインデクサーを実行してインデックスを作成してみましょう。「インデクサー」タブの下にある上記作成したインデクサーにアクセスします。

         

「リセット」を押してスキルセットの変更を反映させた後に「実行」を押してインデックスを作成します。

     

作業が正常に終了すると「インデックス」タブの下にインデックスが作成されます。作成されたインデックスにアクセスして検索を実行することもできますが、ここでは Azure Cognitive Search が用意している「検索エクスプローラー」を使用してみましょう。

          

ホーム画面にある「検索エクスプローラー」をクリックします。

             

「インデックス」欄では作成したインデックスを選択します。「 API バージョン」はデフォルトとします。「クエリ文字列」欄に文字を入力して「検索」を押してみると結果が表示されます。今回作成してきた検索システムは正常に動作しているようです。 "@search.score" というキーに設定されている値が関連度スコアとなっており、複数のファイルが検索結果に含まれる場合、デフォルトでは関連度スコアの高い順に表示されます。

     

画像の検索についてもご紹介します。ここまでの作業で以下の画像を検索対象のストレージに格納してインデックスを作成しました。

           

前述のように画像認識の結果生成されるタグは imageTags という名前のキーの値に格納されます。そのため、検索対象を imageTags 内に限定して検索してみます。「クエリ文字列」欄に search=花&searchFields=imageTags と入力して検索します。imageTags フィールド内で花を検索するという意味になります。結果は下図のようになり、画像の認識結果から作成されたタグが格納されていることが確認できます。本記事では説明しませんが、検索結果にはファイルの格納先の情報も含まれるため、別途開発は必要となりますが検索結果のファイルを取得する仕組みも作ることができます。

    


「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


おわりに

本記事では Azure Cognitive Search について説明し、実際に検索の仕組みの作り方と検索結果について説明しました。画像を検索対象とすることも含め、非常に手軽に作成できることが伝われば幸いです。

Microsoft はクラウドサービスとして他にも様々な機能を提供しており、やりたいことを実現するための手段として活用できることは多いと思います。何かに取り組む時には、使えるサービスや技術がないか一度調べてみることをお勧めします。当社でも多数の紹介記事を公開しておりますのでぜひ参考にしてください。

また当社では AI や機械学習を活用するための支援も行っております。持っているデータを活用したい、AI を使ってみたいけど何をすればよいかわからない、やりたいことのイメージはあるけれどどのようなデータを取得すればよいか判断できないなど、データ活用に関することであればまず一度ご相談ください。一緒に何をするべきか検討するところからサポート致します。データは種類も様々で解決したい課題も様々ですが、イメージの一助として AI が活用できる可能性のあるケースを以下に挙げてみます。

 AI が活用できる可能性のあるケースの例
  • 製品の画像データを分析して異常を検知したい
  • カメラの画像や動画を分析して監視作業を省力化したい
  • 画像や動画内の特定のもの(人/製品/異常箇所など)を検出したい
  • 人数をカウントしたい
  • 画像を自動で加工したい
  • コメントやアンケート結果を分析したい
  • ドキュメントを自動で分類したい
  • センサーデータを分析して製品の異常を検知したい
  • センサーデータを分析して機器制御を自動化したい
  • サイト訪問者の行動を分析したい

上記は一例となりますがデータ活用に関して何かしらの課題を感じておりましたら、当社までお気軽にお問い合わせください。


当社の AI 関連サービスリンク集

「CogEra」はこちら
「ML Connect」はこちら
「機械学習導入支援サービス」はこちら

お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録