文本分類 Text classification === :::success 文本分類 (Text classificatiton / Text labeling) 是指將文本(文件、句子、段落)分到一個或以上的預定義的標籤類別中。 ::: ### 分類類型 1. 二元分類 (Binary Classification):將文本分為兩個互斥的類別。 > 評論情感分析:positive/negative 2. 多類別分類 (Multiclass Classification):有多個預定義的類別,但每個文本只能屬於一個類別。 > 新聞文章主題分類:政治/體育/娛樂 3. 多標籤分類 (Multilabel Classification):有多個預定義的類別,一個文本可以同時屬於多個類別。 > 商品屬性分類:紅色&棉質&休閒(衣服) 4. 層次分類 (Hierarchical Classification):特殊的多標籤任務,標籤之間具有層次關係。 > 新聞文章主題分類: ``` ├── 娛樂 ✓ │ ├── 電影 ✓ │ └── 音樂 └── 運動 ├── 足球 └── 籃球 ``` [[Ref] [Day 15] 文本分類 (Text Classification)](https://ithelp.ithome.com.tw/m/articles/10329743) ### 常見應用 * 垃圾郵件過濾:將郵件分類為**垃圾郵件**或**正常郵件**。 * 情感分析:將評論或社交媒體帖子分類為**正面、負面或中性情感**。 * 主題分類:將新聞文章、博客帖子或研究論文分類到不同的主題領域。 * 意圖識別: 在對話系統中,判斷用戶的意圖(例如:查詢信息、預訂服務)。 * 內容審核: 自動識別和標記**不適當或有害的內容**。 * 文檔管理: 自動將文檔歸檔到不同的類別中。 * 產品評論分類: 將產品評論分類到不同的方面(例如:性能、易用性、價格)。 * 語言檢測: 判斷文本所使用的語言。 [[Ref] 文本分類 (Text Classification)](https://vocus.cc/article/68330c9dfd89780001575a35) ### 文本分類流程 1. **數據準備** - 預處理: - 去除噪聲(例如:網址、特殊符號) - 進行分詞 aka.斷詞(segmentation / tokenization) > 可參考這篇:[淺談中文斷詞|中文斷詞的辛酸血淚與新詞偵測](https://hsiehbocheng.github.io/2024/04/20/word-seg/index.html) - 去除停用詞(stop words)→ 詞頻高但太大意義的詞會拖累計算 > 可參考這篇:[中文 NLP 也需要處理停用詞 (Stop Words) 嗎?](https://blog.droidtown.co/post/619240422284328960/tfidf) - 資料標記: - 手動標記 - 基於規則的匹配 - 學習算法(例如:監督標記和非監督標記) 2. **特徵提取** 使用詞袋模型、TF-IDF 或詞嵌入(embedding)等技術,將文本轉換成有意義的特徵(representation) 3. **模型訓練** 選擇合適的機器學習或深度學習模型,使用帶有標籤的數據對其進行訓練,並調整超參數以優化性能。 4. **模型評估** 使用準確率、精確率、召回率和 F1 分數等評估指標在獨立的測試數據集上評估訓練好的模型。 [[Ref] 機器學習中的文字分類—重要性、用例和流程](https://zh-tw.shaip.com/blog/text-classification-importance-use-cases-and-process/) ### 不同模型如何處理多標籤文本分類 #### 傳統ML模型 1. input:數值向量(例如:詞袋模型、TF-IDF) 2. 訓練方式:對每個標籤訓練一個獨立的二元分類器(例如:5個標籤就訓練5個SVM) #### 神經網路模型 1. input:詞ID序列+Padding 2. 訓練方式: - 詞ID向量透過 embedding layer 轉換 - output layer 設為標籤數量的節點 - 使用 sigmoid,每個節點輸出一個機率值 #### Transformer-based 模型 1. input:張量(tensor) ![](https://leemeng.tw/images/bert/practical_bert_encoding_for_pytorch.jpg) 2. 訓練方式: - 預訓練模型會將文本轉為 contextual embeddings - 最後輸出加一層 linear layer,輸出節點數為標籤數 - 每個節點使用 sigmoid [[Ref] 進擊的 BERT:NLP 界的巨人之力與遷移學習](https://leemeng.tw/attack_on_bert_transfer_learning_in_nlp.html?source=post_page---------------------------) ### References 1. [[Day 15] 文本分類 (Text Classification)](https://ithelp.ithome.com.tw/m/articles/10329743) 2. [文本分類 (Text Classification)](https://vocus.cc/article/68330c9dfd89780001575a35) 3. [淺談中文斷詞|中文斷詞的辛酸血淚與新詞偵測](https://hsiehbocheng.github.io/2024/04/20/word-seg/index.html) 4. [中文 NLP 也需要處理停用詞 (Stop Words) 嗎?](https://blog.droidtown.co/post/619240422284328960/tfidf) 5. [機器學習中的文字分類—重要性、用例和流程](https://zh-tw.shaip.com/blog/text-classification-importance-use-cases-and-process/) 6. [進擊的 BERT:NLP 界的巨人之力與遷移學習](https://leemeng.tw/attack_on_bert_transfer_learning_in_nlp.html?source=post_page---------------------------)