どれ使う?プログラミング教育ツール

「Teachable Machine」で機械学習した音声認識データを使って「Scratch」でプログラミング ~拡張機能「TM2Scratch」を専用の「Scratch」で

 2020年度からついに小学校でプログラミング教育が実施されます。これに伴い家庭でも手軽にプログラミングを学習できるツールが多数登場していますが、どんなツールを使えばいいのか迷ってしまう方も多いのではないでしょうか? そこで本連載では家庭でのプログラミング教育にピッタリなお勧めツールを紹介していきたいと思います。

 前回、Googleの「Teachable Machine」で機械学習を行なって音声認識モデルのデータを作りました。“パイナップル”と“りんご”の発声を判別するモデルです。今回は、このモデルデータを「Scratch」でプログラミングします。今回使う「Scratch」は、複数の拡張機能を使えるようにしてある専用の「Scratch」です。「Teachable Machine」で作ったモデルデータは通常の「Scratch」では使用できませんので注意してください。

専用の「Scratch」に拡張機能を読み込む

 まず、専用の「Scratch」を開きます。Webブラウザーは「Google Chrome」に限定されているのでご注意ください。開いたら左下の[拡張機能を追加]ボタンを押して拡張機能一覧から「TM2Scratch」を選びます。「TM2Scratch」は石原淳也氏、横川耕二氏による「Scratch」用の拡張機能で、同「Scratch」も石原氏が提供しています。

専用の「Scratch」を開いたところ。[拡張機能を追加]ボタンを押す
「TM2Scratch」という拡張機能を選ぶ

音声認識モデルを読みこんで反応を確認する

 拡張ブロックが読み込まれたら、まず、「Teachable Machine」で作成したモデルを読み込むプログラムを作成します。次の図の通り、まずはビデオをOFFに設定し、音声分類モデルのURLを指定します。URLは前回記事の最後で作成したものを、コピー&ペーストします。

❶「TM2Scratch」の拡張ブロックが読み込まれている。[緑の旗が押されたとき]ブロックに続いて❷[ビデオを“切”にする]ブロックと❸[音声分類モデルURL“*”]ブロックをつなぎURLをペースト

 次に、“りんご”もしくは“パイナップル”の発声だと判定されたときの動作をプログラムしましょう。読み込んだ音声認識モデルには、“りんご”と“パイナップル”2個のパターンを学習させてありました。この名前が“音声ラベル”に入ります。次の図の❶~❸を参考に、特定の音声ラベルを受け取ったときに、ネコがその名前を言うプログラムにします。

 テストすると、あらゆる発声に反応しすぎてしまうことに気づくと思います。これをコントロールするために、判定の“確度”の設定を追加します。次の図の❹を参考にしてください。「Teachable Machine」でモデルを作る時に90%以上の確度で安定して反応することを確認していたので、“確度”のしきい値を“0.9”に設定します。反応が抑制されて、より確実に“りんご”もしくは“パイナップル”と言ったときだけに反応するようになりました。なお、反応は音声認識モデルの質によってずいぶん変わるので、思うようにいかないときは「Teachable Machine」でモデル自体を作り直しても良いでしょう。

❶[音声ラベル]にチェックを入れると作品のステージ上に、判定された音声ラベルが表示されるので検証に便利。このラベルは無くてもプログラムは動作する。❷[音声ラベル“のどれか”を受け取ったとき]ブロックと❸[“こんにちは!”と”2”秒言う]ブロックを接続して文言を書き換える。認識の確度を調整するために、❹[確度のしきい値を“0.5”にする]ブロックを追加して値を0.9に設定する
緑の旗でプログラムを実行して“りんご”が判定されたところ。ステージ内の音声ラベルにも、ネコの吹き出しにも“りんご”と表示されている

音声で反応する作品にアレンジ

 ここまでで音声認識モデルの動きを確認できたので、ちょっと楽しい作品にアレンジしましょう。りんごとパイナップルのスプライトをそれぞれ作成し、ステージの背景を設定します。ステージにはモデルのURL読み込みなど初期設定のプログラムを設定します。りんごとパイナップルのスプライトには、それぞれ、大きさを100%に初期化するプログラムと、それぞれの音声が認識されたときに自分の大きさをちょっと大きくするというプログラムを設定します。背景、りんご、パイナップルのそれぞれに異なるプログラムを作成することに注意してください。

りんごとパイナップルのスプライトを作成し、背景を設定。背景に設定するプログラムは、[緑の旗が押されたとき]-[ビデオを“切”にする]-[音声分類モデルURL“*”]-[確度のしきい値を“0.9”にする]
りんごのスプライトのプログラム。[緑の旗が押されたとき]-[大きさを“100”%にする]というプログラムと、[音声ラベル“りんご”を受け取ったとき]-[大きさを“10”ずつ変える]というプログラム
パイナップルのスプライトのプログラム。[緑の旗が押されたとき]-[大きさを“100”%にする]というプログラムと、[音声ラベル“パイナップル”を受け取ったとき]-[大きさを“10”ずつ変える]というプログラム

 実行してみると、りんごかパイナップルの、呼びかけた方だけが呼びかけた回数だけ大きくなる作品が出来上がりました。

“りんご”と呼びかけ続けてりんごが大きくなった状態

 実行した動画をご紹介します。

音声認識でりんごとパイナップルを判別する「Scratch」プログラム - 窓の杜

 機械学習のデータを利用するときは、学習データの質が重要です。また、何かを認識させたいときに、“認識させたくない状態”の方をどうやって除外するかということがプログラミングの重要なポイントになってきそうです。バックグラウンドノイズも学習済みなので、雑音は判断してくれますが、どんな音でも“りんご”か“パイナップル”に振り分けられてしまうと、仕組みを作れません。この記事の例では“確度”を調整することで対応しました。他にも、このサンプルでは判定率を上げるために、“りんご”と“パイナップル”というなるべく発音の遠い音2つを選んだり、多少誤認識があってもあまり満足感が下がらないで済む作品にするという工夫をしています。

 このような簡易的な仕組みを作ってみるだけでも、音声認識データの特徴や、それを使う時の壁がよく見えて、リアルな世界の機械学習データやプログラムの素晴らしさに気づくことになると思います。ぜひ挑戦してみてだくさい。

 子どもでも気軽に使えるTensorFlowの機械学習のツールのいずれかと専用の「Scratch」のいずれかを使用した小中学生向けのプログラミングコンテスト“キッズ AI プログラミングコンテスト 2020”をGoogleが開催しています。まだ応募は間に合うのでぜひこちらもチャレンジしてみてはいかがでしょうか。