LESSON

従来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-IDFngram_rangeとmax_featuresが性能を左右
用途ビジネス現場の多くのタスクで十分な性能

チェックリスト

  • Naive BayesとSVMの特徴と使い分けを説明できる
  • TF-IDF + 分類器のパイプラインを構築できる
  • ハイパーパラメータチューニングを実行できる
  • classification_reportの各指標を解釈できる

次のステップへ

従来MLの手法を理解した。次はBERT Fine-tuningによるテキスト分類を学ぼう。

推定読了時間: 30分