テキスト分類用に大規模な SVC モデル (~50Mb cPickles) があり、実稼働環境でそれらを使用するさまざまな方法を試しています。ドキュメントのバッチの分類は非常にうまく機能します ( と の両方predict
を使用して、1 分あたり約 1,000 ドキュメントpredict_proba
)。ただし、この質問へのコメントで説明されているように、単一のドキュメントの予測は別の話です。
バッチで予測を行っていますか? 残念ながら、SVC.predict メソッドは、トレーニング アルゴリズムが生成したものと同様の LibSVM データ構造を再構築し、サポート ベクターを浅いコピーし、テスト サンプルを LibSVM 形式に変換する必要があるため、多くのオーバーヘッドが発生します。 NumPy/SciPy 形式とは異なる場合があります。したがって、単一のサンプルの予測は遅くなります。– ラースマンズ
私はすでにSVCモデルをFlask Webアプリケーションとして提供しているため、オーバーヘッドの一部はなくなりましたが(unpickling)、単一ドキュメントの予測時間は依然として高い側(0.25秒)です。メソッドのコードを見てきましたがpredict
、サーバーの起動時にLibSVMデータ構造を事前に再構築して、それらを「事前にウォームアップ」する方法があるかどうかわかりません...何かアイデアはありますか?
def predict(self, X):
"""Perform classification on samples in X.
For an one-class model, +1 or -1 is returned.
Parameters
----------
X : {array-like, sparse matrix}, shape = [n_samples, n_features]
Returns
-------
y_pred : array, shape = [n_samples]
Class labels for samples in X.
"""
y = super(BaseSVC, self).predict(X)
return self.classes_.take(y.astype(np.int))