💭 検証・気づきログ

AI文字起こしの落とし穴!話者分離と感情分析のリアル

AI文字起こしの落とし穴!話者分離と感情分析のリアル

🎉 はじめに

「セッション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がポンコツな部分は、「人間が先に仕組みを作ってあげる」のが正義。

バッチ処理? ルール整形?面倒でもやったもん勝ち。

🚀 要するに…

  • 話者分離は複数手段でバックアップを持とう!
  • 感情分析は話者情報とセットじゃないとゴミ化する!
  • 最後は自分で構造化しないと泣きを見る!

これが今回の教訓です🫡

さて、次はどの沼にハマろうかな…(遠い目)

  • この記事を書いた人

SHIRAN

「コードは知らない。でも作れる。」AIとツールで便利を生む非エンジニア。挫折も経験しながら、今は作る楽しさを発信中。詳しくはこちら

-💭 検証・気づきログ
-, ,