従来MLによるテキスト分類
「まずは基本から。Naive BayesとSVMでテキスト分類のベースラインを作ろう。」
田中VPoEが指示する。
「深層学習に飛びつく前に、従来手法でどこまでできるかを把握する。これがエンジニアリングの基本姿勢だ。軽量で高速、解釈しやすい。ビジネス現場ではこれで十分なケースも多い。」
従来MLパイプライン
テキスト → 前処理 → 特徴量抽出 → モデル学習 → 予測
↓ ↓
トークン化 TF-IDF
正規化 BoW
ストップワード
Naive Bayesによるテキスト分類
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report
# パイプライン構築
nb_pipeline = Pipeline([
('tfidf', TfidfVectorizer(
max_features=10000,
ngram_range=(1, 2), # ユニグラム + バイグラム
min_df=2,
max_df=0.95,
)),
('clf', MultinomialNB(alpha=0.1)),
])
# 学習
nb_pipeline.fit(X_train, y_train)
# 評価
y_pred = nb_pipeline.predict(X_test)
print(classification_report(y_test, y_pred))
Naive Bayesの特徴
| 特徴 | 説明 |
|---|---|
| 速度 | 学習・推論ともに非常に高速 |
| データ量 | 少量データでも動作 |
| 解釈性 | 各特徴量の貢献度が明確 |
| 弱点 | 特徴量の独立性仮定、文脈を捉えられない |
SVMによるテキスト分類
from sklearn.svm import LinearSVC
from sklearn.calibration import CalibratedClassifierCV
# SVMパイプライン
svm_pipeline = Pipeline([
('tfidf', TfidfVectorizer(
max_features=20000,
ngram_range=(1, 3),
sublinear_tf=True, # TFの対数スケーリング
)),
('clf', CalibratedClassifierCV(
LinearSVC(C=1.0, max_iter=10000),
cv=3,
)),
])
svm_pipeline.fit(X_train, y_train)
y_pred = svm_pipeline.predict(X_test)
print(classification_report(y_test, y_pred))
SVMの特徴
| 特徴 | 説明 |
|---|---|
| 高次元 | 高次元の疎なTF-IDF特徴量に強い |
| 汎化 | マージン最大化により過学習に強い |
| 確率出力 | CalibratedClassifierCVで確率値を取得可能 |
| 弱点 | 大規模データでは学習が遅い |
ハイパーパラメータチューニング
from sklearn.model_selection import GridSearchCV
param_grid = {
'tfidf__max_features': [5000, 10000, 20000],
'tfidf__ngram_range': [(1, 1), (1, 2), (1, 3)],
'clf__estimator__C': [0.1, 1.0, 10.0],
}
grid_search = GridSearchCV(
svm_pipeline,
param_grid,
cv=5,
scoring='f1_weighted',
n_jobs=-1,
)
grid_search.fit(X_train, y_train)
print(f"Best params: {grid_search.best_params_}")
print(f"Best F1: {grid_search.best_score_:.4f}")
まとめ
| 項目 | ポイント |
|---|---|
| Naive Bayes | 高速、少量データ向き、ベースラインに最適 |
| SVM | 高精度、高次元データに強い、TF-IDFと相性良 |
| TF-IDF | ngram_rangeとmax_featuresが性能を左右 |
| 用途 | ビジネス現場の多くのタスクで十分な性能 |
チェックリスト
- Naive BayesとSVMの特徴と使い分けを説明できる
- TF-IDF + 分類器のパイプラインを構築できる
- ハイパーパラメータチューニングを実行できる
- classification_reportの各指標を解釈できる
次のステップへ
従来MLの手法を理解した。次はBERT Fine-tuningによるテキスト分類を学ぼう。
推定読了時間: 30分