0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

気持ちを `float` にする技術 〜エンジニアのための感情コンピューティング入門〜

0
Last updated at Posted at 2026-06-04

はじめに:「それってあなたの感想ですよね?」に終止符を

レビューで「なんか好きじゃないんだよね」と言われたこと、ありませんか。
仕様で「いい感じにして」と投げられたこと、ありませんか。

人間の「気持ち」は型がゆるすぎて、我々エンジニアには扱いにくい。any 型で投げてくるのやめてほしい。

でも実は、その「気持ち」を真面目に数値化しようとしている分野があります。
その名も Affective Computing(感情コンピューティング / 感情計算論)
1990年代にMITのRosalind Picard教授が提唱した、れっきとした学際研究領域です。

この記事では、この分野を エンジニアの脳みそで翻訳 しながら、ゆるく入門していきます。


1. まず「感情の型定義」でモメている

この分野の論文を読むと、いきなり流派戦争に巻き込まれます。tab vs space 並みの根深いやつです。

論点は「感情ってどういうデータ構造なの?」。大きく2派あります。

離散モデル派(enum 原理主義)

「感情は有限個のカテゴリだろ」という主張。心理学者 Paul Ekman の 基本6感情(喜び・悲しみ・怒り・恐れ・嫌悪・驚き)が有名です。

// enum 派
enum Emotion {
  Joy,
  Sadness,
  Anger,
  Fear,
  Disgust,
  Surprise,
}

// いや union 型でしょ派(※TS界の永遠の聖戦)
type EmotionLabel =
  | "joy"
  | "sadness"
  | "anger"
  | "fear"
  | "disgust"
  | "surprise";

タスクとしては 分類問題(classification) になります。「この顔は Anger です」みたいに、きれいにラベルが付く世界。実装はラクそうですが、「怒ってるような、呆れてるような…」みたいな中間状態を表現できないのが弱点。離散カテゴリあるあるですね。

なお enum で書くか union 型 で書くかでもう一戦あるのがTSらしさ。本家心理学が「感情のカテゴリは何個か」でモメているのと構造がそっくりで、なんだか親近感が湧きます。

次元モデル派(number[] 原理主義)

「いやいや、感情は連続値でしょ」という主張。心理学者 James Russell が1980年に提唱した Circumplex Model(円環モデル) が代表選手です。

感情を2つの軸の座標として表します:

  • Valence(感情価):快〜不快 (-1.0 〜 1.0
  • Arousal(覚醒度):落ち着いている〜興奮している (-1.0 〜 1.0
interface Affect {
  valence: number; // 快(+) ⇔ 不快(-)   -1.0 〜 1.0
  arousal: number; // 覚醒(+) ⇔ 鎮静(-)  -1.0 〜 1.0
}

// 「リリース直前のドキドキ」
const excited: Affect = { valence: 0.6, arousal: 0.9 };

// 「金曜夜にデプロイ成功して飲むビール」
const content: Affect = { valence: 0.8, arousal: -0.3 };

// 「本番で Cannot read properties of undefined」
const panic: Affect = { valence: -0.9, arousal: 0.95 };

タスクは 回帰問題(regression) になります。「不安」と「興奮」は覚醒度が同じで感情価だけが違う、みたいな微妙なグラデーションを表現できるのが強み。enum から interface にリファクタした感じ、と言えば伝わるでしょうか。

ちなみに最近は「構成論的感情主義」という第三勢力もいます。「感情カテゴリは最初から存在せず、複数の情報から人間(やAI)が後付けで構成するんだ」という立場で、いわば 動的型付け 派。Russell自身も後年「core affect(中核情動)」という概念で、離散的な感情はその上に構築されるものだと論じています。型システムの議論はどこの世界でも終わらない。

論文を読むときのコツ:その論文が enum(離散)派か number(次元)派かを最初に見分けると、評価指標もデータセットも一気に読めるようになります。Accuracy/F1 が出てたら離散、MSE や相関係数が出てたら次元、です。


2. データソース問題(どこから気持ちを取ってくる?)

「気持ち」は変数に入っていないので、どこかからセンシングする必要があります。これを モダリティ と呼びます。主な入力ソースはこんな感じ:

モダリティ 具体例 IT的な実装イメージ
テキスト チャット、レビュー文 NLPで感情分析。一番とっつきやすい
音声 声のトーン、話速 音声特徴量を抽出して推定
表情 顔のランドマーク 画像認識タスク
生理信号 脳波(EEG)、心拍(ECG)、皮膚電気 センサーデバイス+時系列解析

最近のトレンドは、これらを混ぜる マルチモーダル感情認識(MER)。テキストだけだと「了解です。」が本当に了解なのか塩対応なのか分からないけど、声色や表情を足すと精度が上がる、という発想です。Slackの「承知しました。」の温度感、AIに判定してほしいですよね。

研究レベルだと、EEGとECGを融合したモデルが定番ベンチマーク(DEAPデータセット)で 92.5% の精度を出した、みたいな報告も出ています。脳波つけてコードレビューする時代、来るのか…?


3. とりあえず動かしてみる(テキスト感情分析)

一番ハードルが低いテキストから。Transformers.js を使えば、Pythonもサーバーも要らず、Node やブラウザでそのまま事前学習モデルを動かせます。Web屋の味方。

// npm install @huggingface/transformers
import { pipeline } from "@huggingface/transformers";

// 初回はモデルを自動DLしてキャッシュ(日本語なら対応モデルを指定)
const classifier = await pipeline("sentiment-analysis");

const texts: string[] = [
  "このライブラリ最高すぎる、人生変わった",
  "ドキュメントが一切ないんだが???",
  "とりあえず動いてはいる",
];

for (const text of texts) {
  const [result] = await classifier(text);
  console.log(`${text}\n  → ${result.label} (${result.score.toFixed(2)})\n`);
}
このライブラリ最高すぎる、人生変わった
  → POSITIVE (0.98)

ドキュメントが一切ないんだが???
  → NEGATIVE (0.95)

とりあえず動いてはいる
  → NEUTRAL (0.61)  ← この「諦め」を表現できるのが面白いところ

ポイントは score(確信度)が一緒に返ってくること。「たぶんNEGATIVE、確信度0.95」のように、機械側もちゃんと自信のなさを数値で出してくる。人間より謙虚かもしれない。


4. IT業界、どこで使えるの?

実用ユースケースをエンジニア目線で並べてみます。

  • カスタマーサポート:問い合わせの感情を自動で推定し、炎上しそうなチケットを優先度上げ。「怒り検知 → エスカレーション」を if 文で書ける世界。
  • プロダクト改善:レビューやアンケートの感情を数値化して、定性データを定量ダッシュボードに。「★の数」より解像度が高い。
  • 開発者体験(DX):チャットの空気感や issue のトーンを可視化して、チームの health check に。…ただしこれは後述の通り諸刃の剣。
  • 対話AI / ロボット:相手の感情に応じて応答トーンを変える。塩対応されたら気づいてほしい。

「定性 → 定量」への変換器、と捉えると価値が分かりやすいです。今まで console.log("なんかいい感じ") でお茶を濁していた領域に、ちゃんとメトリクスを刺せる。


5. ハマりどころ&倫理の話(ここ大事)

楽しいだけで終わらせないのがエンジニアの誠実さ。論文でも必ず議論される注意点:

  1. 精度100%は来ない。感情は文化差・個人差・文脈依存が激しく、そもそも「正解ラベル」を一意に決めるのが難しい。assert emotion == "happy" は通らない前提で設計を。
  2. 欠損モダリティ問題。カメラOFF、マイクOFFは日常。一部の入力が欠けても動くフォールバックが要る。
  3. 監視ツールに堕ちやすい。「従業員の感情を常時スコアリング」は技術的に可能でも、やっていいかは別問題。プライバシーと同意が前提。便利と監視は紙一重なので、設計者が一番ブレーキを踏める立場にいることを忘れずに。

特にメンタルヘルスや人事領域に応用する論文では、倫理・プライバシーの章がセットで書かれていることが多いです。この分野を触るなら、技術と同じ熱量で「使い方の議論」も読むのがおすすめ。


まとめ

  • 「気持ちの数値化」は Affective Computing という真面目な研究分野
  • 感情の型は enum(離散)派number[](次元・valence/arousal)派 がある
  • 入力は テキスト・音声・表情・生理信号、混ぜると強い(マルチモーダル)
  • テキスト感情分析なら Transformers.js で今日から試せる(ブラウザでも動く)
  • ただし 精度の限界と倫理 はセットで考える

「気持ちは数値化できない」と言われがちですが、少なくとも number で近似はできる。完璧じゃないけど、null よりはずっとマシ。そんな分野です。

それでは、よきEmotion-Driven Developmentを。


参考になる探し方

  • ジャーナル:IEEE Transactions on Affective Computing (TAFFC) がこの分野の代表格
  • 会議:ACII(感情コンピューティングの旗艦会議)
  • まず全体像を掴むなら、2024〜2025年の サーベイ論文 から入ると地図が手に入ります
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?