【Azure】Logic Apps と Cognitive Services と LUIS を活用した Twitter感情分析bot の作成手順

# 何やるの？
Twitterのつぶやきを定期的にクロールして、落ち込んでいそうなつぶやきをみつけたら、はげましメッセージを送るbotを作ります！

# どうやるの？ 
クリスマスだし何か作ろうぜ？　ということで、
@ItNakaken さんとオンラインホワイトボード：miro ( https://miro.com/app/dashboard/ ) でブレストしました。
暗い話題が多いので、ツイッターで勝手に励まししてくれるbotなんてどうかな、となりました。
適当キャプチャ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/edd76e53-b887-0d7e-d9e0-d7c84447f66b.png)

おおむね、
　１．特定キーワードでTwitter上のつぶやきを検索するしくみ [Azure 仮想マシン] or [Azure Logic Apps]
　２．マシンが取得したつぶやきを解析するしくみ [Azure Cognitive Services]
　３．取得したつぶやきを解析し、解析結果に応じてアクションを決定するしくみ [Azure Logic Apps]
　４．アクションを実行するしくみ [Azure 仮想マシン] or [Azure Logic Apps]
で作れるんじゃないだろうか？となりました。


# 早速作っていく。　今回の範囲
先ほどのキャプチャで、付箋を赤塗した部分が本記事で作成する範囲です。
　-  Azure Logic Apps
　-  Azure Cognitive Services
　-  Language Understanding (LUIS)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/0a644173-7ce4-e8f7-3100-2542dfede366.png)

上記の１と２ですね。
　１．特定キーワードでTwitter上のつぶやきを検索するしくみ [Azure Logic Apps]
　２．マシンが取得したつぶやきを解析するしくみ [Azure Cognitive Services]
また、２については、[Language Understanding (LUIS)] でカスタマイズ可能であることも確認します。



# 作っていく　～　Cognitive Services
Azure Portal へログインします。（ https://portal.azure.com/　）
上部検索窓 [Cognitive Services] でCognitive Servicesの画面へ移動し、[すべてのCognitive Services] -> [+追加] -> [Language]と進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/17d039a4-7577-d723-1baa-cf851d3a569e.png)

感情分析が行いたいので、このまま作成を続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/1289e2d9-a7c4-4bfc-7e12-448215928d9b.png)


各パラメータを決定して、作成します。
 - リソースグループ: RG-twitter-demo
 - リージョン：東日本
 - 名前：getMind
 - SKU：Free F0　★F0では使えない機能もあるので、後ほど変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/cfb5a0f6-c8d2-ab31-9bfb-3968a70510fa.png)

作成されました。キーとエンドポイントを確認しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/33202e73-1c44-9ca1-49f0-c196d183a0c1.png)




# 作っていく　～　Azure Logic Apps
続いて、Azure Logic Apps も作っていきます。

Azure Portal ログイン（ https://portal.azure.com/　）
上部検索窓 [Logic Apps] でロジックアプリの画面へ移動し、[+作成] 。
作成を行う。まずは箱だけ作って、ロジックは後から作る。
　- タイプは 「消費」。
　- デプロイは 10秒程度で完了。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/d0432abf-a458-4803-d4b5-ee45a84130cf.png)


作成後、[開発ツール] -> [ロジックアプリデザイナー] よりロジックの作成を行います。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/cf8dfb07-8bd1-1e64-54d5-542e73b8bd8f.png)

いったんロジックはこんな感じに組みます。
　１．　ツイートを検索して取得
　２．　 Cognitive Services　でツイート本文を感情分析

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/d7d4faf6-2714-e7b2-04f2-9706b9346fc4.png)

作成しておいた Cognitive Services を Logic Apps から呼び出します。
アクションとして、 [ テキスト分析 ] を選択します。
サイトのURL と アカウントキー に、確認しておいたキーとエンドポイントを入力することで、呼び出せます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/133cb2d2-678b-f9f3-8ae6-e7084d04376e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/7ab7bd24-431a-3be7-b33e-661b284f0633.png)


軽く、動作確認もしてみます。
入力に取得したツイート本文が入っており、
出力に Positive / neutral / negative の分析された割合が表示されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/08425554-de04-8721-dd02-c45b818c305f.png)


# カスタマイズしていく　～　Language Understanding (LUIS) Cognitive Services

既定の Cognitive Services のままだと
文章を　 Positive / neutral / negative　に感情分析することはできるのですが、
この分類を、特定の目的用にカスタマイズしたい場合があるかと思います。
今回は、LUIS ( https://www.luis.ai/ ) を使って、カスタマイズされた Cognitive Services を作成してみます。


まずは　https://www.luis.ai/　にアクセス。
あらたな Cognitive Services を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/53aafac7-74e4-e265-5314-cb7e14e1572f.png)

続いて、[+ New app] より、カスタムアプリを作成します。
 - Name  : luis-friend-bot
 - culture : japanese
 - Description : 説明なので適当に
 - Prediction resource : は空欄

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/2bdc09a1-17c8-3412-9fc5-1cae07f02f64.png)

作成が完了したら、学習用データを入力していきます。
例えば、 happy と sad の intents を作成し、happy に類する文章と sad に類する文章入力してあげます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/78d197bf-1f99-8b2c-cb8d-16ce68322f5d.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/7a7e579c-e502-04d7-a2ea-f8b35cda91d0.png)

学習用データを作成したので、学習を行います。
右上 [Training] で学習。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/2b0772f1-dc60-513e-5db3-89f4d4e84eb2.png)

学習結果をテストできます。
右上 [Test] で、新規語句を入力すると分析してくれます。
例えば、　「元気が出てきた」　については、スコア 0.688 で happy と分析結果が表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/0b9523b2-4050-6509-c377-be4c590e258d.png)

この調子で、学習用データを増やし、学習を行えば、指定した文章が happy か sad かを分析してくれるAIができるはずです。
LUIS ( https://www.luis.ai/ )を使って作成した Cognitive Services は、リソースとして追加されています。
Azure Portal からエンドポイントとキーを確認することで、Logic Apps から呼び出しできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/7894cdff-3a45-4fc3-5be1-7be8cf07aded.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/9a379b8b-4fc4-d7d1-931f-90c3d1c0a3b0.png)

動作も確認してみます。
取得した ツイート本文に対して、 happy か sad かを分析できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/155249f2-2f49-395b-1b8d-7a0bda04b3b0.png)





# カスタマイズしていく　～　参考：Language Studio
LUIS以外の方法として、Language Studio も活用できそうです。
Cognetive Services の SKU をスタンダードに変更し、また、リージョンが米国西部2 または 西ヨーロッパであれば、
Language Studio を用いて、カスタムエンティティ( Custom Named Entity Recognition Projects )等を設定できます。
[概要] -> [開発]タブ -> 下部にある [Language Studio 開始する] と進むと、 Language Studio 利用を開始できます。

参考：https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/custom-classification/overview


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/34e00709-eadc-ed6a-0218-89e0d1ae62da.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/d6e4857f-f852-e296-9641-025e02b28ead.png)

Language Studio のページ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/3215db91-92d0-c854-0aa9-0806c7a264b3.png)


[Custom Named Entity Recognition Projects]を選択し、 [+Create new project]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/e117019b-7bec-fee1-6f32-023c32dbcebe.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/f389109f-b738-4908-f372-66f3f1678010.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/b3e73254-e628-51a0-ec86-c6f85c4b0d66.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/805c6208-a051-750e-d4b7-a0670e8d3953.png)

後は、Language Studioと紐づけたストレージアカウント BLOB コンテナー上に、学習用データを用意してあげると、Language Studioで読み込み、タグを設定して学習を開始できます。


# 参考リンク

●Logic Apps

https://docs.microsoft.com/ja-jp/azure/logic-apps/quickstart-create-first-logic-app-workflow


●Cognitive Services

https://docs.microsoft.com/ja-jp/azure/cognitive-services/cognitive-services-apis-create-account?tabs=multiservice%2Cwindows

https://docs.microsoft.com/ja-jp/azure/cognitive-services/luis/luis-concept-intent

●Language Understanding (LUIS)

https://docs.microsoft.com/ja-jp/azure/cognitive-services/luis/luis-how-to-start-new-app

https://docs.microsoft.com/ja-jp/azure/cognitive-services/luis/luis-how-to-add-intents

●Language Studio

https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/language-studio

https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/custom-classification/overview