Microsoft Cognitive ServicesとSendGridを利用してインテリジェントなメールサービスを考える

最近、人工知能(AI,artificial intelligence)やディープラーニングに代表される機械学習の話題が盛りあがっており、Pepperのようなロボットやbotと呼ばれる対話式にメッセージをやり取りするサービスをインタフェースとして、人とコンピュータがコミュニケーションする場面が増えています。

こうしたコミュニケーションが増える一方、SendGridが扱っている「メール」は、主に人と人がコミュニケーションしたり、システムが人に情報を通知するためのツールです。しかし、人工知能などの話題を目にするたび、将来的にはメールでもなにか新しい形の使い方やサービスが生まれてくることもあるのでは?と考えることがあります。

先日、色々調べている中で「コグニティブ(Cognitive)」というキーワードを知りました。認知・認識といった意味を持ち、コンピュータが人間のように、物事や状況を認知・認識するコグニティブ・コンピューティングといった言葉もできています。

コグニティブをキーワードとしたサービスも出てきています。有名なところでは、IBMのWatson ServicesMicrosoft Cognitive Servicesがあります。提供されているインテリジェントなAPIを利用して、アプリケーションに人間のような認知・認識を行わせることが可能となります。そこで、今回のブログでは、Microsoft Cognitive Servicesを実際に利用して、インテリジェントなメールサービスを考えてみました。

Microsoft Cognitive Servicesとは?

Microsoft Cognitive Servicesは、人間が行っている認知や認識の能力をモデル化したインテリジェントなAPIを提供するサービスです。

Microsoft Cognitive Services

大きく5つのカテゴリに分かれていて、視覚(Vision)、音声(Speech)、言語(Language)、知識(Knowledge)、検索(Search)となっています。さらに、各カテゴリごとにさまざまなAPI(本ブログ執筆時点では合計23個)が用意されています。

視覚(Vision)

音声(Speech)

言語(Language)

知識(Knowledge)

検索(Search)

すべてREST APIで提供されているため、HTTPを利用して簡単に呼び出すことができます。また、APIごとに各種プラットフォーム向けのSDKも提供されています。

無償で利用可能な範囲はそれぞれのAPIごとに異なるので、実際に試す場合は、各APIのページをご確認ください。また、Microsoft Cognitive ServicesはMicrosoft Azureからも利用可能です。

これから何回かに分けて、色々なAPIと関連させた記事を書いていく予定ですが、まず初回である今回はText Analytics APIを利用してみました。

Text Analytics API

Text Analytics APIは、テキストデータをもとに、次の4つの処理を行うことができます。

  • Sentiment analysis
  • 文章がポジティブかネガティブか分析して、その割合を返します。

  • Key phrase extraction
  • 文章の中からキーとなる重要なフレーズを自動的に検出します。

  • Topic detection
  • 文章の中で繰り返し触れられていることなどをトピックとして自動検出します。

  • Language detection
  • 文章が何語で書かれているか、120カ国の言語から検出します。

昔から「メールにおけるコミュニケーションは感情が伝わりにくい問題がある」といわれてきました。そこで、今回はSentiment analysisを利用して、送信メールの内容をコンピュータに評価してもらう簡単なサービスを考えてみました。

SendGridとText Analytics APIの連携

まずはじめに、どのようなサービスか実際に試したものをご紹介します。たとえば以下のようなメール文章を書いて、特定のメールアドレスへメールを送信します。

Text Analytics APIのSentiment analysisでポジティブ・ネガティブの割合を評価してもらうメール

メール文章が英語となっているのは、Sentiment analysisのAPIが日本語に対応していないためです。執筆時点では、英語、フランス語、スペイン語、ポルトガル語の4言語対応となっています。

メールの送信後、しばらくすると以下のようなメールが返ってきます。メールの中には円グラフが表示されており、先程送った文章に対するポジティブ・ネガティブの割合をあらわしています。

Sentiment analysisで解析されたメール内容のポジティブ・ネガティブの割合グラフ

今回のメール文章はpositive 94.5%となっており、非常に前向きな文章だったようです。今のSentiment analysis機能では、根拠となる情報までは付与されないのですが、今後そういった情報が取れるようになれば、もっと面白い分析結果になると思います。

このメールサービスは非常に簡易的な機能で、内部の処理フローは下図となっています。

SendGridとText Analytics APIの連携処理フロー

SendGridでは、メールの送信だけではなく、受信をすることもできます。Inbound Parse Webhookと呼ばれる機能です。今回はこれをアプリケーション処理の起点としています。WebアプリケーションのサンプルコードはGitHubに置いてあるので、興味がある方は是非お試しください。

サンプルコードでは以下が事前準備されている前提となります。

  • Microsoft Cognitive ServicesText Analytics APIアカウントを持っていて、APIキーを取得している
  • SendGridでInbound Parse Webhookを利用可能なアカウントを持っていて、APIキーを取得している
  • Herokuのアカウントを持っている※
  • Plotlyのアカウントを持っている
  • Inbound Parse Webhookが設定済でPOST先のURLにHerokuのアプリを指定している

POSTデータを受け取れる環境であればどこでも構いません。ただし、サンプルコードは環境変数の設定など一部がHeroku前提となっています。

それでは処理フローについて説明します。

  1. ユーザがメール送信します。指定する送信先のメールアドレスは、SendGridのInbound Parse Webhookで設定したドメインを含むメールアドレスです。
  2. SendGridがメールを受信すると、Inbound Parse Webhookにより、Heroku上のWebアプリケーションへ受信メール情報をPOSTします。POSTされたデータを受け取るWebアプリケーション(今回のサンプルではJavaのSparkというWebフレームワークを利用)では、データを解析して送信元メールアドレスやメール内容を取得します。
  3. 2で取得したメール内容をSentiment analysisのAPIエンドポイントへ渡します。具体的なエンドポイントやリクエスト・レスポンス情報についてはSentiment analysisのAPI Documentを参照してください。
  4. Text Analytics APIのレスポンスに含まれる結果から、PlotlyのAPIを利用して円グラフを作成します。結果をグラフ化した画像の埋め込みURLが取得できるので、そのURLを含めて、送信元への返信メールを作成します。
  5. 4で作成したメール内容をSendGridで送ります。

今回は非常に簡単なサンプルだったため、メールを介する必要性を感じにくいですが、たとえば

  • 問い合わせメールが何の言語で書かれているか自動的に識別して、国ごとの分類を行う
  • メール内容からキーワードやトピックを抽出して自動的にカテゴリのタグ付けする
  • 問い合わせ内容からサポートやセールスなどの担当者割り当てや優先度付けを自動化する
  • 問い合わせ内容に関連するFAQのリンクを自動的にリストアップする
  • サポート対応の自動評価(相手の反応から満足度を測定する)

など、色々な使い道が考えられるのではないかと思います。