飯店客務單位每日需處理大量旅客來信,從訂房詢問、入住反饋到客訴申訴,若仰賴人工逐一閱讀、判斷與分派,不僅耗時,更可能因疲勞導致重要案件延誤。
本篇文章將實作一個輕量級文字分類系統,利用 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_content | sentiment | topic |
|---|---|---|
| 房間空調故障,整晚無法入睡 | 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)
測試與維運建議
- 斷詞準確度:建議在
jieba自定義詞典中加入飯店專有名詞(如:Deluxe King、Opera PMS),避免關鍵字被誤切。 - 模型迭代:建立「人工覆寫機制」,讓前線人員標記預測錯誤的案例,每季重新訓練模型以優化準確度。
- 資安合規:客訴內容涉及個資,郵件僅應於飯店內部伺服器處理,避免直接傳輸至未經授權的第三方雲端。
🚀 親手試試看:客訴分類自動化
不需要安裝 Python,我將上述核心邏輯整理成了一個 互動式演示環境 (Google Colab)。你只需要點擊下方按鈕,按一下 Play 鍵,就能親自體驗 AI 如何在 3 秒內標記郵件的情緒與主題。
如果你在測試後發現模型對某些「飯店專用術語」分類不夠準確,那是因為每家飯店的語境不同。這正是客製化 AI 服務的價值所在。若你需要針對貴飯店的客訴數據進行模型優化,歡迎聯繫我。
結語
自動化分類的價值,在於讓前線人員能「抬起頭來」,處理真正有溫度的服務問題,而不是深陷在文字堆裡。
💡 專業合作諮詢 若您的物業需要導入 NLP 客訴分析、自動化摘要生成或串接即時通訊預警系統,歡迎聯繫:[email protected]
#Python #NLP #飯店管理 #ScikitLearn #數位轉型