Files
zhiyejineng-exam/text-cls-baseline.py

87 lines
1.9 KiB
Python

"""文本分类 baseline"""
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
# 1. 数据
texts = [
"我要申请退款",
"这个订单可以退款吗",
"钱什么时候退回来",
"我要取消订单退款",
"商品有问题申请退款",
"怎么退货退款",
"我的密码忘记了",
"怎么修改登录密码",
"账号登录不上去了",
"如何重置密码",
"账户无法登录",
"密码在哪里修改",
"快递什么时候到",
"物流怎么还没更新",
"我的包裹到哪里了",
"查询一下配送进度",
"快递一直没有收到",
"帮我查一下物流"
]
labels = [
"refund", "refund", "refund",
"refund", "refund", "refund",
"account", "account", "account",
"account", "account", "account",
"delivery", "delivery", "delivery",
"delivery", "delivery", "delivery"
]
# 2. 切分训练集 / 验证集
X_train, X_val, y_train, y_val = train_test_split(
texts,
labels,
test_size=0.33,
random_state=42,
stratify=labels
)
# 3. 文本 -> TF-IDF 稀疏向量
vectorizer = TfidfVectorizer(
analyzer="char",
ngram_range=(1, 3)
)
X_train_vec = vectorizer.fit_transform(X_train)
X_val_vec = vectorizer.transform(X_val)
# 4. 训练分类器
model = LinearSVC(C=1.0)
model.fit(X_train_vec, y_train)
# 5. 验证
pred = model.predict(X_val_vec)
print("accuracy:", accuracy_score(y_val, pred))
print(classification_report(y_val, pred))
# 6. 推理
test_texts = [
"我的东西怎么还没送过来",
"登录密码忘了怎么办",
"我要把这个订单退掉"
]
X_test = vectorizer.transform(test_texts)
pred = model.predict(X_test)
for text, label in zip(test_texts, pred):
print(text, "->", label)