← 返回列表 實戰案例

客訴郵件自動分類實戰:用 Scikit-learn 建立簡易情緒與主題標籤系統

飯店客務單位每日需處理大量旅客來信,從訂房詢問、入住反饋到客訴申訴,若仰賴人工逐一閱讀、判斷與分派,不僅耗時,更可能因疲勞導致重要案件延誤。

本篇文章將實作一個輕量級文字分類系統,利用 Scikit-learn 結合繁體中文前處理技術,自動標記郵件的「情緒傾向」與「業務主題」,讓前線人員能優先處理高風險案件,提升服務回應品質。


自動化價值與應用場景

  • 現行痛點:客訴郵件需人工閱讀、主觀判斷、手動標籤,效率低且標準不一。
  • 自動化效益
    • 精準分流:自動標記情緒(正面/中性/負面)與主題(訂房/客房/餐飲/帳務)。
    • 風險預警:優先推送負面情緒案件至主管信箱,防止事態擴大。
    • 數據資產:累積結構化資料,便於後續分析服務缺口。

環境設定與資料準備

1. 環境建置

建議使用虛擬環境並安裝必要套件:

python -m venv venv
source venv/bin/activate
pip install scikit-learn pandas jieba python-dotenv joblib

2. 訓練資料建議 (CSV 格式)

準備一份包含歷史數據的 training_data.csv

mail_contentsentimenttopic
房間空調故障,整晚無法入睡negative客房
早餐選擇豐富,服務人員很親切positive餐飲
想確認延遲退房是否可行neutral訂房

核心程式碼實作

繁體中文前處理 (text_preprocessor.py)

利用 jieba 進行斷詞,並過濾飯店業常見的停用詞。

import jieba
import os
import re

class TextPreprocessor:
    def __init__(self, custom_dict_path=None):
        if custom_dict_path and os.path.exists(custom_dict_path):
            jieba.load_userdict(custom_dict_path)
        
        self.stopwords = set(['的', '了', '在', '是', '我', '有', '和', '就', '不', '很', '到'])

    def tokenize(self, text):
        # 移除 HTML 標籤與多餘空白
        text = re.sub(r'<[^>]+>', '', str(text))
        text = re.sub(r'\s+', ' ', text).strip()
        words = jieba.lcut(text)
        return [w for w in words if w.strip() and w not in self.stopwords]

    def preprocess_series(self, series):
        return series.apply(lambda x: ' '.join(self.tokenize(x)))

分類模型模組 (classifier.py)

使用 TfidfVectorizer 提取特徵,並透過 LogisticRegression 進行高效分類。

import pandas as pd
import joblib
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

class ComplaintClassifier:
    def __init__(self, preprocessor=None):
        self.preprocessor = preprocessor
        self.sentiment_model = Pipeline([
            ('tfidf', TfidfVectorizer(max_features=3000, ngram_range=(1, 2))),
            ('clf', LogisticRegression(max_iter=1000))
        ])

    def train(self, df):
        processed_text = self.preprocessor.preprocess_series(df['mail_content'])
        self.sentiment_model.fit(processed_text, df['sentiment'])

    def predict(self, texts):
        processed = [' '.join(self.preprocessor.tokenize(t)) for t in texts]
        return self.sentiment_model.predict(processed)

    def save(self, path):
        joblib.dump(self.sentiment_model, path)

測試與維運建議

  1. 斷詞準確度:建議在 jieba 自定義詞典中加入飯店專有名詞(如:Deluxe King、Opera PMS),避免關鍵字被誤切。
  2. 模型迭代:建立「人工覆寫機制」,讓前線人員標記預測錯誤的案例,每季重新訓練模型以優化準確度。
  3. 資安合規:客訴內容涉及個資,郵件僅應於飯店內部伺服器處理,避免直接傳輸至未經授權的第三方雲端。

🚀 親手試試看:客訴分類自動化

不需要安裝 Python,我將上述核心邏輯整理成了一個 互動式演示環境 (Google Colab)。你只需要點擊下方按鈕,按一下 Play 鍵,就能親自體驗 AI 如何在 3 秒內標記郵件的情緒與主題。

準備好讓數據幫你精準管理客訴了嗎?

🚀 在 Google Colab 體驗 AI 分類系統 →

無需程式背景,點開即可執行測試

如果你在測試後發現模型對某些「飯店專用術語」分類不夠準確,那是因為每家飯店的語境不同。這正是客製化 AI 服務的價值所在。若你需要針對貴飯店的客訴數據進行模型優化,歡迎聯繫我。

結語

自動化分類的價值,在於讓前線人員能「抬起頭來」,處理真正有溫度的服務問題,而不是深陷在文字堆裡。

💡 專業合作諮詢 若您的物業需要導入 NLP 客訴分析、自動化摘要生成或串接即時通訊預警系統,歡迎聯繫:[email protected]

#Python #NLP #飯店管理 #ScikitLearn #數位轉型

更多飯店自動化心法?

訂閱專欄,掌握每週 AI 營運實戰。

立即訂閱