
🎯 今回のゴール
コーチと生徒、どっちがどれだけおしゃべりしてたか…ズバッと数字とグラフで暴きます!
今回は👇
誰が何回しゃべったかをカウント
- 「コーチばっか話してない?」「生徒が黙りすぎてない?」をパーセンテージで丸裸
- ついでにGPT先生に「今回はコーチ主導だったね!」みたいな一言コメントを書いてもらう
- まとめて
report.json
にドン!して、ポータルでパッと見れる
これさえあれば、一方通行セッション撲滅!
毎回の話しすぎ・話さなすぎ問題も一発解決です🎉
🧰 準備するもの
今回の発話比率チェックで使うのは、この2つだけ!
✅ 1. セッション文字起こしテキスト
手元にある session_transcript.txt
を使います。
内容は、コーチと生徒の会話が改行ごとに並んでいる状態です。
✅ 2. speaker
情報を付ける準備
このテキストにはまだ「誰が話したか」が付いていません。
でも大丈夫!
発言が交互になっているので、ルールで自動付与できます。
✅ 3. Colab を開ける環境
テキストを分割して speaker
を付ける作業は、Google Colab を使ってサクッとやります。
コピペだけで完成するスクリプトをこの記事で用意してるので安心です!
🗝️ ポイント
speaker
付きのJSONができれば、比率分析はすぐできる!- わざわざ手入力しなくても、Colabで自動化しちゃおう!
🗂️ ステップ0:speakerタグを自動で付けよう
まずは文字起こしテキストからコーチと生徒、どっちが話したかを自動で付けていきます!
発言は交互になっているので、0, 2, 4, ...
はコーチ、1, 3, 5, ...
は生徒…というルールで一気に付けちゃいます。
✅ Colabサンプルコード👇
# ✅ 必要なモジュールをインポート
import json
# ✅ テキストファイル(session_transcript.txt)をアップロード(Colabの場合)
from google.colab import files
uploaded = files.upload()
# 例: session_transcript.txt を選んでアップロードする
# ✅ テキストを読み込んで分割
filename = list(uploaded.keys())[0]
with open(filename, "r") as f:
lines = f.read().strip().split("\n\n")
# ✅ speakerを交互に付ける
segments = []
for i, line in enumerate(lines):
speaker = "coach" if i % 2 == 0 else "student"
segments.append({
"speaker": speaker,
"text": line.strip()
})
# ✅ 先頭5件だけ確認
for s in segments[:5]:
print(s)
# ✅ JSONで保存
with open("session_with_speaker.json", "w") as f:
json.dump({"segments": segments}, f, ensure_ascii=False, indent=2)
# ✅ Colabからダウンロード
files.download("session_with_speaker.json")
print("✅ 完了!speaker付きJSONがダウンロードされます!")
📂 ポイント
files.upload()
でsession_transcript.txtをColabにアップ- 自動で
speaker
を付与 - JSONを作って自動でダウンロード
これで次の工程に進む前に、「speaker付きJSON」が確実に手に入ります!
🗂️ ステップ1:発話数をカウントしよう
speaker
付きのJSONができたら、いよいよ「誰が何回しゃべったか」を数えていきます!
✅ Colab用コード
まずは session_with_speaker.json
を Colab にアップロードしてから👇
# =====================================
# ステップ0: Colab にファイルをアップロード
# =====================================
from google.colab import files
uploaded = files.upload()
# =====================================
# ステップ1: JSONファイルを読み込み & 発話数をカウント
# =====================================
import json
from collections import Counter
# ファイル名(アップロードした名前に合わせて)
filename = "session_with_speaker.json"
# JSON読み込み
with open(filename, "r") as f:
data = json.load(f)
# "segments" の中身を取り出す
segments = data["segments"]
# speaker ごとにカウント
speaker_counts = Counter()
for item in segments:
speaker = item.get("speaker", "unknown")
speaker_counts[speaker] += 1
print("発話数:", speaker_counts)
📌 ポイント
files.upload()
で JSON をアップロード"segments"
の中の"speaker"
を一個ずつ数えるだけ!- 出力結果は
{'coach': X, 'student': Y}
の形で表示されます
🗝️ これでわかること
- 誰がどれだけ話してたのかが 数字 で一目瞭然!
- ここから比率(%)を出すのもラクラク!
📊 ステップ2:比率(%)を計算しよう
発話数がわかったら、次は 「全体の中で何%しゃべったのか」 を計算します!
✅ Colab用コード
ステップ1の続きで、そのまま書いてOK👇
# ステップ1で作った speaker_counts を使う
# 合計を出す
total = sum(speaker_counts.values())
# speakerごとに比率を計算(小数第1位まで)
speaker_ratio = {k: round(v/total * 100, 1) for k, v in speaker_counts.items()}
print("発話比率(%):", speaker_ratio)
📌 ポイント
sum()
で総発話数を算出- 各 speaker の数を全体で割って、パーセンテージにするだけ!
round()
で小数点を揃えるとキレイに見える!
🗝️ これでわかること
- コーチがどのくらい話してた?
- 生徒がどのくらい話してた?
- これが数値化されると、「一方的すぎない?」を後で確認できる!
📈 ステップ3:円グラフを作ってみよう
発話比率が数字でわかったら、今度は 円グラフ にしてパッと見でわかるようにしましょう!
色がつくだけで、比率の印象が全然違います✨
✅ Colab用コード
ステップ2の speaker_ratio
を使って、そのまま👇
import matplotlib.pyplot as plt
from google.colab import files
# ラベルと値
labels = speaker_ratio.keys()
sizes = speaker_ratio.values()
# 色指定
colors = ["#66c2a5", "#fc8d62"]
# 円グラフ作成
plt.figure(figsize=(6, 6))
plt.pie(
sizes,
labels=labels,
autopct="%1.1f%%",
startangle=90,
colors=colors
)
plt.axis("equal")
plt.title("発話比率(コーチ vs 生徒)")
# ✅ 先に保存!
filename = "speaker_ratio_pie.png"
plt.savefig(filename)
# ✅ その後に表示
plt.show()
# ✅ そしてダウンロード
files.download(filename)
📌 ポイント
matplotlib
を使えば一瞬でカラフル円グラフ!autopct
で%表示をオンにstartangle=90
で切り口を12時の方向に揃えると見やすい!
🗝️ これでわかること
- 誰がどれだけ話してたかが 一目瞭然!
- 見た目でバランスを確認できるから、フィードバックにも便利!
次のステップでは、この比率をもとに「今回のセッションの傾向」をAIに書かせちゃいます🚀
💬 ステップ4:GPTにコメントを作ってもらおう
数字とグラフだけでも便利だけど、どうせなら 「今回のセッションはどっち主導だった?」 をGPTに一言でまとめてもらいましょう!
これがあると、後から見返すときに一瞬で雰囲気がわかる! ので超便利です✨
✅ Colab用コード
前のステップで作った speaker_ratio
を使って👇
from openai import OpenAI
# OpenAIのクライアントを作成
client = OpenAI()
# GPTに投げるプロンプト
prompt = f"""
あなたはコーチングセッションの分析アシスタントです。
以下の発話比率をもとに、セッションの特徴を一言コメントでまとめてください。
発話比率: {speaker_ratio}
"""
# GPTにお願いする
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "あなたは優秀な分析アシスタントです。"},
{"role": "user", "content": prompt}
]
)
# コメントを取り出す
speaker_comment = response.choices[0].message.content
print("GPTのコメント:", speaker_comment)
📌 ポイント
prompt
に発話比率を渡して、「一言コメント」をお願いするだけ!- 例:「今回はコーチ主導で進行したセッションでした」 みたいな一言が自動で出てくる!
🗝️ これでできること
- 数字だけじゃなく、AIが「状況」を要約してくれる
- 後から見返したときに「おお、このときは生徒が頑張って話してたな〜」が一瞬でわかる
💾 ステップ5:report.json
に保存しよう
発話数 ✅
比率 ✅
コメント ✅
…と全部揃ったので、あとは report.json
にまとめて保存 しちゃいましょう!
これでポータルでも自動で確認できる状態になります🚀
✅ Colab用コード
下記のコードを実行しreport.json
をアップロードしてください👇
import json
# report.json をアップロード
from google.colab import files
uploaded = files.upload()
filename = list(uploaded.keys())[0]
# 読み込み
with open(filename, "r") as f:
report = json.load(f)
# speaker_ratio と speaker_comment を追加
report["speaker_ratio"] = speaker_ratio
report["speaker_comment"] = speaker_comment
# 上書き保存
with open("report.json", "w") as f:
json.dump(report, f, ensure_ascii=False, indent=2)
# ダウンロード
files.download("report.json")
print("✅ report.json に追加して保存しました!")
📌 ポイント
- 既存の
report.json
に新しい情報をマージ! speaker_ratio
は数値データ、speaker_comment
はGPTの一言まとめ- 保存したら、そのままポータルに置くだけでOK!
🎉 これでできること
- 「感情の波」+「気づき」+「発話比率」 が全部
report.json
に集結! - セッションの振り返りが超スマートになる!
これで今回の比率分析編はミッションコンプリートです✨
📝 おさらいと次回
これで、コーチと生徒の発話バランスを「数字・グラフ・AIコメント」で丸わかり!なデータが report.json
に全部まとまりました✨
これで後から振り返って
- 「一方的すぎた?」
- 「次はもっと生徒に話してもらおう!」
がサクッと確認できます。
次回は、第7回で作った「ポジ/ネガ/ニュートラルだけの感情グラフじゃ物足りない!」という課題をアップデート!
スコア型にして感情のゆらぎをもっと詳しく拾い、
“どこで心が動いたか” をAIにまとめさせてみます。
🔗 関連リンク|AI秘書ツール制作シリーズ
- 1️⃣ 第1回|文字起こし①:Whisperを動かす準備だけしよう!
- 2️⃣ 第2回|文字起こし②:録音ファイルをポイッと、Whisperで文字起こし!
- 3️⃣ 第3回|要点抽出①:ChatGPTで要点だけ抜き出してみた!
- 4️⃣ 第4回|要点抽出②:抽出結果をToDo形式に整えてみた
- 5️⃣ 第5回|要点抽出③:提出用レポートに仕上げてみよう!
- 6️⃣ 第6回|感情分析①:発言ごとの感情をAIで数値化してみた!
- 7️⃣ 第7回|感情分析②:感情の波をグラフで見える化してみた!
- 8️⃣ 第8回|感情分析③:“気づき”を引き出すレポートをつくろう
- 9️⃣ 第9回|感情分析④:発話のバランスから見えてくること(比率分析編)←(今ここ)
- 🔟 第10回|感情分析⑤:感情のゆらぎから“気づき”を拾ってみよう!
- 🏁 【第11回|完結】これが完成形!ポータルに載せる「report.json」をColabで作ろう
💡 迷ったらこちらも