iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
AI & Data

咖狗報到-30天玩轉Kaggle競賽系列 第 8

一起來參加Kaggle競賽-提升實戰經驗8(新比賽-Jigsaw ‒ Agile Community Rules Classification))

  • 分享至 

  • xImage
  •  

前言

在前幾天的實作中,我們一起參與了一場二元分類任務的比賽,目標是預測某人是否會辦理定期存款。那場比賽中,我們學到了如何進行初步的資料探索(EDA)、如何使用 class_weight='balanced' 讓模型在類別不平衡的情況下仍能捕捉少數族群,以及如何透過調整樹的數量 n_estimators 來提升模型的穩定性。

雖然我們已經初步掌握了建立分類模型的基礎流程——從資料清理、特徵工程,到訓練與評估模型的基本技巧——但這還只是機器學習的「入門關卡」。今天,我們將走得更遠一些——挑戰一個結合文字分類、語境理解與多樣規則判別的 NLP 任務

這次的比賽名為 Jigsaw – Agile Community Rules Classification https://www.kaggle.com/competitions/jigsaw-agile-community-rules/overview ,我們的任務是判斷 Reddit 上的留言是否違反某條社群規範。這不只是單純的文字分類,更是一場「理解語氣、判斷語境、辨別社群文化差異」的實戰演練。


1.比賽簡介

比賽時間還有一個月,正是開始的好時機!

這次我選了一個距離結束還有約 一個月 的比賽來實作,節奏上不會太緊湊,也足夠讓我們一步步實作、優化模型、嘗試不同想法!

比賽倒數畫面


比賽任務概覽(Overview)

進入比賽頁面後,我們可以看到比賽的任務說明:

Overview 區塊

簡單來說就是:

如果你曾經在 Reddit 上發過留言,卻突然被刪除,又不知道為什麼——你不是一個人。

每個 subreddit(Reddit 的子論壇)都有自己的規範,但這些規則通常繁瑣又不明確,使用者往往不知道自己為何違規,甚至連版主之間也可能見解不同。


這場比賽的目標是什麼?

這次的 Jigsaw 比賽,就是要解決這種混亂!
我們的任務是:

建立一個 AI 模型,能夠判斷 Reddit 留言是否違反某個特定的社群規則

這是一個 二元分類任務(binary classification):

  • 輸入: 一段 Reddit 留言(text)
  • 輸出: 是否違反某一條規則(yes / no)

資料來自真實 Reddit 的歷史留言與版主的審查紀錄,涵蓋了不同 subreddit(Reddit的子論壇) 的語氣、文化與規則風格。


Description 區塊補充的資訊

往下滑可以看到更詳細的說明(Description):

  • 我們的任務是建立一個 binary classifier
  • 資料來自 Reddit 過去的審核留言,結合實際的社群規則(rules)
  • 每條規則的定義不同,模型需要能理解「語境 + 語意」才有辦法正確分類
  • 提供了一個小型的 labeled 開發集(dev set)幫助我們開始訓練
    Description說明

2. 本系列目標

這次的比賽,我們一樣會從最基礎的資料探索(EDA)與 baseline 模型開始,逐步帶大家完成一個實戰 NLP 專案,也會涵蓋以下重點:

  • 自然語言處理(NLP)基礎技術:包含文字清理、斷詞、向量化等前處理技巧
  • 建立分類模型: Logistic Regression 建立簡單可解釋的 baseline,再進一步優化
  • 處理類別不平衡問題:使用 class_weight='balanced'、SMOTE 等方式提升少數類別的預測能力
  • BERT / Transformer 微調實作:引入預訓練語言模型,強化語境理解能力
  • 模型評估與錯誤分析:不只看準確率,還會分析 precision、recall、F1、confusion matrix 等指標
  • 提升泛化能力與語境理解:思考如何讓模型適應不同 subreddit 的語言風格與規則文化

3. 為什麼選這個比賽?

這場比賽結合 NLP、社群內容、與多樣規則判斷,對於模型處理「灰色地帶語言」的能力是一大挑戰,也是絕佳的學習機會。

以下是我選擇這個比賽的幾個原因:

  • 結合 NLP + 分類任務:可以完整練習 NLP 任務常見的處理流程與建模技巧
  • 類別不平衡問題:違規留言數量遠少於正常留言,是在前一場比賽中就已經開始接觸的挑戰,這次將進一步練習 Recall 的提升方法
  • 語境與規則差異性高:每個 subreddit 的語氣與規則不同,模型必須學會 「理解語境、轉換邏輯」 ,有助於培養模型泛化能力
  • 學習價值:這場比賽涵蓋從資料探索、文字向量化、模型建立,到微調與模型評估的完整流程,對於 NLP 入門與實戰來說,非常具有學習價值

4. 比賽資料與挑戰點

根據比賽頁面的 Dataset 說明,我們這次要處理的資料來自 Reddit 的實際留言與社群規則審核紀錄。這些資料包含使用者的留言內容、是否違規、違反的是哪一條規則,以及 subreddit 所屬的子論壇等欄位資訊。

資料檔案包含:

  • train.csv:訓練資料集

    • body:使用者留言文字內容(這是我們主要的輸入)
    • rule:留言被判定違反的規則(僅限兩條)
    • subreddit:留言發表的論壇(可用來理解語境)
    • positive_example_{1,2}:違反該規則的示例留言
    • negative_example_{1,2}:未違反該規則的示例留言
    • rule_violation:最終的二元標籤(0 = 未違規、1 = 違規)
  • test.csv:測試資料集,需要我們預測是否違規(rule_violation 機率)

  • sample_submission.csv:提交格式範例

Dataset 說明

注意

測試資料中的留言可能違反訓練集中未曾出現的規則。也就是說,我們的模型要具有一定的「泛化能力」,不能只學會判斷那兩條已知規則,而是要從語氣、語意、語境中推論出「這樣的話可能違規」。


挑戰點:

項目 說明
規則 訓練資料中僅含 2 條規則,但測試資料可能包含更多未知規則
語境差異 不同 subreddit 擁有不同語氣與規範文化,模型需能「跨語境理解」
類別不平衡 違規留言數量遠少於未違規留言,是分類任務中常見的挑戰之一
文本噪音 含有拼字錯誤、俚語、非正式語言、emoji、奇怪標點等非結構化文字
泛化能力要求 模型需具備判斷「未見規則」的能力,不能只死背兩條規則的語句特徵

結語

今天我們初步認識了這場比賽,明天我們將正式驗證比賽並下載比賽的資料集,接著會進行資料的前處理,包括文字清洗、欄位篩選與格式整理,為後續的模型訓練做好準備!


上一篇
一起來參加Kaggle競賽-提升實戰經驗7(資料不平衡處理)
系列文
咖狗報到-30天玩轉Kaggle競賽8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言