今日も窓辺でプログラム

外資系企業勤めのエンジニアが勉強した内容をまとめておくブログ

Microsoft Bot Frameworkで簡単なBotを作ってみる (1) ~Microsoft Bot Frameworkとは?~

Microsoft Bot Framework で簡単なbotを作ってみようと思ったので、その過程を記録に残しておきます。

Microsoft Bot Framework とは?

今年の4月に Microsoft Bot Framework というBotを簡単に作るためのフレームワークが公開されました。
公式ドキュメントに書いてある通り、Microsoft Bot Frameworkは次の3つの柱で構成されています。

  1. Bot Connector
  2. Bot Builder SDKs
  3. Bot Directory

Bot Connector

Bot Connectorは、既に存在しているBotをSkypeやSlackなどのサービスに簡単にデプロイするための仕組みです。
後述のSDKを使ってBotを作成した後に使用します。

Bot Builder SDKs

Bot Builder SDKは、名前の通りbotを作成するためのSDKです。C#とNode.jsのSDKが用意されており、オープンソースなのでGithubでコードも確認できます

Bot Directory

Bot Directoryとは、作成したbotを登録して、世の中に公開するための場所です。スマホのアプリで言うところの、AndroidのGoogle PlayやiOSのApp Storeのようなイメージです。
ドキュメントによると、Bot DirectoryはCOMING SOONとなっているので、まだこの機能はリリースされていないのでしょうかね。

LUIS (Language Understanding Intelligent Service)

Microsoft Cognitive Services と呼ばれるAPI群の中に、Language Understanding Intelligent Services (LUIS) というものがあります。
LUISは、与えられた文章の意図(Intent)と、その文章に含まれるエンティティを抽出するためのサービスです。

例えば、次のような意図をエンティティをあらかじめLUISに学習させておいたとします。

  • 意図:飛行機のチケットの予約 (BookFlight)
  • エンティティ:目的地 (ToLocation)
  • エンティティ:出発地 (FromLocation)

このようなLUISに対して「パリへのチケットを予約して」というクエリを入力してあげると、LUISは「意図はBookFlightで、エンティティはToLocation=パリが抽出されました」というような答えを返してきます。(もちろん自然言語じゃなくてJSONなどのフォーマットで。。)

このような意図やエンティティを学習させるのも実に簡単で、このドキュメントにあるようにGUIで簡単にアノテーションができるようになっています。リンク先は英語ですが、英語が読めない方もスクロールして貼り付けられている画像を見てみてください。どのようにアノテーションをするかがなんとなくわかるかと思います。
いくつか文章をアノテーションすると、裏で自動でモデルが訓練され、訓練が終わったらボタン一つで新しいモデルをPublishしてあげればいいわけです。

またこのLUIS、先述のBot Builder SDKと簡単にインテグレードができるようになっています。のちの記事で紹介する機会があるかと思いますが、この意図が検出されたら、この関数を呼ぶ、という処理が簡単にできちゃうんです。

ただし、非常に残念なことに、このLUISは現在日本語に対応していません。現時点では英語、フランス語、イタリア語、スペイン語、そして中国語のみに対応しているようです。
現在は日本語のLUISも公開されています。こちらの記事で実際にLUISを使ってみています。
Microsoft Bot Framework と LUIS で複数の状態を持ったBotを作ってみる (完結編) - 今日も窓辺でプログラム

どんなBotを作るか?

試しに触ってみる段階なので、ネタはなんでもいいのですが、現在の各電力会社の電力使用状況を教えてくれるbotにしてみようと思います。
理由は特にありません。たまたま電力使用状況APIを見つけたからです。

Bot Builder SDKsはC#とNode.js向けに用意されていますが、今回はC#のものを試していきます。
では、次回からは実際にコードを書いていきたいと思います。



次回記事
Microsoft Bot Frameworkで簡単なBotを作ってみる (2) ~1つのフレーズだけに答えてくれるBot~ - 今日も窓辺でプログラム