見出し画像

はじめてのAI(人工知能) TM2ScratchとTeachable Machineで音声認識をやってみる

こんにちは、K研究員です。今回の記事はSansanのアドベントカレンダー企画です。毎年、普段よりちょっと長い記事を書いていますが、今年は忙しくて遅くなってしまいました。

以前ははじめてのAIとして画像認識をやりましたが今回は音声認識です。Teachable Machine(ティーチャブルマシーン)とTM2Scratch(ティーエムトゥスクラッチ)でやっていきます。

こちらは前回の記事。

この記事は前回を読まなくても事前知識なしで大丈夫です。

画像認識はTech Park AI blockがあったのですが、音声認識のほうは学習ツールへのリンクがなかったため、TM2Scratchオンリーです。

AI系はいろいろ動かなかったりするので、複数あるとCoderDojoの運営上楽なのですが、なかなか難しいですね。


コンピューターに上と下の音声を覚えさせる

では早速やっていきます。今回はコンピューターに「上」と「下」の声を覚えさせて、猫を上下に動かしてみます。

まずGoogleが作ったTeachable Machineのページを開きます。

スクリーンショット (114)

スクリーンショット (113)

そして、真ん中の音声プロジェクトをクリックします。

スクリーンショット (115)

まずはバックグラウンドノイズを覚えさせる必要があります。バックグラウンドノイズとは身の回りで流れている音のことです。

マイクというところを押して、バックグラウンドの音を拾わせます。ここまでのところで、マイクの許可を求める表示が出たら許可します。

スクリーンショット (116)

青いボタンを押すとバックグラウンドの音の収集が始まり20秒喋らずに待つと収集が終わります。バックグラウンドは一見無音かもしれませんが、機械にとってはいろいろな音がしていたりするのでバックグラウンドの音の収集は大切です。

スクリーンショット (118)

終わったらサンプルを抽出という水色のボタンを押します。ついもう一度青いボタンを押したくなってしまうのですが、そうするとまた20秒が始まってしまいます。上のボタンを押しましょう。

次に実際に覚えさせたい声を覚えさせます。Class2というところを「上」という声を覚えさせる「up」に変えます。さらに+マークをクリックしてClass3の箱を出して「下」を覚えさせるdownに変えます。

スクリーンショット (119)

マイクボタンを押して、バックグラウンドの音の時と同じように2秒録画するという青いボタンを押して、その2秒のうちに「上」と言います。そして2秒が終わったらサンプルを収集ボタンを押します。一回につき2個収集されますが、真ん中で1回「上」と言うだけでも覚えてくれます。「うーえーーー」と長く2秒言う必要はないです。

スクリーンショット (121)

8個以上(4回以上)溜まったら次に行きます。

スクリーンショット (122)

スクリーンショット (123)

下も同じようにやります。

スクリーンショット (125)

だいたい同じ数ずつ覚えさせるのがいいでしょう。

終わったら真ん中のモデルをトレーニングするをクリックします。

スクリーンショット (127)

しばらく何もせずに待ちます。「タブを切り替えないでね」っていうダイアログが出るので触らずに待ちます。

終わると右に出力というグラフが出てきます。「上」と言ったときに「up」が上がるか、「下」と言ったときに「down」が上がるか試します。「上」と言ったときに「up」も「down」も上がってしまったらまだ学習が足りないのでもっと増やします。

大丈夫そうだったら右上の「モデルをエクスポートする」ボタンをクリックします。

スクリーンショット (128)

こちらのような画面が出てくるので、モデルをアップロードボタンを押します。

スクリーンショット (129)

そうすると、真ん中に「共有可能なリンク」が出てきます。コピーをクリックすると、リンクをコピーできます。これをメモ帳などに控えておきましょう。注意:まだ改良するかもしれないのでTeachable Machineのページは開いたままにしておくか、プロジェクトを保存しておくことをお勧めします。

スクリーンショット (130)


TM2Scratchで学習結果を使ってプログラミングをする

TM2ScratchはML2Scratchと同じ作者の石原淳也さんによるもので、今回使わせてもらいます。通常のScratch3.0の環境ではTeachable Machineの結果を動かすことはできません。

ML2ScratchにもTeachable Machineの拡張機能があるのですが、こちらはバージョンが古い様子でラベルが一部出てきません。githubのほうを見るとそのエラーは修正済みでTM2Scratchのほうでは問題なく動きます。

画像15

左下の青いボタンを押して、拡張機能を入れます。

スクリーンショット (132)

この犬のアイコンをクリックします。そうすると緑色のブロックが出てきます。ここで、画像認識関係のブロックと、音声認識関連のブロックがあり、音声認識関連は下にあるので間違わないように気を付けましょう。ちなみにここで自動的にビデオがオンになることがあるので、「ビデオを切るにする」ブロックをクリックしてビデオを止めておくとよいです。

先ほど保存しておいたURLを、「音声分離モデルURL」というブロックに入れます。

スクリーンショット (133)

その後ブロックを押すと周りにしばらく黄色い枠が出ます。ここでエラーが出なければ読み込み成功です。エラーが出てしまったらURLが間違っている可能性があるので確認して、それでもだめだったら、モデルを作るところからもう一度やったり、別のコンピューターでやったりしてみましょう。

そのあと、「音声ラベルのどれかを受け取った時」ブロックを持ってきて、「のどれか」のところをクリックするとdown, up, バックグラウンドノイズの3つが出てくるはずです。ここでラベルが一つ出てこないときはML2Scratchのほうでやっている可能性があります。TM2Scratchで試してみてください。

スクリーンショット (139)

コンピューター(Teachable Machine)が「上」を認識すると「up」を受け取り、「下」を認識すると「down」を受け取ります。

では早速、「down」を受け取ったとき、下に30移動するプログラムを書いてみます。

スクリーンショット (140)

あれ、猫がどんどん下に行ってしまう。まだ何も言っていないのに?そうなのです。これは閾値("しきいち"、"いきち"とも読む)と言ってコンピューターがどのくらい「下」だと思ったら実際にプログラムを動かすかという制御にかかっています。Teachable Machineはどれぐらい判定に自信があるかを0~1.0までの確信度(確信度が0.9だったら90%ぐらい「下」だと思っているという値)で教えてくれます。閾値を0.9にすれば、確信度が0.95とか1.0とかそういう自信があるときにしか反応しなくなります。

早速「閾値を0.5にする」ブロックを持ってきて0.9に変えてみます。

画像20

さて、動かなくなったでしょうか。この状態で「下」と言ってみます。「下」に行きましたか?この閾値の調整は機械学習を仕事にする人も頑張って調整しています。高すぎると「下」と言っても下に行かない、低すぎると勝手に動いてしまうのでちょうどいい値になるように調整しましょう。

同じように上もやります。

スクリーンショット (141)

どうですかね。上と言うと上に行き、下というと下に行くようになったでしょうか。たまに2歩歩くときもあるかもしれませんが、声の長さや判定のタイミングによってどうしてもそうなってしまうので、ある程度は仕方がないと思うか、厳密に一度に1回にしたい場合は、一度下に行ったらバックグラウンドノイズや上の音声を受け取らないと移動しないようなプログラムにするとよいでしょう。このようなプログラムは機械学習の仕事では後処理と呼ばれていて、こちらもかなり大切な処理です。

もし、あまりうまく動かないという場合はもう一度Teachable Machineに戻ってやり直してみるといいかと思います。

うまく動いたらいろいろ遊んでみよう

ここまでうまくいったらいろいろ追加してみてください。例えば、ねずみのスプライトを追加して、ねずみに当たらないように音声で逃げるようにするというのも面白いでしょう。

また、お父さんやお母さんの声も登録して、より音声認識を正確にするのもよいでしょう。

別の言葉を覚えさせて、例えば上下だけでなく左右にもいくとか、ワープするとか自爆するとかいろいろやってみるのもいいかもしれません。

私が作ったネズミから逃げるプログラムを置いておきます。実際にゲームにしてみると反応が悪くてイライラしてくると思います。それは非常にいい経験です。というのも実際の人工知能もそうだからです。認識を改善したり、いろいろ工夫して面白くすることも必要です。

ゲームとして遊べるように閾値を変えたり動く幅を変えたりしてみましょう。また、イライラすると今どっちを認識したのか気になってくると思います。音声ラベル「down」を受け取ったときに、「down」というようにして今どちらを認識したのかわかるようにしてみました。さらにイライラをなくすには、猫が迷っているようなセリフ、「今、上って言ったかな??」なんて迷っている感じを出すといいかもしれません。もちろんうまく動かすためにTeachable Machineに戻ってもっと学習データを増やして、モデルをアップロードし、URLを入れなおしてみるのもいいと思います。

画像22

画像23

おわりに

いかがだったでしょうか。閾値調整や後処理など、難しかったでしょうか。これをやってみた皆様の中には実際になにかを認識する機械学習をする仕事をする人や、機械学習したAIを使ってゲームやアプリを作る人が出てくるかもしれませんね。そうだったらいいなと思います。

無料のプログラミングクラブCoderDojoを運営するにあたり寄付を受け付けています。お金は会場費・Wifiの費用・教科書に使用します。