はじめに
この投稿は私がラズパイで自作Alexaを開発した知見を投稿するシリーズです。
同じ現象に当たった時の助けになればいいなと思ったので、始めることにしました。
Wake word とは?
デバイスがAVSにリクエストを送るトリガーになる特定の単語のことです。
alexa, amazon, echo, Computer,
前提条件
Alexa Enabled なオリジナルのデバイスにのみ適用できます。
Amazon Echo, Dot, Tapなど、Amazon 純正のデバイスは上の単語リストから選ぶことになります。
alexa client は、例によって AlexaPiを使います。
alexa pi の構成
ざっくりしていますが、ユーザーが何かを発話したときに、
- Detectorでwake wordを判定
- WakewordだったらDeviceに引き渡して録音
- 録音した音声をAVSに投げる
といった感じで処理しています。
Detector
AlexaPi では、Snowboy という hot word detection ライブラリを使っています。
Snowboy における hot word の検知のやりかた
AlexaPi では、Snowboyのコードの一部を改造して利用していますが、考え方は同じです。
以下のソースは、説明のため一部コメントを足しています。
:
# 1. 検知するホットワードファイルのリストを与えます。
models = ["resources/alexa.umdl", "resources/Stop.pmdl", "resources/Wakeup.pmdl]
# 2. ホットワードを検知したときに呼ばれるコールバックを登録します。(それぞれのコールバックの中身は省略しています)
callbacks = [alexa, go_back, go_out, stop]
# 3. snowboyインスタンスを生成するときにモデルのリストを渡します。
detector = snowboydecoder.HotwordDetector(models, sensitivity=0.5, recorder=recorder)
alexa_device = Device(recorder=recorder)
:
# main loop
# 4. 検知を開始するときにコールバックのリストを渡します。
detector.start(detected_callback=callbacks,
interrupt_check=interrupt_callback,
sleep_time=0.03,
sensor_detect_callback=someone_detected)
:
オリジナルのホットワードファイルとコールバックをsnowboyに渡せば、検知してくれるというわけです。
hotword の作り方
1: https://snowboy.kitt.ai/ にアクセスします。(要サインアップ)

2: Create Hotword を選択します。

3: ホットワードの言語を選びます。(日本語もできます)

5: 検知できるかテストします。

検知できたら、ファイルをダウンロードします。
(例では、wake up.pmdl というファイルを作成しました。)
あとは、このファイルをデバイス側にインプリメントすれば、"wake up" を wake wordにすることができます。
wake word の検知率を上げる
snowboy は、1回自分がサンプリングして作っただけでは、まさに自分用です。
検知率を上げるには、キーワードをいろんな人に喋ってもらんて、サンプリングされることが必要になります。
2000人がサンプリングすれば、一般的なワードファイルとして昇格します。(後述)
いろんな人にサンプリングしてもらえばもらうほど、検知率が高くなるということです。
すでに存在するワードにサンプリングを追加する方法を以下に記載します。(作るときとあまりかわりません。)
- https://snowboy.kitt.ai/ にアクセスします。(要 サインアップ)
- サンプリングするホットワードを探します。

ホットワードのリンクをクリックします。
3.サンプリングします
Record and download the modelをクリックします。

あとは、作成時と同じです。3回録音ー>テストー>ダウンロードする。
補足
ホットワードのファイル拡張子には、umdl と pmdl があります。
umdl
様々な人が話したホットワードをリスティングしているファイルです。alexa でホットワードを検知させたい場合は、自分で録音するより、alexa.umdl があるのでこちらをつかいましょう。
pmdl
自分で作成した独自のホットワードです。
作成例のところにもありましたが、gender(性別)とage group(年齢の範囲)を選択する必要があります。自分以外にもホットワードを検知させたいような場合、何人もの人に話してもらって、いくつかのパターンでホットワードファイルを作ることになります。
最後に
ホットワードを自分で作ることができるようになると、alexaとまた仲良くなれた気がしていいですね。
ぜひ、デバイスつくるなら、やってみてはどうでしょう??