防災放送をデジタル化してみた: 続き
最初の記事 は引っ越して1ヶ月で書きましたが、そこからだいぶ経ちました。。その間色々ありましたが、地道に改善を追加しています。最初公開したときに比べると、こういうところを改善しています:
- 文字起こしエンジンを Amazon Transcribe から Google Speech-to-Text に切り替え
- デプロイ周りは GitHub Actions から行うように
- モバイル通知の対応
まずは文字起こしエンジンから。
Amazon Transcribe から Google Speech-to-Text に切り替え
公開後、文字起こしの精度をどう上げるか考えていました。試したのは3件のサービス: Amazon, Azure と Google。結局 Google を採用しましたが、その理由は聞き取り精度のためでした。完璧というわけではないのですが、 Amazon と Azure よりはマシでした。 Azure は自分の音声とトランスクリプトを用意すればさらにカスタマイズしたサービスを作ることができるらしいけど、今回のサービスとしては金額的に高すぎました。今のところ Google で数ヶ月運用していますが、文字起こし費用は月200円未満。台風が多かった時期は500円程度。
OpenAI が ChatGPT などで有名ですが、 Whisper という文字起こしモデルも公開しています。こちらも試してみたのですが、致命的な課題がありました。
幻覚症状がどうしてもコントロールできなかった。大体のお知らせは「お知らせ終わります。【終わりのチャイム音】」で終わりますが、 Whisper の解釈は「お知らせ終わります。ご視聴ありがとうございました」でした。
今後改善されるか、私の設定が悪かったのか、GPT-4とかで直すした方がいいのかまだはっきりわかりませんですが、今のところその4つのサービスのうち Google が優位。
デプロイ周りは GitHub Actions から行うように
前の記事では、Raspberry Pi にログインして git pull するというデプロイ手順でしたが、さすがに面倒でした。実物サーバーにデプロイするのは久しぶりで不慣れなところが色々ありましたが、結局ある程度スムーズにできるようになりました。現在はこういう流れになっています:
- GitHub Actions でフロント/バックエンドが両方コンパイルされる
- Raspberry Pi に tailscale を使って SSH で接続する
- 新しいファイルを rsync でコピーする
- Raspberry Pi 内で npm install 行う
- アプリサーバーを再起動する
ここで一番助かっているのは tailscale です。tailscale は VPN アプリでもあるのですが、ネットワークに繋ぐようなVPNではなく、peer-to-peer みたいな感じでクライアントがインストールされているなら直接接続できる様なVPNです。デプロイ先の Raspberry Pi に tailscale のクライアントの入れ、 GitHub Actions 用の Action を設定 すれば、ポート開けとかNAT調整とかファイアウォール設定とかしなくてもGitHub ActionsからSSH通信できます。
モバイル通知の対応
iOS 16.4 が前の記事の翌?翌々?日にリリースされ、ネイティブアプリなしでもバックラウンドでプッシュ通知をサーバーから受け付けられる様になりました。(Androidはこの機能数年前ぐらいに追加されたらしいですが、私は iOS しか使っていません。。)
ただ、ちょっとハマったのは、通知を受け取る様になるために、ユーザーがこのサイトをホーム画面に追加しなければならない。この操作は一般的ではないため説明するのがいつも混乱します。
終わりに
さらに改善を続けたいと思います。今はこんな形で考えています:
- 音声認識の半ローカル化
- 現在、時報とお知らせをどう区別しているかというと、文字起こしサービスから文字が返ってきてるかで判定しています。文字起こしサービスは入力の音声の時間で課金されるので、内容があるお知らせのみ文字起こしすれば節約できる。また、お知らせ終了後の録音終了判定がより正確になります。
- 文字起こし精度向上
- OpenAI の Whisper モデル もそうですが、ローカルで動かせるモデルも色々あるのでそういうのも試してみたい。
- もし自分の音声でトレーニングできるモデルもあればそれで試してみたい。それぞれのサービスは辞書の機能はありますが、ほとんど効かないので最初から教師データを設定したい。
- お知らせ内容の要約
- ChatGPT や GPT-4 を使って要約を作ってみましたが、一貫性を保った出力を制御するのがやや難しい様です。
最後まで読んでいただきありがとうございました。 もし質問などあれば遠慮なく連絡ください。