iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
AI 自動化

從 Cloud 到 AI:GCP 雲端資料與 AI 實戰之路系列 第 19 篇

Day 19|情緒分類做出來了,我如何確認它值得拿來做判斷?

  • 分享至 

  • xImage
  •  

Day 18 把人員回報送去分析,再將結果寫入 BigQuery,並留下失敗與補跑紀錄。接下來,我想確認的不是表裡有沒有分數,而是:分類能不能幫人找到需要處理的問題?占比改變時,又能不能解釋原因?

我沿用 N201~N203 的設備回報情境。以下用來說明設計與驗收方式,尚未代表真實設備的分析成果。

1. 我先決定分類之後,要請人做什麼

N201 寫著「溫度顯示已恢復,但告警一直重複,值班時很困擾。」我希望這類回報進入人工確認清單,讓人查清楚告警是否重複,以及如何影響值班。

N202 的「更新後操作順暢,交班時更容易確認設備狀態。」適合整理為使用感受的線索;N203 的「請確認這台設備最近一次校正的時間。」則需要有人回答資訊問題。

這些是閱讀原文後訂出的處理方向,不能直接當成 API 的分類結果。我也不會讓情緒分數決定是否停機:設備異常仍應依告警規則與事件紀錄處理。情緒分類的用途,是協助安排閱讀與回訪。

2. 我先確認結果可用,再讓 SQL 分類

我會先從 Day 18 的紀錄選出本次統計採用的分析結果,確認 API 分析成功、結果已寫入 BigQuery,而且必要欄位完整。N202 若還在等待補跑,就保留為「待分析」;成功紀錄若缺少必要分數,則列為「待檢查」。兩者都不進入中性分類。

接著才用 GoogleSQL 的 CASE 寫入正面、負面、中性與混合等自訂規則。CASE 會採用第一個成立的條件,因此我先處理失敗與缺值,再判斷情緒,並逐一檢查門檻前後、剛好等於門檻,以及條件重疊時的結果。

規則也不能只照分數外觀決定。官方說明,score 表示整體正負傾向,magnitude 表示情緒強度;文件層級的 magnitude 未經正規化,較長文字可能累積較高數值。因此,我會以回報文字驗證門檻,不把「強度高」直接等同於「很不滿」。

3. 我逐則比對,也確認人和系統讀的是同一版文字

我會把人工標記表與分析結果依回報識別碼、文字版本連接,逐列顯示原文、系統分類、人工標記與不一致的原因。分析設定及分類規則版本也一併保留,避免舊文字的人工答案被拿來比對新文字。

以 N201 而言,「溫度顯示已恢復」描述設備狀態;「值班時很困擾」才明確表達感受。不能因為前半句出現「恢復」,就認定它一定同時具有正面情緒。

我會先寫清楚人工標記定義:正面是明確表達肯定,負面是明確表達不滿,中性是沒有明顯正負感受,混合則需要同時有正面與負面的情緒表達。若標記者意見不同,就留下各自理由,再討論定義,不急著把其中一人的答案當成唯一標準。

4. 三則對得上,還不足以證明規則可靠

N201~N203 可以幫我檢查資料是否接對、文字是否完整,卻不足以證明規則能處理其他回報。我會另外準備未參與門檻調整的文字,涵蓋委婉抱怨、簡短詢問、較長敘述,以及真正同時表達肯定與不滿的內容。

Google Cloud 的模型評估文件將測試資料與訓練資料分開,並以 precision、recall 觀察分類表現。我借用這些評估原則驗收自訂規則,這個步驟沒有訓練新的模型。

對「負面」這一類,precision 問的是:被列入負面清單的回報,有多少經人工確認確實是負面?recall 問的是:人工認定的負面回報,有多少被系統找出來?

前者偏低,可能讓人花時間閱讀太多誤判;後者偏低,則可能漏掉困擾。驗收時我會分別列出誤判與漏判的原文,而不是只看一個總正確率。調整規則後,還要再用另一批未參與調整的文字確認。

5. 補跑成功後,占比改變,不一定是情緒變了

延續 Day 18,假設 N201、N203 已成功,N202 還在等待補跑;又假設人工確認 N201 為負面、另外兩則並非負面。此時,已完成回報中的負面占比是一半,但分析涵蓋率只有三則中的兩則。

N202 補跑成功後,負面占比就從一半變成三分之一。沒有人改寫回報,也沒有新的改善措施;改變的是統計納入的資料。這組數字只是在說明分母變動,不能解讀成使用感受改善。

因此,我會同時呈現成功、待分析、失敗與待檢查的回報數。占比以去重後的回報為單位,每則只採用一筆指定版本的結果;重試次數、句子數與歷次分析紀錄都不能增加分母。跨批比較時,也先核對來源、文字版本、API 設定與分類規則是否一致。

6. 我回到 N201,確認困擾究竟指向什麼

整則被分類為負面,仍然不足以說明該處理什麼。我會回到原文,分開閱讀「溫度顯示已恢復」和「告警一直重複,值班時很困擾」,再查看 API 回傳的逐句情感結果,確認整體分數是否遮住了不同部分的訊息。

實體分析若辨識出文字中的對象,可以協助定位提及的位置;但辨識到一個名詞,還不等於找出抱怨的原因。我也不能把整則負面分數套到每個實體上,或預先保證 API 一定會辨識出「告警」。

目前官方語言支援表列出繁體中文支援情感分析與實體分析,但實體情感分析僅列英語、日語與西班牙語。因此,在這條繁體中文流程中,對象與情緒的關係仍需回到原文確認。若改寫文字或標點後重送,也要留下新的文字版本,重新驗收。

7. 我把回報接回設備事件,留下確認依據

最後,我會用設備識別碼,以及回報所指的發生時段,查詢前面整理的設備讀數、告警與處理紀錄。分析執行時間只代表何時處理文字,不能拿來代替事件發生時間。

對 N201,我想查的是:溫度何時恢復?恢復後是否仍有同類告警?那些紀錄代表不同事件,還是同一事件被重複送達?這也接回 Day 13~16 的資料品質、去重與時間處理。

若回報沒有設備編號或明確時段,我會先請人補充資訊。確認後,再將文字版本、採用的分析結果、分類規則、人工判斷與相關事件識別碼一起保留。如此,當有人追問「為什麼這則回報需要回訪」,就能從分類一路查回原文與設備紀錄。

參考資料

  1. Conditional expressions
  2. Natural Language API Basics
  3. Introduction to tabular data
  4. Analyzing Entities
  5. Language Support

上一篇
Day 18|一則回報能分析之後,我如何讓整批結果可靠地進入 BigQuery?
下一篇
Day 20|情緒分數之外,我如何讓 Gemini 整理人員真正提到的問題?
系列文
從 Cloud 到 AI:GCP 雲端資料與 AI 實戰之路 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言