日常をセンサーで記録してみたブログ

IoTの技術を使って日常をデジタルデータにして気づかなかった面白そうなことを探してみるページ。

録音データ、本当に活用できていますか?:信号処理とWhisperで構築する「お宝」抽出パイプラインの設計思想

1. はじめに:AI時代の「データの洪水」をどう捌くか

ボイスレコーダーで毎日数時間の記録を取っていると、すぐに数テラバイトの音声データが積み上がります。これをすべてWhisperなどのASR(自動音声認識)に投げるのは、計算リソース(GPU時間)の無駄であり、何より「無音区間でのハルシネーション(幻覚)」というAI特有の問題に直面します。

本記事では、「信号処理による特徴量抽出」と「AIによる文字起こし」を組み合わせた、効率的な音声解析パイプラインの構築について解説します。

2. 解析パイプラインのアーキテクチャ

本システムは以下の4つのステージで構成されるパイプラインとして設計しました。

  1. Segmentation: 長尺ファイルを1分単位のチャンクに分割

  2. Audio Profiling: torchaudio を用いた物理量(RMS, Spectral Flatness)の抽出とスコアリング

  3. Heuristic Selection: タイムウィンドウ(30分間隔)内での代表ファイル選出

  4. AI Transcription: 厳選された区間のみを Whisper-medium で推論

3. 実装の肝:信号処理によるフィルタリング

3.1 RMS(音量)とSpectral Flatness(スペクトル平坦度)

単に音量が大きい箇所を探すだけでは、空調の「ゴー」という音や電車の走行音を拾いすぎてしまいます。そこで、**Spectral Flatness(スペクトル平坦度)**を導入しました。

  • RMS (Root Mean Square): 音のエネルギー。

  • Spectral Flatness: 音のスペクトルがどれだけ平坦かを示す指標。

    • ホワイトノイズに近い音(ザーという音)ほど 1.0 に近づく。

    • 声のように特定の周波数にエネルギーが集中する音ほど 0 に近づく。

この2つを組み合わせ、独自の「お宝スコア」を算出します。

# スコア算出ロジックの核
score = rms / (flatness + 1e-5)


この式により、「ノイズが少なく、明瞭な声が入っている区間」をアルゴリズム的にあぶり出します。

3.2 30分間隔の代表選出アルゴリズム

一日全体の流れを把握するため、単純な「上位N個」ではなく、**「時間帯ごとの代表」**を選出します。

pandasgroupby を活用することで、各時間枠内で最も高いスコアを持つファイルを抽出します。

4. Whisper推論の最適化とハルシネーション対策

文字起こしフェーズでは、1分単位のチャンク処理特有の課題を以下の設定で解決しました。

  • VRAM管理: RTX 3060の12GBを活かし、mediumモデルを採用。

  • ハルシネーション抑制: 無音やノイズ区間を無理やり文字化させない設定。

    • no_speech_threshold=0.6: 無音判定を厳格化。

    • condition_on_previous_text=False: チャンク間の文脈依存を切り、ループ現象を防止。

5. 分析を加速させる Reviewer GUI

解析結果のCSVをフロントエンドとして活用するTkinter製のGUIツールを構築しました。

  • Treeviewによる動的ソート: ファイル名(時間軸)での確認と、スコア順(重要度軸)での確認をトグル可能に。

  • 非同期再生: pygame ミキサーを使い、リストをダブルクリックした瞬間に該当の1分間をロードして再生。

6. 考察:環境音のセマンティック解析

今回面白かったのは、文字起こし結果から「今、電車に乗っている」「オフィスにいる」といったコンテキストの自動推測の可能性が見えたことです。

例えば、電車の通過音がある区間はWhisperがハルシネーションを起こしやすいですが、逆に言えばその信号特性を捉えることで、行動ログとしてのタグ付けが自動化できます。

7. まとめと展望:LLMへの橋渡し

本パイプラインにより、数時間の録音をわずか10分〜15分程度の「代表区間」の確認だけで把握できるようになりました。

今後の展望としては、厳選された音声チャンクを Gemini 1.5 Pro/Flash API に投げ、背景音からの状況推測や、より高精度なマルチモーダル要約を自動生成するステージを追加する予定です。

技術スタック:

  • Python 3.11

  • PyTorch / torchaudio

  • OpenAI Whisper

  • NVIDIA GeForce RTX 3060 (12GB)