【Azure Cognitive Searchで始めるTwitter分析】Part1. 検索インデックスの作成

構成

全部で3部構成にする予定です。

Part.1
検索インデックスの作成 (今回)

Port.2
デモアプリの作成(次回)

Port.3
Power BI 1 レポートの作成(次々回)

はじめに

News ZERO さんがTwitterで新型コロナ「陽性」の経験談を募集されており、使われたハッシュタグはトレンド入りしました。

そこで今回は、「#感染したから伝えたい」を含むツイートを約500件取得し、Azure Cognitive Search で人物・感情・キーフレーズなどを抽出 → デモアプリを作成→Power BI テンプレートでワードクラウドの表示をさせてみました。

↓ こんな感じのワードクラウドが簡単に得られます。
image.png
image.png

Azure Cognitive Search とは

Azure Cognitive Search (旧称 Azure Search)は、Web、モバイル、エンタープライズの各アプリケーション内のプライベートな異種コンテンツに対する豊富な検索機能を提供する、クラウド検索サービスです。
公式ドキュメント:https://docs.microsoft.com/ja-jp/azure/search/search-what-is-azure-search

今回はテキストデータのみ使いますが、Cognitive Searchでは画像、映像、音声などの非構造化データも検索可能です。
また、Cognitive ServicesやPower BIとの連携も容易です。

手順

ざっくりと以下の5つの手順でやっていきます。

  1. Twitter API を使用してデータを用意する
  2. BLOB ストレージにツイートデータアップロード
  3. Cognitive Search で検索インデックスの作成
  4. デモアプリの作成(Part2. デモアプリの作成 で説明します。)
  5. Power BI テンプレートでワードクラウド表示(Part3. Power BI レポートの作成 で説明します。)

1. Twitter API を使用してデータを用意する

1-1. Twitter APIの利用申請→APIトークン取得

Developerサイトにて英語で申請→うまくいけば1日で使えるようになります。
申請内容が不十分だと、メールが来て改めてAPIの使用用途を聞かれます。

APIの申請方法、APIキーの取得方法については、以下リンクが参考になるかと思います。

参考リンク:https://www.itti.jp/web-direction/how-to-apply-for-twitter-api/

1-2. Pythonで 「#感染したから伝えたい」 を含むツイートを収集

以下の記事を参考にし、1月13日~1月21日までの 「#感染したから伝えたい」 のハッシュタグを含むツイートを約500件集め、CSVファイルに出力しました。

参考リンク:https://qiita.com/nomotom/items/de1bc00ef350edc21624

2. BLOB ストレージにCSVファイルをアップロード

Azure Blob Storageでストレージアカウントを作成→コンテナー作成→CSVファイルのアップロードをします。

まずストレージアカウントを作成します。

image.png
image.png

次にコンテナーを作成します。

image.png
image.png

最後に先程用意したCSVファイルをコンテナーにアップロードします。

image.png
image.png
image.png

これでデータの準備ができました。

3. Cognitive Search で検索インデックスの作成

3-1. Cognitive Search リソースの作成

Azure Portalにログインし、Search Serviceを開きます。
「Search サービスの作成」をクリックします。
スクリーンショット 2021-01-26 14.45.31.png

サブスクリプション~価格レベルまでを設定し、「確認および作成」でリソースを作成します。

価格レベルについての詳細:https://azure.microsoft.com/ja-jp/pricing/details/search/

これらを設定後、「確認および作成」で作成。
スクリーンショット 2021-01-26 14.46.15.png

3-2. インデックス作成

作成したリソースに移動し、「データのインポート」をクリックします。
image.png

3-2-1. データに接続

image.png

データソース:Azure BLOBストレージ
データソース名:任意
抽出されるデータ:コンテンツとメタデータ
解析モード:区切りテキスト
最初の行にヘッダーが含まれています:チェックを入れます。
区切り記号文字:,
接続文字列:「既存の接続を選択します」をクリック→データをアップロードしたコンテナーを選択します。

「次:コグニティブスキルを追加します」で次に進みます。

image.png

3-2-2. スキルの追加

3つの項目「Cognitive Servicesをアタッチする」、「エンリッチメントの追加」、「ナレッジストアへのエンリッチメントの保存」を設定していきます。
それぞれクリックで設定項目が開かれます。

スクリーンショット 2021-01-27 11.52.13.png

「Cognitive Servicesをアタッチする」

「無料」を選択すると、スキル適用できるドキュメント数が20個に限定されます。
スクリーンショット 2021-01-27 11.52.16.png

※Cognitive Servicesリソースを新規で作成する場合
価格レベルはS0を使うことができます。
スクリーンショット 2021-01-27 11.37.20.png
スクリーンショット 2021-01-27 11.37.27.png
数秒待ちます。
スクリーンショット 2021-01-27 11.37.37.png

「エンリッチメントの追加」

スキルセット名:任意
ソースデータフィールド:text(感情分析などのスキルを適応させる列を指定します。今回はツイート本文の列である”text”を指定しています。)
エンリッチメントの粒度レベル:ページ(5000文字チャンク)

必要なスキルにチェックを入れます。
image.png

「ナレッジストアへのエンリッチメントの保存」を開きます。

これを設定することにより Power BI との連携が可能になります。
ストレージアカウント接続文字列:「規定の接続を選択します」をクリックします。
image.png

ナレッジストア用のコンテナーを選択します。
コンテナーを用意していない場合は、「+コンテナー」を押して作成します。
image.png

設定ができたら「次:対象インデックスをカスタマイズします」で次に進みます。

3-2-3. インデックスをカスタマイズ

インデックス名:任意
キー:AzureSearch_DocumentKey

フィールドには、データ型と属性があります。 上部に並んだチェック ボックスは、フィールドがどのように使用されるかを制御する “インデックスの属性” です。

引用元:https://docs.microsoft.com/ja-jp/azure/search/search-get-started-portal

取得可能:検索結果で取得したい項目かどうか
フィルター可能、ソート可能、ファセット可能:フィルタリング、並べ替え、ファセットのナビゲーション構造にフィールドを使用するかどうか
検索可能:フルテキスト検索の対象かどうか

アナライザー:

デモアプリのサイドバーに表示させたい項目には、「フィルター可能」「ファセット可能」いずれもチェックを入れます。

「」で次に進みます。

image.png
image.png

3-2-4. インデクサーの作成

インデクサー名:任意
スケジュール:一度

これらを設定し、「送信」でインデクサーが実行されます。

image.png

3-3. 言語設定

このままだと言語設定が英語のままスキルが実行されてしまうため、一旦実行中のインデクサーを止め、言語を設定してからインデクサーを再度実行する必要があります。

「インデクサー」を開きます。
image.png

インデクサーをリセットします。
image.png

「スキルセット」を開きます。
image.png

言語を英語→日本語に変更します。
“@odata.type”: “#Microsoft.Skills.Text.SplitSkill” 以外の defaultLanguageを、enからjaに書き替え、「保存」で変更を保存できます。
image.png
image.png
image.png

再度「インデクサー」を開きます。
image.png

インデクサーを再度実行します。
image.png

インデックスが作られました。
512個のツイートで1分少し要しました。

image.png

3-4. 検索エクスプローラーでクエリを実行

インデックスを開きます。
image.png

「検索」をクリックすると、下に検索結果の一覧が表示されます。

image.png

次は簡単な検索クエリを書いて結果をみてみます。
$search=コロナ&$select=created_at,text,sentiment,keyphrases,locations,people
これで”コロナ”を含むツイートを検索し、日時・本文・感情・キーフレーズ・場所・人物 の項目のみ結果に表示させることができます。
image.png

クエリパラメーターの詳細については、以下公式ドキュメントにてご確認いただけます。
https://docs.microsoft.com/ja-jp/azure/search/search-explorer
https://docs.microsoft.com/ja-jp/azure/search/search-query-overview

おわりに

本記事では、データの準備~検索インデックスの作成 までの手順をまとめました。
次回、Part2. デモアプリの作成 で検索アプリを作成し、
Part3. Power BI レポートの作成 で最初に示したワードクラウドなどを表示させていきます。
簡単なステップで試せるものですので、ぜひご覧ください。

次回:Part2. デモアプリの作成

参考リンク

https://docs.microsoft.com/ja-jp/azure/search/search-create-service-portal
https://docs.microsoft.com/ja-jp/azure/search/search-get-started-portal
https://docs.microsoft.com/ja-jp/azure/search/cognitive-search-quickstart-blob
https://docs.microsoft.com/ja-jp/azure/search/knowledge-store-create-portal
https://docs.microsoft.com/ja-jp/azure/search/search-explorer