Azure Machine Lerningで作成したAIモデルが判定! ──40万ボルトのビリビリクイズマシーンを作ってみた
アーカイブ動画
AI判定型ビリビリクイズマシーン開発に取り組んだ経緯
ビリビリクイズマシーンとは、バラエティ番組の罰ゲームなどでよく見る、クイズに誤答すると電気が流れるマシーンだ。なぜ、そのようなマシーンを作ろうと思ったのか。杉本氏は「技術を使って面白いことをしたいと思ったから」と、語る。クイズ対決する相手は、アバナード西日本統括責任者の大阪所長(本名は住岡晋一郎氏)。単にクイズ対決するだけでは面白くないので、どうせなら刺激が欲しいということで、「電気を流そう」ということになったという。つまり「AI判定型ビリビリクイズマシーン」は「技術を使って自分たちが手弁当で楽しめるモノをつくる」という杉本氏の、TECHBEERに続く第二弾の企画というわけだ。
Avanade tech talk第一弾:Power PlatformとAzure IoT Hubでビールの醸造をやってみた
今回は杉本氏一人ではなく、チームでチャレンジ。杉本氏同様、アバナード関西オフィスに所属する西垣裕仁氏とアルマハミド・バッサム氏の二人が、ビリビリクイズ開発チームに加わった。西垣氏はPower Platform、バッサム氏はAzureおよびAzure Machine Learning、杉本氏がエッジ側と、それぞれ担当を受け持ち、ビリビリクイズマシーン開発に取り組んだ。
ここで簡単に3人のプロフィールを紹介する。
西垣氏は京都府の出身。長岡技術科学大学情報工学専攻。趣味はテニス、スノーボード、ゲーム、料理など多数。組み込みソフト開発を約2年、Windowsアプリ開発を8年経験。2020年8月にアバナードに入社し、バックエンド開発に携わっている。
バッサム氏はスペインの出身。趣味はスポーツ全般。特にバスケットが好きだという。2014年4月に、日本語とソフトウェアエンジニアリングを学ぶために来日。3年間、学んだ後、Webアプリケーションの開発者として経験を積み、2019年9月にアバナードに入社。現在は、Azureをメインにアプリケーションの設計・開発に従事している。
リーダーの杉本氏の趣味はバイクや車、モノづくり。最近は溶接を勉強し、TECHBEERの発酵装置をステンレスの溶接で作ろうとしている。スタートアップ経営経験後、2017年にイグジット。2019年5月にアバナードに入社した。
AI判定型ビリビリクイズマシーンの仕組み
杉本氏たちが開発したビリビリクイズマシーンは、大きく3つの仕組みから成り立っている。Power Platformでは回答を音声認識して、AIのモデルに渡して正誤をチェック。誤答すると電気を流すイベントがIoTエッジのRaspberry_Piに送られ、乾電池を通じて40万ボルトの刺激が人に与えられる。Azure&AIでは問題として学習データを取得し、正誤の判定をAzure Machine Learningを用いて行う。
「趣味の時間でやっているので、今回は精度の高い回答の判定は難しかったが、Azure Machine Learningを使い、曖昧な回答でも正解できるアルゴリズムになっている」と杉本氏は語る。
エッジ側のデバイスは、Raspberry Pi4 Model B。あとはリレー、昇圧コイル、乾電池を2つずつ用意するだけ。シンプルなつくりとなっている。具体的にはRaspberry_PiをWi-FiでAzureと接続。IoTハブ経由で電気を流す情報をゲットし、指定のGPIOをオンにする。するとリレーの接点がオンとなり、乾電池の電気が昇圧コイルに流れる。
後は100円均一ショップで購入したバンダナに電極をつけ、それをおでこに巻けば、ビリビリクイズマシーンの出来上がりである。
エッジ側の詳しい作成方法は、こちらに記載されている(マネする場合は、やけどや火災、感電するので注意をしてほしいとのこと)。
「当初は、身体に流すつもりだった」と杉本氏。だが、あまりにも威力がありすぎ、昨今の「傷みが伴う笑いはよろしくない」という放送倫理の傾向もあり、目の前で電気を流す方法を採用した。
対決場面で、大阪所長から「テストはしたのか」と尋ねられた杉本氏。
「クイズのテストや電気が流れるかどうかなど、それぞれの箇所はテストして確かめましたが、バンダナに巻いて電気を流すというテストはしていません」と回答。
「テストしてこいよ」と返した大阪所長の目は泳いでいたという。
AzureとAI部分の仕組みを解説
AzureとAI部分については、バッサム氏が解説を行った。ビリビリクイズのAIは単純にクイズの回答が正しいかどうかの判断を担うのだが、「Yes、NoクイズにするとAIが不要になるので、文書を判断できるAIを作ることになった」とバッサム氏は語る。
例えば、「ヤマ、ササ、テッポウなどの種類がある花は何?」という問題に対して、回答の正誤をAIで判断する。この場合の正解は「ユリ」なので、それ以外の花の名前を回答すると間違いと判断されるというわけだ。
「ビリビリクイズマシーンのAIを開発するにあたり、2つの方針で進めた」とバッサム氏。1つは、オープンソースのライブラリのみを活用すること。Cognitive Serviceなどの有料のライブラリは利用していない。2つ目は、どの環境でも実行できるようにしたこと。GPUや高スペックのPCは不要にしている。
ビリビリクイズのAI開発は、まず学習データの読み込みから開始。Azure Storage AccountにあるCSVファイルからデータを読み込み、次に学習データの調整を実施した。「この学習データの調整が一番重要なポイント」と、バッサム氏は指摘する。
回答をそのままAIに取り組み、文書をプログラムで処理するのは難しいと判断したという。人によって標準語や方言の違い、イントネーションが異なるからだ。バッサム氏はその対策として、「文書の重要なポイントを抽出する」方法を選んだ。問題と回答から重要なポイント、例えば動詞や名詞、ネガティブ、ポジティブの意味があるかどうかを抽出して学習を行う手法である。
そのために必要なのは、文書をスペースで区切ることだ。英語やスペイン語は、言葉の間にスペースがあるので簡単に区切ることができるが、日本語の場合はスペースが入らないので、区切るのが難しい。そんなときに見つけたのが、fugashiというオープンソースライブラリだ。fugashiを使えば、次のように日本語をスペースで区切ってくれる。
「私はバッサムです」→「私 は バッサム です」
fugashiによって学習データをスペースで区切ることができたので、言葉ごとにトークンを発行して発行。トークンを数字データに変換し、重要なポイントを抽出することで、学習データを調整。調整した学習データをロジスティック回帰分析で学習させたのである。
AI作成はAzure Machine Learningも使ったが、主にAMLのJupyter Notebookで行った。「データ管理やモデルのバージョン管理が容易にできるので、いい経験になった」とバッサム氏。モデルのデプロイも1クリックで簡単にできるのでお勧めだという。学習データはAzure Blob StorageにSCVファイルから取得し、学習後、AIモデルをAzure Functionsにデプロイした。
AIで回答チェックを行う時に、Azure Functions内でAIを読み込んで推論を行い、その結果から、IoTHubに電気を流すイベントを送信するという仕組みになっている。
ビリビリクイズマシーン用AIの作成で苦労した点は、「日本語には3つのアルファベットがあること」とバッサム氏は言う。3つのアルファベットとは、漢字とひらがな、カタカナの3種。AIは漢字とひらがな、カタカナの区別はつかないので、この3つのアルファベットを含んだ回答の学習をさせないと、正しい判断ができないということだ。
「例えばBMWは何ですかという問題の回答は『車』となるが、それがひらがなで『くるま』回答すると間違っていると判断されてしまうケースがあります」(バッサム氏)
ビリビリクイズマシーンの画面はPower Platformで開発
続いてPower Platform部分の解説を西垣氏が行った。 ビリビリクイズマシーンの画面は「開始画面」「クイズ画面」「回答画面」「結果表示画面」の4つで構成されている。
開始画面はアプリを起動したときに表示される画面。いわゆるスタート画面。現在何問目か、回答者は誰かという情報も変数として持っており、その変数をこの画面で初期化する。 クイズ画面は、開始画面で「開始」ボタンをクリックすると表示される。この画面が表示されると、クイズを取得する。「クイズを表示」のボタンが押されると、同時にクイズの表示と残り時間のカウントダウンが開始。回答ボタンを押すと回答画面に遷移する。
また回答が解らない場合は、回答ボタンの横にあるパスボタンを押す。すると結果表示画面(不正解)に遷移する。
回答画面では音声認識技術を採用しており、音声で回答するとテキストに変換すると言う機能を持たせている。画面上部にある「開始」ボタンを押すとマイクで音声の録音を開始。次に「音声をテキストに変換」ボタンを押すと、Speech To TextのPower Automateフローが呼び出され、テキストに変換。回答送信ボタンを押すことで、正解か不正解かを取得。その結果を受けて結果表示画面に遷移する。
結果表示画面では、正解なら「○」、不正解(またはパス)なら「×」を表示。「次のクイズへ」ボタンを押すとクイズ画面に遷移。その際に現在何問目か、および回答者が誰かの変数を更新する。
Power AutomateではPower Appsからデータを受け取り、APIコールをし、Power Appsに応答データを返すために、以下の4種類のフローを作成している。
1)クイズ取得
クイズ番号を指定してクイズを取得するフロー
2)Speech To Text
回答の音声データをテキストデータに変換するフロー。音声データ形 式変換→Azure Speech To Textの2ステップで実現
3)回答送信
クイズの回答、回答者情報を送信して、正解or不正解を取得するフロー
4)クイズタイムアウト
クイズの解答が制限時間内に行われなかった場合に、その回答者情 報を送信するフロー(制限時間は10秒)
西垣氏いわく、苦労したところは「Speech To Text部分」。Power Appsのマイクで収録した音声のデータ形式(.webm)が、Azure Speech To Textに対応していなかったのである。webm形式からwav形式への変換ができるサービスが存在しなかったので、「自前で作成した」と西垣氏は明かす。
そこでAzure FunctionsにFFmpegを配置して、webm to wav変換を行うコードを作成した。
「幸いにも先駆者がいたので、その方のブログを参考にして構築することができました。コルネさんに感謝を言いたい」(西垣氏)
ちなみに西垣氏が参考にしたのが、以下のブログだ。
実は当初、アプリについてはノーコードで開発を目指していた。だが「ノーコードではできなかった」と西垣氏。もちろん、一般的なWindowsアプリケーションと比べると圧倒的にコードを書く量は少なく、初めてでもPower Appsは使いやすかった。
最後に西垣氏は「僕もコルネさんのように有益な情報や新たな気づきがあれば、ブログにアップしていきたい。高度なクラウドエンジニアとして成長していきたい」と語り、発表を締めた。
ビリビリクイズマシーンを作った感想は?
続いては、実際のクイズ対決の場面の動画が紹介された。実際のクイズ対決場面を見ると、AIらしい判断部分も感じられたが、むしろお笑いに貪欲な関西人の典型とも思えるような大阪所長の表情が笑いを誘う。
今回の取り組みに対する総括として、杉本氏は「Speech to Textのスピードの問題」を挙げた。1つは、テンポ良くスムーズにクイズ対決が展開するバラエティ番組風にやるには、まだまだハードルが高い。AIに学習させる部分も趣味の時間だけでは足りない。お金も時間も必要になることもわかった。
また、バンダナを使っての装着は当日ぶっつけだったそうで、「感電して脳にトラブルが生じたらどうしようと思っていた」と明かす。
「今回は電気を流す方法を選んだが、やる人も見ている人も幸せにならないことがわかった。これからは人を幸せにする、本当に笑えるモノを作っていきたい。」と抱負を述べつつ、「万一、マネをする場合は、本当に感電や火事などには気をつけてください」(杉本氏)
最後にこう釘を刺すことも忘れなかった。
【Q&A】参加者からは多数の質問が寄せられた
続いて、質疑応答が行われた。
Q.費用はどのくらいかかった?
杉本:一番コストがかかったのは、Raspberry_Piで約6000円。アバナードはAzure使用に月50ドルが出るので、Power PlatformとAzureの機能を使用できました。
Q.Power Appsを使ってみての感想、つまずいたところや調べたところは?
西垣:もともとWindowsアプリの開発者だったので、if構文や制御構文を書くたびに、文法が違う箇所を調べました。ページの遷移方法については、Navigate関数を使うことを知らなければつまずきます。
APIでは、Azure Functionsのフローの呼び方に苦労しました。Power Automateで一旦、Power Appsのデータを受け、そこからAzure Functionsのフローを呼んでデータを返す仕組みを作り、その上でフローとコネクトしてPower Appsから利用するアーキテクチャにしなくてはいけない。画面単位なのか、アプリ単位なのかなど、変数の考え方もかなり勉強して作りました。
Q.日本語をAIに学習させる過程で苦戦したポイントは?
バッサム:初めての日本語処理だったので、自分の言語であるスペイン語と合わせようと思いました。そこで思いついたのが、スペースで区切ること。そうするとスペイン語と似てくるので、同じ処理ができると考えました。
Q.西垣さん、バッサムさんを誘ったのはなぜ?
杉本:この企画は僕が考えましたが、バッサムさんと西垣さんはその悪乗りに乗ってくれました。大阪所長は採用につながるなら、と身体を張ってくれました。アバナードは本当に良い会社です(笑)。
Q.今回のシステムはモバイルアプリとして実装は可能か?
杉本:エッジを小さくする工夫は必要ですが、理屈上は可能です。ただし、カフェなどでこれをそのまま使うのは怖いです。万一、そういうことを考えるのなら、電圧を下げることはもちろん、エッジ側の安全対策にお金をかけることが必要です。
Q.一連の流れをよりスムーズに進めるために、改善すべきことは何か
杉本:今回はなぜか、必ず大阪所長だけに電気が流れてしまいました。大阪所長が正解しても大阪所長に電気が流れる。大阪所長が間違うと2回電気が流れるというバグがありました。また学習の精度を上げること、Speech To Textのレスポンスを早くすること、クラウドでやる必要があるかなどが、今後の検討要因です。
Q.どれくらい学習させたら精度が上がるのか
バッサム:学習データを増やす必要があります。今回は質問ごとにサンプル個体として30個用意し、学習させています。精度を上げるにはサンプル回答はさらに必要。不正解回答と正解回答を100ずつ学習させると、より精度が上がると思います。ただ、学習データは自分で作成しているので、かなり時間が必要となります。
Q.他にもチャレンジしたいことはある?
杉本:TECHBEERをブラッシュアップしたいと思っています。そのほかにはAIを使った植物工場。10年前に個人で植物工場を作ったことがあるのですが、当時はAIが使えませんでした。今なら野菜の栄養分をセンシングして、AIに自動学習させ、植物をおいしくする仕組みを搭載した植物工場ができたら面白いと思っています。
西垣:やったことのないものにチャレンジして成長したいですね。ただ、アイデア出しは杉本さんにお任せします。
バッサム:顔認証とビリビリクイズを合わせた仕組みを作りたいですね。玄関に取り付け、嫌な人が尋ねてきたときにビリビリさせて撃退したいです(笑)。
※注* Microsoft Power Platform、Power Apps、Power Automate は、米国 Microsoft Corporation の米国及びその他の国における登録商標または商標です。