モールス解読にパターン認識・機械学習を考える(その2)

 モールス解読にパターン認識・機械学習を考える、その2です。

先週、NHK の「知的探求フロンティア タモリ・山中伸弥の!?」で「AIは人間を超えるか」をやっていました。

それを見ながら、2017年 に書いた「モールス解読にパターン認識・機械学習を考える」を改めて ChatGPT に聞いてみたらどうなるかが気になり、さっそく聞いてみました。

最初、単純に
モールス信号の音を音声認識技術で解読するプログラムを作りたい。ハードウェアはRaspberry PiかArduinoを使いたい。
と聞いたら、音の長さで判定する方法を回答してきました。

これでは意図と違うので、
再度、
音声認識技術(Speech Recognition)を使ってモールス信号の音を解読したい
と聞いたところ、

🎯 目的に応じた2つの音声認識アプローチ
アプローチ 内容 難易度 備考
1. 音響分類モデル モールス音を「ドット」「ダッシュ」「区切り」に分類する ★★★ 機械学習による音のパターン分類
2. End-to-End音声認識 モールス音から直接テキストに変換(ASR) ★★★★★ ディープラーニング/音声合成モデルが必要
→ おすすめ:① 音響分類モデルで音を文字に変換する方法
理由:より軽量でRaspberry Piでも動かせる、リアルタイム性あり。

と回答してきました。

① は、いろいろな速度のモールス信号に対し、短点、長点の区別が難しそうです。

さらに
🧠 代替案:Pretrainedモデルの応用
もし自作が難しい場合:
ESPnet や DeepSpeech などのASRをファインチューニングして使う
• OpenAIの Whisper に「訓練済みモールス音声」を聞かせる(→精度は微妙)
• MediaPipe Audio Classification で軽量分類モデルを使う(Google製)

📦 Raspberry Pi対応の軽量モデル例
モデル 特徴 備考
Edge Impulse 超軽量音分類モデルを自動生成 モールス音をアップロードして訓練可能
TensorFlow Lite Pi上でリアルタイム実行可能 .tflite に変換して使う
MediaPipe Audio 少量データでの分類が得意 Pythonでも実行可能

🧠 提案:Edge Impulse + Raspberry Pi構成
1. Edge Impulseでモールス信号の「ドット」「ダッシュ」「無音」の音を収録
2. モデルをトレーニング
3. .tflite 形式でRaspberry Piにダウンロード
4. Pythonで分類し、出力を文字に変換
→ 軽量・高精度・リアルタイムの構成が可能。

✅ まとめ
要素 内容
音声認識技術 音を分類する音響分類モデルを作る or 転移学習する
ハード Raspberry Piで十分可能(TF LiteやEdge Impulse対応)
メリット 長さ判定よりもノイズ耐性や精度が高い
注意点 モールス信号音の学習データが必須(自作録音もOK)
と、回答してきました。

そこで
ESPnet や DeepSpeech などのASRをファインチューニングして使うとは、具体的にどうするのでしょうか?
と質問したところ

ESPnet や DeepSpeech などのASR(音声認識)モデルをモールス信号音にファインチューニングするというのは、一般的な音声認識モデルを、モールス信号の音 → テキスト変換に適応させるということです。

モールス信号は人間の発話とは異なり、単純な音(ピッというビープ音)とその長さ・間隔に意味があるため、通常のASRとは異なるデータ構造・工夫が必要ですが、エンドツーエンドの音声→文字モデルは活用可能です。
との回答でした。

さらに
🎯 目的
モールス信号の音声(ピッ・ピピー)をそのまま入力し、モデルが文字(例:HELLO)を出力する。

✅ 方法①:ESPnetを使ってモールス信号認識モデルを学習(推奨)
ESPnet(End-to-End Speech Processing Toolkit)は、音声→テキストのディープラーニングモデルを訓練・ファインチューニング可能なフレームワークです。
モールス信号のような特殊用途にも使えます。

🧪 手順(ESPnetを使ったファインチューニング)
と、手順も教えてくれました。

さらに
✅ モールス信号にASRを使う上での注意点
ポイント 内容
音声は人間の声でなくビープ音 モデルの再学習は必須
データの準備が重要 .wav + 正解テキスト を大量に作る
ラベルは文字単位 HELLO など1文字ずつの転写でOK
微調整ではなくフルファインチューニングが必要 モールス音の特徴は通常音声と異なるため

🔚 まとめ
項目 内容
おすすめ手法 ESPnetでモールス音声→文字に変換するモデルを訓練
必要なもの .wav音声ファイルと正解テキストのセット
難易度 中〜上級(Linux, Python, Deep Learning経験があると◎)
Raspberry Pi対応 学習はPCやColabで行い、推論だけPiでも可能
と、纏めてくれました。

そこで
ESPnetモールス用レシピテンプレート(最低限構成)を教えてください。
とお願いすると

ESPnetでモールス信号音声を文字列に変換するための最小限のレシピテンプレートを以下にまとめます。
これは espnet/egs2 ディレクトリ内にプロジェクトを作成し、最低限の構成で訓練と推論が行えるようにするものです。
と、具体的な手順を教えてくれました。

続けて
HELLOとJR1KDAの音声データセット(学習用)を用意して
とお願いしたら、
「学習用音声データセット」を作成してくれました。

提供されたデータセットです。
1-.jpg

✅ データ仕様
項目 内容
信号種 モールス音(純音ビープ)
符号速度 約 20 WPM
音高 600 Hz(標準的)
音長 ドット = 1単位, ダッシュ = 3単位
ファイル形式 モノラル WAV(16bit PCM, 16kHz)
ノイズ 無し(合成音)
バリエーション数 各文字列ごとに5〜10通り

ここまで教えてもらったからには ESPnet を勉強して、作ってもらったデータでの検証をしないといけない気がしてきました。

恥ずかしながら ESPnet って、初めて知りました。(;^ω^)

ChatGPT が作成した音声ファイルです。
hello_01.wav

この記事へのコメント