TfidfVectorizer调用transform报transform not found错误排查
问题根因
持久化时传入的存储对象错误。TfidfVectorizer的fit_transform()方法返回值是文本向量化后生成的CSR格式稀疏矩阵(即报错中显示的scipy.sparse._csr.csr_matrix类型),并非训练完成的向量化器实例本身。原代码中执行joblib.dump(X, "./vectorizer.pkl")时,存储到本地的是已经转换好的向量结果,不是具备transform方法的向量化器对象,加载后自然无法调用transform接口,触发transform not found报错。
错误代码说明
原代码的错误点在持久化步骤的传参:
vectorizer = TfidfVectorizer(max_features=500, lowercase=True, analyzer='word', ngram_range=(1, 5)) X = vectorizer.fit_transform(df['content']) # 错误:此处dump的是fit_transform输出的稀疏矩阵X,而非训练好的vectorizer实例 joblib.dump(X, "./vectorizer.pkl") # 加载得到的对象是稀疏矩阵,不存在transform方法 vectorizer = joblib.load("./vectorizer.pkl") X = vectorizer.transform(df['content'])
修复方案
如果需要持久化向量化器、后续复用它对新文本做转换,必须将训练完成的TfidfVectorizer实例本身传入joblib.dump(),而非它输出的向量结果。修复后可正常运行的代码如下:
vectorizer = TfidfVectorizer(max_features=500, lowercase=True, analyzer='word', ngram_range=(1, 5)) X = vectorizer.fit_transform(df['content']) # 正确:持久化训练完成的向量化器实例 joblib.dump(vectorizer, "./vectorizer.pkl") # 加载得到的是TfidfVectorizer实例,可正常调用transform方法 vectorizer = joblib.load("./vectorizer.pkl") X = vectorizer.transform(df['content'])
内容的提问来源于stack exchange,提问作者some nooby questions
相关产品推荐
相关产品推荐

