Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Azure Cognitive Searchのコグニティブスキルを使った自動でフィルタ検索

皆さんこんにちは。@Ssk1029Takashiです。
気づけば今年もあとわずかになってきて、一年の早さを感じますね。

以前、GiNZA+Elasticsearchを使って固有表現抽出を使ったタグ検索のデモを作成しました。
acro-engineer.hatenablog.com

ただ、デモというのは何より早さが必要な場合もあります。
その場合だと、なるべくプログラミングを減らして、作成したいと思うこともあります。
今回は、Azure Cognitive Searchを使って、上記のような内容を、一切プログラミングせずに実現してみます。

Azure Cognitive Searchとは

Azure Cognitive Searchとは、名前の通りAzure上の検索サービスです。
特長としては、AIエンリッチメントという拡張機能を備えており、機械学習を活用したリッチな検索システムを簡単に実現できます。
docs.microsoft.com

AIエンリッチメントについて

この機能は、データソースから検索データを投入するときに、コグニティブスキルというAzure上の機械学習連携機能を使って、データから検索に使うデータを抽出できる拡張機能です。
例えば、エンティティ認識スキルを使えば、文書から自動で場所や人などを抽出して、データに持たせることができます。
f:id:acro-engineer:20201108211428p:plain
docs.microsoft.com

データ投入準備

Azure Cognitive SearchはAzure Blob StorageやCosmos DBなどのデータ連携がサポートされています。
詳細な連携先サービスは以下のURLのページに記載されています。
docs.microsoft.com

今回は、Blob Storageにファイルを配置して、その内容を検索できるようにします。
Blob Storageにこのブログの内容を張り付けたテキストファイルをアップロードします。
f:id:acro-engineer:20201109004757p:plain

検索データを投入する

検索データの連携は基本的なものならGUIから操作することが可能です。
Azure PortalのAzure Cognitive Searchの画面から「データのインポート」を選択することで、設定画面に移行します。
f:id:acro-engineer:20201109010824p:plain

ここから、以下の項目を設定することで、インデックスを作成することができます。

連携するBlob Storageのコンテナ

検索対象のファイルが配置してあるBlob Storageの場所を設定します。
f:id:acro-engineer:20201109013409p:plain

適用するコグニティブスキル

データ投入時に機械学習を使って抽出したい内容を選択します。
f:id:acro-engineer:20201109020246p:plain
組み込みのコグニティブスキルは以下のURLで一覧が示されています。
docs.microsoft.com

インデックスのフィールドと型

どのようなデータ構造でデータを投入するかを設定します。
各フィールドの名前・検索対象可能か・フィルター可能か・集計可能か・ソート可能かを設定します。
変更点としては、locationsなどのコグニティブスキルで抽出したフィールドは、フィルターで表示したいので、フィルター可能・ファセット可能に設定します。
f:id:acro-engineer:20201109233603p:plain

ここまで設定すれば、後はインデクサー名とスケジュールを設定すればデータのインポートが実行されます。

作成されたデータを見てみる

それでは投入された結果のデータを一部見てみましょう。
Searchサービスの「概要」から「検索エクスプローラー」を選択することで、簡易的にクエリを打ってデータを確認することができます。
f:id:acro-engineer:20201127010457p:plain

    {
            "@search.score": 1,
            "content": "皆さんこんにちは。\r\n@tereka114です。\r\n\r\n今週からCVPR2020がはじまりました。\r\n本記事では初日と2日目に参加したWorkshop/Turtorialを紹介します。\r\n\r\nf:id:acro-engineer:20200616135912p:plain\r\nCVPR2020\r\nCVPR2020の正式名称は「Computer Vision and Pattern Recognition」です。\r\n6月14日〜19日まで開催されています(時間はPDT)\r\nこれは、アメリカのコンピュータビジョンの国内学会で、毎年非常に盛り上がっています。\r\n\r\n今回、私は1年ぶりに参加しています。\r\nコロナウィルスの影響で現地開催ではなく、バーチャル開催になりました。\r\nPDT(日本から16時間遅れ)の時間とそれから12時間後に動画が放送されています。\r\n\r\n日本にいながら、私はシアトル時間で参加しています。\r\n普段の現地参加と異なり、太陽の時間がずれているので、体調を整えるのが難しい感覚です。\r\n\r\n\r\ncvpr2020.thecvf.com\r\n\r\n自動運転技術の基本を学べるチュートリアル\r\n初日はチュートリアル「All About Self-Driving」に参加しました。\r\n\r\nwww.allaboutselfdriving.com\r\n\r\nこのチュートリアルでは、Zoomのセミナー機能を利用し、既に収録されている動画が放映されます。\r\n途中でSlidoから質問を拾い、質疑応答を行っていました。\r\n\r\nこのチュートリアルは、自動運転技術に必要なことを包括的に紹介していました。\r\n例えば、ハードウェア(LiDAR、RADERなど)からソフトウェア(物体検出、予測、コントロール方法など)のそれぞれの種類と長短の説明がありました。\r\n私自身、自動運転技術の細かいハードウェアや方式にはあまり馴染みがないところもあったので、新しく得られた学びも多かったです。\r\n\r\nf:id:acro-engineer:20200615102403p:plain:w720\r\n2日目:深度推定と最適化\r\n2日目は午前と午後で異なるセッションに参加していました。\r\n\r\nLearning and understanding single image depth estimation in the wild\r\n公式ページで動画が公開されているので、それを見てました。\r\n質問は発表時間中にリアルタイムで受け付けていました。\r\n\r\n単眼深度推定のチュートリアルで、深度推定を行う上での仕組み(視差)、データセット、そして、各種アルゴリズムの紹介が行われていました。\r\n新しい分野でも包括的に学べて、資料も公開され、後で振り返られるのが良いところです。\r\n\r\n\r\nsites.google.com\r\n\r\nf:id:acro-engineer:20200616142257p:plain:w720\r\nFrom NAS to HPO: Automated Deep Learning\r\nこのチュートリアルはハイパーパラメータとアーキテクチャのチューニングの話です。\r\n機械学習には多くのハイパーパラメータが存在し、そのパラメータを調整する方法も知られています。\r\nまた、最近だと、ニューラルネットワークの構造を自動的に計算する方式もあるので、その件も紹介されていました。\r\n\r\nハンズオン付きで実装もあるので、いざ試してみたい!と思った時に便利そうなのはありがたいことです。\r\n\r\nhangzhang.org\r\n\r\nf:id:acro-engineer:20200616142437p:plain:w720\r\n最後に\r\n明日からCVPRのメインカンファレンスです。\r\n前年よりも論文数が多く、盛り上がっているなぁと感じています。\r\nぱっと見面白そうな論文も見られるので、きちんと読んで楽しみたいと思います!\n",
            "metadata_storage_path": "aHR0cHM6Ly9zZWFyY2hzb3VyY2UuYmxvYi5jb3JlLndpbmRvd3MubmV0L3NvdXJjZS1maWxlL0NWUFIyMDIwJUU1JThGJTgyJUU1JThBJUEwJUU4JUE4JTk4JUUzJTgwJThDJUU1JTg4JTlEJUUzJTgyJTgxJUUzJTgxJUE2JUUzJTgxJUFFJUUzJTgzJTkwJUUzJTgzJUJDJUUzJTgzJTgxJUUzJTgzJUEzJUUzJTgzJUFCJUU5JTk2JThCJUU1JTgyJUFDJUUzJTgwJTgxJUUzJTgzJTgxJUUzJTgzJUE1JUUzJTgzJUJDJUUzJTgzJTg4JUUzJTgzJUFBJUUzJTgyJUEyJUUzJTgzJUFCJUUzJTgxJThDJUU1JTg1JTg1JUU1JUFFJTlGJUUzJTgwJThEJTIwJTIzY3ZwcjIwMjAudHh00",
            "people": [],
            "organizations": [],
            "locations": [
                "アメリカ","日本","シアトル"
            ],
            "keyphrases": [
                "まし","チュートリアル","acro-engineer","plain","現地参加","紹介","自動運転技術","w720","シアトル時間","動画","CVPR2020","ハイパーパラメータ","現地開催","単眼深度推定","発表時間中","質問","初日","ハードウェア","方式","バーチャル開催","こと","公開","PDT","日本","ところ","コントロール方法","楽しみたい","論文数","Automated Deep Learning","Learning and understanding single image depth estimation in the wild","Computer Vision and Pattern Recognition","リアルタイム","From NAS to HPO","物体検出","All About Self-Driving","国内学会","利用","データセット","ソフトウェア","予測","仕組み","名称","アーキテクチャ","受け付け","20200615102403p","20200616142257p","20200616142437p","コンピュータビジョン","セミナー機能","質疑応答","アメリカ","視差","構造","拾い","RADER","各種アルゴリズム","Zoom","コロナウィルス","影響","チューニング","存在","太陽","基本","20200616135912p","毎年","種類","計算","LiDAR","Slido","収録","ずれ","調整","馴染み","Workshop","Turtorial","自身","ニューラルネットワーク","機械学習","新しく得","学び","ハンズオン付き","実装","体調","長短","説明","思い","本記事","ページ","放送","最適化","セッション","カンファレンス","感じ","感覚","資料","はじまり","放映","分野","皆さん","tereka114","最後"
            ],
            "language": "ja"
        }

これを見ると、locationsで国名などを拾えていることがわかります。

キーフレーズは、「チュートリアル」や「CVPR2020」などの重要単語は拾えていますが、「こと」や「はじまり」などの意味のない単語も拾ってしまっているようです。
この辺は今後の精度改善に期待ですね。

デモアプリを作成する

Azure Cognitive Searchでは、GUI操作だけで検索画面を見るためのデモアプリを作成することができます。
Cognitive Searchの概要の画面から、「インデックス」→「デモアプリの作成」を選択することで、作成画面に移動します。
以下の項目を表示したい内容に沿って、設定します
1. 検索結果に表示する内容
f:id:acro-engineer:20201127012818p:plain
2. フィルターに表示する内容
ここでコグニティブスキルで抽出したフィールドを設定します。
f:id:acro-engineer:20201109234119p:plain
3. ドロップダウンで表示する内容
f:id:acro-engineer:20201109234208p:plain

これらを設定すると、HTMLファイルをダウンロードすることができます。
ブラウザで表示すると、簡易的なデモアプリを表示することができます。
f:id:acro-engineer:20201127012300p:plain

この画面で、キーワード検索・フィルターでの絞り込みが可能です。

ここまでで、一切プログラミングをすることなく、フィルターで絞り込みができるデモアプリが作成できました。
ほぼGUIの操作のみで、作成できたので、非常に簡単でした。

まとめ

今回はAzure Cognitive Searchの機能を使いながら、簡単に機械学習によるテキスト抽出を使ったタグ検索デモを作成しました。
サービスの機能を使うことで、一切プログラミングすることなくデモまで作成することができました。
もちろん、あくまでデモは簡易的な画面なので、画面開発は必要かと思いますが、検索結果のイメージをなるべく早く見せたいなどのケースでは重宝しそうです。
皆さんもぜひ使ってみてはいかがでしょうか?

それではまた。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【データ分析】
Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com