
🎉 はじめに
「セッションAI秘書? 録音さえあればすぐ作れるでしょ〜!」
……と、鼻息荒くスタートした自分を、今なら優しく抱きしめてあげたいです。
正直、文字起こしまでは余裕でした。
Whisper様が秒速で文字にしてくれるし、GPTに要約もお願いすれば、なんとなくそれっぽい形になる。
ここまでは楽勝モード。
問題はその先です。
話者分離と感情スコア
これが想像以上の深い沼でして……
「誰が話してるか」をAIがポンコツに間違えるわ、分割ポイントが変なところで切れるわ、感情スコアが全部ポジティブ!で無意味になるわ。
結局、人間の知恵と後処理が必須。
AIに全部任せてお茶をすすってるだけ、なんて夢物語でした。
この記事では、そんな私の失敗と試行錯誤のリアルをちょっとおもしろく、ちょっと自虐的に残しておきます。
もし同じ道を歩く方がいたら、これが少しでもヒントになれば嬉しいです🙏✨
🎙️ Whisperの限界に泣く
文字起こし界の王者、Whisper様。
無料でこれだけ認識してくれるのは正直神。神なんです。
でも「王者でも人間の耳には勝てない」っていう現実を、今回痛感しました。
✅ 設定できること
- 言語指定 → 「ja」とか「en」とか、迷子にさせないようにお膳立てできます。
- モデル選択 → 「tiny」じゃなくて「large」を選んだら認識が少しマシに。
- 文字起こしモード → 「transcribe」か「translate」か選べる。今回は翻訳じゃなく文字起こしだけに集中させた。
これだけ聞くと、完璧に思えるじゃないですか?
ええ、私もそう思ってました。
✅ 設定してもダメだったこと
- 話者が誰かは絶対わからない
これ、Whisperには無理ゲーでした。2人でしゃべってても、全部一人のモノローグ扱い。 - 会話がごっちゃになる
発話の切れ目が絶妙にズレるので、文章の途中でブツっと切れたり、相槌が本題にくっついたり。 - 専門用語とか固有名詞が謎に変換される
「DMM英会話」が「なんか変な呪文」にされたこと数知れず。
✅ プロンプト工夫でどこまでできたか
Whisper自体はプロンプトで制御できないので、GPTであとから整形してカバーする作戦にしました。
整形プロンプトのポイント👇
- 「話者が変わったら必ず改行して!」とお願いする
- 「相槌は必ず切り離して!」と泣きつく
- 「長文は自然なまとまりで切って!」と頼み込む
結果👇
それなりに整うけど、完璧ではない!
思い込みで間違った話者にしたり、謎の段落を作ったり…。
最後は結局、人間が確認して直すしかありませんでした。
🎤 Google Speech-to-Textの現実
Whisperで泣いて、次の沼に飛び込んだのがGoogle Speech-to-Text様。
さすがGoogle、設定だけで「話者分離できますよ(ドヤ)」と書いてあったので、「これだーー!」と飛びついたんですが…
✅ バケット問題
Google Cloud Storage バケット必須
ファイルをColabから直接送る?無理です。
一度バケットにアップロードしてからじゃないと認識してくれません。
しかも、初めて作る人には「バケットって何?どこ?」っていう罠あり。
私も10分迷子になりました。
✅ ローカルアップロードの罠
「ローカルPCから直接ポイッと上げたいな~」→ できません
ColabとかPythonでAPI叩く場合、ローカルファイルをそのまま渡すのは非対応。
とにかくバケット。
バケットが神であり門番。
結果:「とりあえず試したいだけなのに、バケット作業で体力を持っていかれる」
✅ 話者分離が上手く動く条件
Googleさんの話者分離は理論上は素晴らしい。
ただし、以下の条件を満たさないと地獄です👇
- 音声がステレオ録音で、話者ごとにチャンネルが違うと完璧。
- モノラル音声だと頑張って推測するが、間違えることも多々。
- ノイズが少なく、被りしゃべりがないと嬉しい。
- 音質が良いと成功率UP。
なので、Zoom録音とかスマホ1本で録ったモノラルだと「あれ?一人扱いされてる?」 っていうのは普通に起きます。
以上、Google Speech-to-Textの夢と現実でした。
設定多めでハマるけど、ハマれば強い!…かも?🐸
📊 感情スコアは話者分離が命
はい。
ここが今回の一番大事なところです。
もう一度言います。話者分離が命です。
(大事なことなので3回言いたい。)
✅ 一括要約と話者混合の弊害
Whisperくんが頑張っても、話者を無視して一括テキスト化すると
以下の恐怖が起きます👇
- コーチの「良い質問」までポジティブスコアが付く
- 生徒の「曖昧な返事」がコーチの発言に混ざる
- 結果、感情グラフが『謎の山と谷』になる
要するに、コーチ用に欲しい「生徒の感情の波」が「コーチの相槌」と混ざってぐっちゃぐちゃ!
これでは「どこで響いたか」も分からない!
✅ どこがズレると何が起きるか
ズレポイントは主にこれ👇
- 発話の切れ目が雑 → 同じスコアが2人に乗る
- 話者推定ミス → 生徒の不安発言がコーチ発言に吸収される
- 長文でまとめすぎ → スコアが平均化されて山が消える
つまり、ズレる=価値が死ぬ。
✅ じゃあ分割精度を上げるには?
じゃあどうするの?
結論:ちゃんと分割するしかない。
選択肢はこれ👇
1️⃣ 音声から自動話者分離(pyannote.audio or Google Speech-to-Text with diarization)
2️⃣ Whisperでテキスト化 → GPTで発話の切れ目だけを細かく → 話者は手動タグ付け or GPTで推測
3️⃣ いっそ収録時にマイクを分ける or ステレオ分離で録音する(めちゃ有効)
このどれかを組み合わせるしかないです。
人力で後からタグ付けするのが一番確実だけど、毎回は無理。
ということで、感情スコア=話者分離が命!
これだけはどうか心に刻んでください🙇♀️🙏
🤖 女将の耳打ち機能ができるまで
実はこの開発、最初は「コーチの後ろでAIがひそひそ耳打ちする機能」を作ろうとしてたんです。
その名も『女将の耳打ち機能』。
お店の奥から「旦那様、あのお客様は…」ってやつです(伝わる?)。
✅ 発話単位の裏分析
これをやるには、コーチと生徒の会話を一発ずつバラして
「どこで心が動いた?」「どこで逃げてる?」を見抜いて、
AIがコーチにだけこっそりアドバイスを生成する必要がありました。
つまり、会話ログ全部を
「生徒の不安 → AIの耳打ち → コーチの次の質問提案」
という形にリアルタイムで繋ぐ感じ。
✅ ここを外すと価値が半減する理由
この機能の肝(きも)は、“生徒の心の波だけ”を正確に拾うこと。
話者が混ざったままだと👇
- 生徒の心配も、コーチの質問も、全部一緒くたに分析されて
- AIが「先生のナイスフォローをさらに掘り下げて!」とか意味不明な耳打ちをする
結果、「AIがわけのわからんお節介をするツール」になり、信用が地に落ちます😂
✅ 他社との差別化ポイント
この『女将の耳打ち』を真面目に作れたら、他社の議事録ツールとは一線を画す武器になります。
なぜか?
- 他社は「文字起こし+要約」だけ。
- うちは「文字起こし+感情+次の一手までAIが提案」。
これ、人力だと絶対無理。
だからAIコーチ補佐はめちゃ価値があるんです。
🚫 でも結局これは諦めた
ただし…
話者分割が完璧じゃないとデータが全部ズレます。
ズレたら女将は誤爆します。
- 生徒の本音をコーチの相槌に付けてしまう
- 要らんところを深掘りしろと言い出す
- コーチを混乱させる
これでは補佐どころか、足を引っ張る呪いのAIです。
ということで泣く泣く、「正確な話者分割なしで女将を動かすのは無理」と結論付け、この機能だけは一旦封印することにしました…🥲
📝 今回の学び
あれこれ試行錯誤して、無駄にファイルを何百MBも生み出し、クラウドの使用料をちょっとだけ溶かした結果
「これは知っておいた方がいいぞ」という学びを、ここにメモしておきます。
✅ WhisperとSpeech-to-Textの住み分け
- Whisper
→ 小規模・短時間の文字起こしでサクッと試すとき向け。
英語以外でもそこそこ頑張るが、話者分離は苦手。 - Google Speech-to-Text
→ バケットとか認証とか面倒だけど、正式APIで話者分離が欲しいときの本命。
長時間ファイルならこっちの方が確実。
つまり、「とりあえず試す:Whisper」「本番で使う:Google」この棲み分けが今のベストです。
✅ 話者分離をAIで補正する方法候補
いくらSpeech-to-Textを使っても完璧ではないので、最終的にはAIの後処理で微調整する案も考えました。
- ① GPTで文脈から話者を推測してタグ付けする
- ② 一括でミスを探して直す専用プロンプトを流す
- ③ わからないところだけ人が直す前提でエラー箇所をリスト化する
完璧は無理でも「許容範囲でズレない程度」にはできるかも。
✅ 人間の意図を読ませる設計の重要性
今回痛感したのはこれ。
「AIに丸投げ=正確」なんて幻想。
特に話者分離とか感情とか、人間でも微妙な判断はAI単体では絶対にブレます。
だからこそ、
- AIが誤解しないようにプロンプトをめちゃ丁寧に書く
- データを分割してから渡す
- 分割精度が低いならAIに追加ヒントを与える
みたいに「AIが誤解しない環境」を作っておくのが、結局一番コスパが良いです。
というわけで、次はこの学びを活かして、もっと楽して精度が出る仕組みを作っていきます。✨
🔑 まとめ
今回の沼旅の結論はめっちゃシンプル。
話者分離が命なら、APIだけに人生預けちゃダメ!
🎙️ 感情分析は「誰が言ったか」で意味が変わる
誰の言葉か分からない感情スコアなんて、スパイスの抜けたカレーみたいなもの。
結局、分析の精度と意味が半減してしまう。
🏗️ 泥臭くても構造化を自前で持つべし
AIがポンコツな部分は、「人間が先に仕組みを作ってあげる」のが正義。
バッチ処理? ルール整形?面倒でもやったもん勝ち。
🚀 要するに…
- 話者分離は複数手段でバックアップを持とう!
- 感情分析は話者情報とセットじゃないとゴミ化する!
- 最後は自分で構造化しないと泣きを見る!
これが今回の教訓です🫡
さて、次はどの沼にハマろうかな…(遠い目)