iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0

前言

人機互動(HCI)正從「能聽懂」走向「懂你在感受什麼」。不只辨識指令,更要回應情緒:當使用者焦慮、挫折或興奮時,系統該怎麼問、怎麼等、怎麼回?今天一起來整理一套多輪對話+情緒互動的設計方法,結合你現有的 臉部表情(FER)文字情緒(BERT) 模型,提供可落地的 場景腳本、系統架構、對話策略、評估方法,協助你把「感知 → 理解 → 回饋」串成完整體驗。


要解決的問題

典型挑戰:

  • 多輪上下文:意圖會變,情緒也在變(情緒弧線)。
  • 多模態訊號:鏡頭表情、文字用詞、語速停頓。
  • 不確定性:模型有誤差;誤偵測會放大糟糕體驗
  • HCI 回饋:怎麼在 UI/語言上「顧感受」而不打擾任務?

系統藍圖

感知層

  • 影像:ResNet18(FER2013)→ 7 類表情 + 置信度(加時間平滑)。
  • 文字:BERT/DistilBERT → positive/negative/neutral + 置信度。

融合層(Emotion Fusion)

  • 異質訊號做加權/規則混合:如「鏡頭權重 0.6 + 文字 0.4」,或「衝突時以更高置信為準;若都低→不輸出情緒,只輸出不確定」。

對話狀態(Dialogue State)

intent:          # 使用者意圖
emotion_state:   # {valence, arousal, label, confidence}
context:         # 歷史槽位、已嘗試步驟
frustration:     # 累積挫折指標(EMA)
safety_flags:    # 敏感/升級指標

策略層(Policy)

  • 規則/樹狀策略(可控、易調)→ 之後再接 RL/LLM。
  • 情緒敏感動作:放慢節奏 / 提供捷徑 / 反映式回饋 / 切換手把手指引。

生成層(NLG+UI)

  • 詞庫模板 + 變數插入:{emotion_word}、{next_step}、{time_cost}。
  • UI 元件:等待指示、信心條、可撤銷的一鍵動作。

場景設計

場景 A:客服小幫手(指導式排錯)

使用者目標:修復 App 閃退
情緒走向:焦躁 ↑ → 緩解

流程:

  1. 系統(偵測負面高、語速↑):
    「看起來有點卡,我們一步一步來 —— 先幫你清除快取,不會影響資料。」(提供一鍵操作)
  2. 使用者:仍抱怨
  3. 系統(連續負面+高挫折):
    「我可以直接幫你送出錯誤報告,並把處理結果寄到你的信箱,可以嗎?」(捷徑+預期管理)
  4. 使用者:接受
  5. 系統:總結進度 + 候補方案(離線表單/人工客服排隊)

策略點:當挫折 EMA > 閾值 → 縮短對話輪次、優先提供捷徑/交接


場景 B:學習助教(學習節奏調節)

目標:完成 3 題練習
情緒走向:中性 → 低落 → 恢復

流程:

  • 錯兩題+表情悲傷:
    「這題常卡在第 2 步,要不要看 30 秒解法動畫?」(降低負荷
  • 完成一題:
    「做得很好!我們先換一題同類型、難度再降一點。」(微獎勵+難度調節

策略點成功/失敗比情緒標籤共同決定下一題難度


場景 C:車內語音助理(安全導向)

  • 生氣/高喧鬧:縮短話術、使用確認式語句;
  • 驅動冷卻卡:「我把導航縮短 3 分鐘,並把回覆靜音到紅綠燈再播,好嗎?」

策略點:安全優先,情緒高張時降低互動複雜度


策略與話術庫

情緒到策略對照

偵測情緒 置信度 對話策略 UI/互動
負面 反映+道歉+捷徑 一鍵排錯/交接、縮短表單
負面 中立提問+確認 顯示「不確定」圖示,避免誤判
正面 強化回饋+推進任務 顯示進度、下一步 CTA
驚訝/困惑 釐清意圖 提供三個意圖候選

回應模板

  • 反映式:
    「我理解你有點{emotion_word},我們先試最快的方法:{shortcut}(約 {time_cost} 秒)。」

  • 不確定時:
    「我不太確定現在的狀態,要不要幫你記錄下來,或先看最常見的解法?」


實作細節

1)融合與平滑(避免情緒跳針)

  • 時間平滑:label_t = EMA(label_(t-1), label_raw_t, α)
  • 融合規則:if |FER| - |Text| > δ → 用 FER;若衝突且皆低 → 不輸出情緒,只輸出不確定

2)對話政策(簡化版)

if emotion.conf < 0.6:
    policy = "neutral-question"
elif emotion.label in ["sad","angry"] and frustration > 0.7:
    policy = "fast-track"
elif intent == "learn" and last_two_wrong:
    policy = "reduce-difficulty"
else:
    policy = "normal-flow"

3)誤判緩衝與自我修正

  • 連續 2 輪情緒與用戶回覆不一致 → 降低情緒權重、回復中立話術。
  • 提供顯式控制(「現在先別提醒情緒」)。

4)資料與隱私

  • 影像僅做即時推論,不保存(或經匿名化)。
  • 專案內部績效用彙總統計;提供資料刪除通道。

評估:不只看準確率

  • 離線:表情/文字情緒的 F1、加權準確;融合後的衝突率
  • 線上:任務成功率、平均輪次、用戶滿意度(SUS)、情緒弧線是否向正向收斂。
  • A/B:有情緒策略 vs. 無情緒策略;「反映式話術」對挫折分數下降的貢獻。
  • 失敗分析:反諷、否定詞、遮擋、多人入鏡。

把它變成可跑的原型

  1. 感知:你的 ResNet18(FER)+ DistilBERT(情緒);各自輸出 label + conf。
  2. 融合:簡單規則 + 置信度門檻 + 2 秒 EMA。
  3. 策略:上面的 4 格策略表+模板回覆。
  4. UI:對話泡泡 + 進度/捷徑按鈕 + 小小的「情緒不確定」提示。
  5. 記錄:每輪 intent, emotion, policy, action, outcome,做情緒弧線可視化。

結語

回到主題「感知你的動作與情緒」,關鍵不在於多準的辨識,而在於怎麼把辨識變成體驗

  • 感知(FER/NLP)成為對話節奏與回應風格的依據;
  • 融合與平滑處理不確定,避免誤判傷害體驗;
  • 捷徑反映式話術難度調節把情緒洞察轉成行動;
  • 任務成功+情緒弧線來量化價值,不斷 A/B 精進。

上一篇
Day 14 | 情緒詞典與情感分類器實作:從評論中讀出使用者情緒
下一篇
Day 16 | 為什麼你的語氣,AI 聽得懂了?淺談 NLP 與語氣分析
系列文
感知你的動作與情緒:深度學習在人機互動的應用18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言