Microsoft Flow で Cognitive Service の活用方法を考えてみる

一つ前の記事を公開したところ、Microsoft Flow を業務で利用している使っている友人からコメントをもらうことができ、アイデアが膨らんできたので色々試してみました。

前回の記事はこちら
Microsoft Flow と SharePoint Online で自動採番機能を実装してみた

目的を持って実装するほうが学びも多いと思うので、今後は以下のようなシナリオを仮定し、Flow を使って対応できないかを考えてみます。(何かアイデアがあればやってみるので教えてほしいです!)


利用シナリオ : カスタマーサポート

  1. お客様から問い合わせメールを受信する
  2. 問い合わせメールの記載内容をもとに、Q&A サイトや自社データベースから関連する情報を取得する
  3. 取得した情報を、自動返信メールの本文に記載する
  4. 作成した自動返信メールをお客様へ返信する

 上記のように、第一次受付を完了しましたというような自動応答メールのなかに、回答と思われる情報を記載することで、問題解決を早期化しようという内容です。過去に Line BotBot FrameworkChat Bot を作成した際、いずれ実装しようと思っていた内容ですが、入出力のインターフェースが変わるだけで中身の実行ロジックは同じなので、Flow でどこまでできるかをやってみようと思いました。 Flow はあくまでサービスとサービスをつなぐ Hub という位置づけのサービスですが、可能な限り Flow で提供されているコネクタを利用してやってみます。

本記事で紹介する内容

 今回の記事では、Gmail でメールを受信した際に、本文の内容からキーワードを抽出して出力するところまでを紹介します。今回は、例文として枕草子の冒頭部分を使用しました。

例文

春はあけぼの。やうやう白くなりゆく山際、少し明かりて、紫だちたる雲の細くたなびきたる。

夏は夜。月のころはさらなり、闇もなほ、蛍の多く飛びちがひたる。また、ただ一つ二つなど、ほかにうち光て行くもをかし。雨など降るもをかし。

秋は夕暮れ。夕日の差して山の端いと近うなりたるに、烏の寝所へ行くとて、三つ四つ、二つ三つなど飛び急ぐさへあはれなり。まいて雁などの連ねたるが、いと小さく見ゆるは、いとをかし。日入り果てて、風の音、虫の音など、はた言ふべきにあらず。

冬はつとめて。雪の降りたるは言ふべきにもあらず、霜のいと白きも、またさらでもいと寒きに、火など急ぎおこして、炭持て渡るも、いとつきづきし。昼になりて、ぬるくゆるびもていけば、火桶の火も、白き灰がちになりてわろし。

 解析結果

["降りたる","連ねたる","言ふ","さら","あら","飛び","明かり","火桶","つとめ","紫だち","ころ","山際","急ぎおこし","いけば","果て","山の端","ほか","うち光","夕日","わろし","寝所","夕暮れ","あけぼの"]

 
 本文から取得したキーワードを検索クエリとして、Q&A サイトをスクレイピング、あるいは データベースの検索結果を返すだけでも、それなりのものになるかもしれません。

実際に使用するイメージとして、適当に探した以下のフォーラムの質問からキーワードを抽出してみました。

EdgeでWordpressのログインURLに接続をしたら「このサイトは安全ではありません」と表示される

質問文

EdgeでWordpressのログインURLに接続をしたら「このサイトは安全ではありません」と表示されるのですが、原因が分かりません。

キーワード抽出結果

["接続","ログインURL","Wordpress","Edge","サイト","安全"]

 

キーワードの組み合わせ次第ではいい感じのものを取って来てくれそうな気もします。
今回の記事では、ここまでの処理について紹介していきます。

 

Flow の実装内容

 ここから実際の Flow の実装内容となります。今回は以下のような実装です。

  1. Gmail で本文に枕草子の文章を記述したメールを自分に送信 (手動)
  2. 自分宛にメールが届いたら受信メールの本文を Text Analytics API に渡す。(Flow のトリガー)
  3. 本文から抽出したキーワード群をから出力用配列を作成
  4. 出力結果を OneDrive for Business 上のテキストファイルに出力


今回の実装内容の全体図がこちらです。

f:id:keisuke-blog:20171023234832p:plain

使用したコネクタ

補足
  3. の処理は、キーフレーズの取得結果を OneDrive for Business などのその他のコネクタで扱おうとした際、Apply to Each (Foreach 構文) の中でキーワード一つ一つを処理することしか選択できずハマったため、一度データ出力用の配列として格納することで対応しました。

 

コネクタ内の実装はこちら

f:id:keisuke-blog:20171023235052p:plain

コネクタの内部実装


テキスト解析部分の処理について

 Q&A サイトや自社データベースから関連する情報を 検索 / 抽出 するためには、検索のためのクエリが必要です。受信したメールの本文からキーワードを抽出する処理 (テキスト解析) には、MicrosoftCognitive Service で提供されている Text Analytics API を利用します。Json 形式で文字列を渡すと、渡された文字列からキーワードを 判別 / 抽出 し、結果を Json 形式で返してくれます。

Cognitive Service の記事はこちら

Cognitive Services—インテリジェンス アプリケーション | Microsoft Azure

Text Analytics API  は、コネクタから "テキスト" と入力すれば見つかります。

f:id:keisuke-blog:20171024000209p:plain

Text Analytics API の検索方法

 Flow のコネクタを見ると、Text Analytics API 以外の Cognitive ServiceAPI も利用できるようです。

  • Computer Vision API (画像解析: Image analysis)
  • Emotion API (感情分析:Sentiment Analysis)
  • Microsoft Translator Text API (翻訳)
  • Language Understanding Intelligent Service : LUIS (言語理解)

 特に LUIS でうまく言語を学習させることができれば、 色々な自然言語を汎化して別のトリガーとして使えそうですね。


Text Analytics API 
を含む Cognitive Service を利用するためには、Flow の作成者が Azureサブスクリプションを取得しておく必要があります。API は無料プランが利用できるので動作確認は非課金で大丈夫です!
このあたりは上述した公式ページから追っていけば何とかなるので割愛します。 

本記事の実装で対処していないところ

 今回、メール本文が HTML 形式などのリッチ テキストだった場合、以下のように HTML タグまでキーワードとして取得してしまったため、メール本文をテキスト形式にして送信しています。

HTML 形式のメールの場合

["quot;\\0030d2","0030ce","0030ae","0089d2","0030b4  Pro W3","Meiryo","メイリオ","0030e9","15px","font-size","letter-spacing","color","rgb","font-family","span style","br style","font class","text-decoration-line","gmail-text","underline","降りたる","連ねたる","かし","言ふ","あら","飛び","さら","div dir","明かり","火桶","ltr","紫だち","わろし","山際","急ぎおこし","いけば","果て","山の端","ほか","うち光","夕日","寝所","ころ","あけぼの","夕暮れ","つとめ"]

ここは条件分岐で処理するなど、うまくハンドリングできるよう考えてみます。

今回の記事は以上となります。
次回はスクレイピング or データベースの検索部分をやってみます(できたら)。