Azure Machine Learning Tutorialに献血識別のチュートリアルを追加しました

前回作ったAzure Machine Learning Tutorialですが新しく献血データを使って献血に行った人とそうでない人を分類する識別チュートリアルを追加しました。 https://github.com/garicchi/azureml-tutorial/tree/master/blood-classify Azure Machine Learningにはデフォルトでいくつかサンプルのデータセットがついているのでその中の一つである「blood donation data」を使いました。データの内訳はこのようになっていて、0か1かが書かれているClassを識別します。 このチュートリアルを作っていて初めて気づいたのですがAzure MLにはSMOTEモジュールというものがあり、これを使うことによってデータの不均衡をオーバーサンプリングによって均等にすることができます。 Two Class Neuralnetworkを用いて識別、10点交差検証した結果、F値0.6とあまり良い結果にはなりませんでした。パラメータ調整とか特徴量選定とかの余地がありますね。

EventHubに.Netからイベントを投げる

Nugetから「WindowsAzure.ServiceBus」をインストールします。 名前空間をusing using Microsoft.ServiceBus.Messaging; あとはこんな感じで。接続先の特定は接続文字列を使う var connectionStr = textEventHubConnection.Text; var eventHubPath = “sales”; var eventHubClient = EventHubClient.CreateFromConnectionString(connectionStr, eventHubPath); var eventData = new EventData(Encoding.UTF8.GetBytes(textEventHubSample.Text)); await eventHubClient.SendAsync(eventData);  

BotFrameworkにLUISを組み込んで自然言語を認識させる

対話ができるシステムを作るうえで、「コーヒーを注文する」というタスクに対し、「コーヒーをください」という発話は認識するが「コーヒーをちょうだい」という言葉は認識できないような対話システムはあまり賢いとは言えません。 そのようなユーザーの発話のブレに対応するために、BotFrameworkではLUISというサービスを利用して機械学習を用いた自然言語認識をすることができます。 今回はLUISを用いて自然言語を認識するBOTを作りましょう。 LUISのモデルを作成する https://www.luis.aiのアカウントを作成します。 NewAppから新しくモデルを作成します。 Intentをいくつかつくります。 このIntentとは認識してほしいカテゴリごとに作成します。 今回は発話をNoneとgreetingとpredictの3つに分類することにします。 各Intentには発話候補を書いておきます。 これらの発話に近い発話が来るとそのカテゴリに分類されます。 IntentができたらTrain&TestからLUISを学習させます。この画面でテストをすることもできます。 学習がうまくいったらPublishしましょう。キーは必要に応じて作ってください   BOTを作成する 今回はVisualStudioを用いてC#でBotを作成します。 まずこのリンクからBotのテンプレートをダウンロードします。 VisualStudioのテンプレートのディレクトリに配置し、新規作成からBotのプロジェクトを作成します。 デフォルトではMessagesControllerのPostメソッドからRootDialogが呼ばれていると思います。 なのでRootDialogからLUISを呼び出すDialogを作りましょう。 Dialogフォルダの中にLuisDialogを継承するクラスをつくります。 このクラス内には作成したIntentごとにメソッドを作り、属性を加えます。 クラスに紐づけているLuisModel属性にはLuisのAppIdとLuis のEndpointKey(上記publish時に設定したキー)を貼り付けます。 [LuisModel(“Luis App Id”, “Luis Endpoint Key”)] [Serializable] public class IntelligenceLuisDialog : LuisDialog<object> { [LuisIntent(“predict”)] public async Task Predict(IDialogContext context, LuisResult result) { string message = “predict”; await context.PostAsync(message); context.Wait(this.MessageReceived); } [LuisIntent(“greeting”)]…

EventHubからStreamAnalyticsへ流してTableStorageに出力する

EventHubへのデータの流し方については前の記事を参考にしてください。 まずはStreamAnalyticsを作成し、入力の項目に作成したEventHubを設定します。 出力にはTableStorageを指定します。(あらかじめTableStorageを作成しておいてください) パーティションキーと行キーについては、イベント要素を一意に決定する2つのキーを指定します。 この2つのキーはEventHubに挿入するイベントのjsonに含まれているキーである必要があります。 入力と出力が設定できたら、クエリを指定します。 INTOには出力の名前、FROMには入力の名前、SELECTは今回そのままデータを出力に流すので*としておきます。 ここまでできたら概要から[開始]を押し、StreamAnalyticsを実行します。 StreamAnalyticsを実行できたら、StorageExplorerを使ってTableStorageを見ましょう。 TableStorageの中身をみることができたらOKです。   続いでデータを挿入しましょう。 EventHubへのデータの挿入の仕方については前の記事を参考にしてください。 今回はこのようなデータを投げます。 { “hoge1″:”moge1”, “hoge2″:”moge2” } データをEventHubに投げたら、TableStorageを見ましょう。 無事、StreamAnalyticsを介してデータの挿入ができました