我有大型的SVC模型(约50MB的cPickles)用于文本分类,我正在尝试各种方法将它们用于生产环境。对一批文档进行分类效果非常好(使用predict和predict_proba每分钟可处理约1k个文档)。然而,对单个文档进行预测则不同,正如this question中的评论所述:
“你是在批量进行预测吗?不幸的是,SVC.predict方法会产生很多开销,因为它必须重构类似于训练算法产生的LibSVM数据结构,浅拷贝支持向量,并将测试样本转换为可能与NumPy / SciPy格式不同的LibSVM格式。因此,对单个样本的预测注定会很慢。” - larsmans 我已经将SVC模型作为Flask Web应用程序提供,因此一部分开销已经消失了(反序列化),但是单个文档的预测时间仍然较长(0.25秒)。我查看了
“你是在批量进行预测吗?不幸的是,SVC.predict方法会产生很多开销,因为它必须重构类似于训练算法产生的LibSVM数据结构,浅拷贝支持向量,并将测试样本转换为可能与NumPy / SciPy格式不同的LibSVM格式。因此,对单个样本的预测注定会很慢。” - larsmans 我已经将SVC模型作为Flask Web应用程序提供,因此一部分开销已经消失了(反序列化),但是单个文档的预测时间仍然较长(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))
SVC
进行文本分类,这样做没有意义。 - Fred Foo