🧪 開発・試作メモ

第6回|感情分析①:発言ごとの感情をAIで数値化してみた!

第6回|感情分析①:発言ごとの感情をAIで数値化してみた!

⚠️ この記事では、非エンジニアの方でも体験できるように、最低限のプロンプト例だけを載せています。実際の運用では、より高品質化した最適プロンプト&自動化フローを使用しています!詳しく知りたい方はお気軽にご相談ください 。

🎯 今回のゴール

今回のテーマはズバリ、「会話の感情を一つずつ数値化してみよう!」 です。

これまでのAI秘書ツールでは、文字起こし → 要点抽出 → レポート化 までを自動でやってきましたが、正直、話し合いって言葉だけじゃなくて 気持ちの波 が大事ですよね。

だから今回は、セッション中にどこがポジティブで、どこがちょっとネガティブだったのか
を1発言ずつ ChatGPT に教えてもらって、「感情のゆらぎ」を可視化する第一歩 を踏み出します。

これをやっておくと、

  • 振り返りが感情込みで深まる
  • 次回のフォローのヒントになる
  • 「いつもポジティブに見えてた人が、実は後半疲れてる…!」とか分かる

などなど、コーチも生徒も ちょっと幸せになる分析 ができます。

🔑 この記事で手に入るもの

  • 1発言ごとの 感情スコア付きリスト(+1 / 0 / -1)
  • すぐ試せる最低限の Colab コード
  • ちょっとニヤける「気持ちの波」の見える化

🧰 使うもの

今回の感情分析を動かすために必要なのは、これだけです👇

✅ 必須アイテム

  • Google Colab
    おなじみのノーインストールPython環境!
    まだ触ったことない人はColabの使い方記事をどうぞ。
  • ChatGPT APIキー
    文字起こしや要点抽出のときと同じ。
    まだ持ってない人はAPIキーの取り方を先にやっておいてください。
  • 文字起こしファイル(session_transcript.txt)
    前回までで作ったセッション文字起こしを使います!
    1発言ずつ分割済みの状態が理想です。

👉 今回の記事でやらないこと

  • バッチ処理(まとめて一気に分析)はやりません!
    → 正確さ重視で1発言ずつやります。
  • 高度なグラフ化は次回!
    → まずはスコアを付けて保存するところまで。

これで誰でも迷わず準備できるはず!

🔍 セッションを発言ごとに分割する

まず、前回の続きで手元にあるのはsession_transcript.txt だと思います。

この中身は、たとえば👇みたいに、ただの文章 or 改行区切りの連続テキストになってるはず。

こんにちは、よろしくお願いします!
今日は英語の発音を見直しましょう。
わかりました!

🛠️ やること

このテキストを、1発言ずつのリストに変換して session_transcript.json として保存 します!

まずは session_transcript.txt をアップロードしましょう👇

from google.colab import files

# ファイルをアップロードする
uploaded = files.upload()

これを実行すると、ブラウザに「ファイル選択」が出るので、PCにある session_transcript.txt を選んでアップロード!

🟢 1発言ずつのリストに変換して session_transcript.json として保存

アップロードが終わったら、すぐ下のコードを再実行すればOKです!

# Google Colabで実行するよ!
import json

# ① テキストファイルを読み込む
with open("session_transcript.txt", "r") as f:
    lines = f.readlines()

# ② 改行を取り除いて、空行を除去
lines = [line.strip() for line in lines if line.strip()]

# ③ JSONに保存
with open("session_transcript.json", "w") as f:
    json.dump(lines, f, ensure_ascii=False, indent=2)

print("✅ JSONファイルができました!")

🔑 大事なコツ

Colab はPCからファイルを毎回「アップロード」しないと認識できません!

(仮想マシンなので、開くたびに記憶がリセットされます)

🗂️ 1発言ずつ感情を付ける

ここが今回のメイン!

作った session_transcript.json を読み込んで、ChatGPT に 1発言ずつ送って「+1」「0」「-1」 の感情スコアを付けてもらいます!

どうして1件ずつ?

  • バッチ処理(まとめて一気に)は楽だけど、精度がブレやすい
  • 1発言ずつだと文脈がズレないので、確実に丁寧な分析ができる

だから今回は手間より質を優先です!

💡 プロンプト(汎用版)

あなたは優秀な感情分析エージェントです。
以下の日本語テキストの感情を +1(ポジティブ)/ 0(ニュートラル)/ -1(ネガティブ)で評価し、数字だけを返してください。

テキスト: 「{発言テキスト}」

🧑‍💻 Colabコード例

from openai import OpenAI
import json

# ✅ OpenAIクライアント作成
client = OpenAI()

# ✅ 発言リスト読み込み
with open("session_transcript.json", "r") as f:
    segments = json.load(f)

emotion_list = []

# ✅ 1件ずつChatGPTで感情を判定
for text in segments:
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {
                "role": "system",
                "content": "あなたは優秀な感情分析エージェントです。"
            },
            {
                "role": "user",
                "content": f"以下のテキストの感情を +1 / 0 / -1 で評価し、数字だけを返してください。\n\nテキスト: 「{text}」"
            }
        ]
    )
    score = int(response.choices[0].message.content.strip())
    emotion_list.append({"text": text, "score": score})
    print(f"{text} -> {score}")

print("✅ 全発言の感情付けが終わりました!")

これで、感情スコア付きリストが完成です!

ポイント

  • gpt-4o はお好みで gpt-4-turbo でもOK
  • score は必ず int() で数値化しておくと便利
  • 途中で止まっても emotion_list に残ってる分は手動で保存可

int() で数値化する理由

ChatGPTが返す結果は「文字列(例:"1")」です。

このままだと + 計算やグラフ化ができないので、int() を使って ちゃんと「数字」として扱えるように しておきます!

つまり → ✅ int("1")1 ← これで計算OK!

途中で止まっても安心な理由

もしAPI呼び出しが途中で止まっても、emotion_list には それまでに取得できたスコア付きデータが残ってます

だから

  • 必要なら print() で途中の結果を確認する
  • emotion_list をすぐ JSON に保存して、続きから再開できる

例:

with open("backup_emotion.json", "w") as f:
    json.dump(emotion_list, f, ensure_ascii=False, indent=2)

これでバックアップ完成!

📑 感情付きリストを保存する

ChatGPTで1発言ずつ感情スコアを付け終わったら、その結果を JSONファイル にして手元に保存しておきます。

1. JSONファイルに保存しよう

感情スコア付きのデータは、最終的にこんな形でまとめます👇

[
  {
    "text": "こんにちは。今日も来てくださってありがとうございます。",
    "score": 1
  },
  {
    "text": "最近どうですか?英語以外でも何か面白いことありましたか?",
    "score": 0
  },
  ...
]

これをColabでファイル化するコードがこちら👇

import json

# ✅ ChatGPTで作った感情リスト
# (ここでは例として emotion_list を使う)
# emotion_list = [{"text": "...", "score": 1}, {...}]

# JSONファイルに保存
with open("session_emotion.json", "w") as f:
    json.dump(emotion_list, f, ensure_ascii=False, indent=2)

print("✅ session_emotion.json ができました!")

これで session_emotion.json が完成!

これがあれば、後でグラフ化などに使えます。

2. Google Drive にアップロードする

Colabに作ったファイルは、PCに一度ダウンロードして、Google Drive に入れるのが手っ取り早いです。

Colabからダウンロードするコード👇

from google.colab import files

# ダウンロード
files.download("session_emotion.json")

これを実行すると、ブラウザから session_emotion.json をPCに保存できます。

その後は自分のGoogle Driveの好きなフォルダにポイっと入れればOK!

(Drive自動アップロードは、後の回で n8n で自動化予定!)

🔑 これで準備完了!

  • 感情スコア付きの会話データ が手元に!
  • Drive管理 で紛失ゼロ!
  • 後でグラフ化・ポータル化にすぐ使える!

🎁 サンプル結果

実際に ChatGPT で分析した後のスコア付き JSON はこんな感じになります👇

[
  {
    "text": "こんにちは。今日も来てくださってありがとうございます。",
    "score": 1
  },
  {
    "text": "最近どうですか?英語以外でも何か面白いことありましたか?",
    "score": 0
  },
  {
    "text": "最近ちょっとだけ海外ドラマを見るようにしてて、ネットフリックスで「フレンズ」を英語字幕で見てるんですけど、ほぼ何言ってるかわからなくて。",
    "score": -1
  }
]

👀 こんな感じで感情の波がわかる!

  • 【1】→ ポジティブ
  • 【0】→ ニュートラル
  • 【-1】→ ちょっとネガティブ

こんなふうに、会話の流れが気持ちの起伏込みで見える ので、振り返りの質がぐっと上がります!

📝 おさらいと次回

今回は、「セッションの発言に1つずつ感情スコアをつける」っていう大事な一歩をクリアしました!👏

これで、ただの文字起こしじゃなくて、「どこがポジティブだったか、どこがちょっと凹んでたか」がハッキリ分かるようになりましたね。

🔜 次回のテーマ

次は、このスコアを グラフにして感情の波を目で見る回!

数字だけじゃピンと来なかった微妙な感情のゆらぎを、「一目でわかる波グラフ」 にして、もっと面白く、もっと便利にしていきます!

お楽しみに!📈

🔗 関連リンク|AI秘書ツール制作シリーズ

💡 迷ったらこちらも

  • この記事を書いた人

SHIRAN

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

-🧪 開発・試作メモ
-, ,