Python中短文本标签分类有什么比较好的办法?
以前一直用 TFIDF+SVM 做 baseline,效果尚可,不知可还有其他能做一个不错 baseline 的思路?
试了下 word embedding + bi-LSTM,结果却并没有什么提高…不晓得是不是参数的问题?
现有的训练数据大概 1000 个标签吧,每类七八百个样本,是不是数据量也太小了?
Python中短文本标签分类有什么比较好的办法?
3 回复
对于短文本标签分类,我常用的方案是结合TF-IDF和LightGBM。短文本特征稀疏,TF-IDF能有效提取关键信息,LightGBM训练快且对稀疏特征友好。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
import lightgbm as lgb
import pandas as pd
# 准备数据
texts = ["文本1", "文本2", ...] # 你的文本列表
labels = ["标签1", "标签2", ...] # 对应的标签列表
# TF-IDF特征提取
vectorizer = TfidfVectorizer(max_features=5000, ngram_range=(1, 2))
X = vectorizer.fit_transform(texts)
# 标签编码
label_dict = {label: idx for idx, label in enumerate(set(labels))}
y = [label_dict[label] for label in labels]
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# LightGBM训练
model = lgb.LGBMClassifier(n_estimators=100, learning_rate=0.1)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
如果数据量少,可以用预训练模型如BERT做微调,但需要GPU资源。数据量中等时,上面这个组合效果就不错。
简单说就是:短文本分类优先试TF-IDF+LightGBM。
Kaggle 有个 quora 相关的比赛,可以试试人家公布的方法


