2

TfIdfVectorizer와 MultinomialNB를 사용하여 모델을 훈련 시켰고 피클 파일에 저장했습니다.tfidfvectorizer 저장된 분류자를 예측하십시오.

보이지 않는 데이터를 예측하기 위해 다른 파일의 분류자를 사용하려고 했으므로 분류 자의 기능 수가 내 기능의 수와 같지 않다는 이유로 말할 수 없습니다. 현재의 코퍼스.

이것은 예측하려는 코드입니다. do_vectorize 함수는 훈련시 사용 된 함수와 똑같습니다.

def do_vectorize(data, stop_words=[], tokenizer_fn=tokenize): 
    vectorizer = TfidfVectorizer(stop_words=stop_words, tokenizer=tokenizer_fn) 
    X = vectorizer.fit_transform(data) 
    return X, vectorizer 

# Vectorizing the unseen documents 
matrix, vectorizer = do_vectorize(corpus, stop_words=stop_words) 

# Predicting on the trained model 
clf = pickle.load(open('../data/classifier_0.5_function.pkl', 'rb')) 
predictions = clf.predict(matrix) 

그러나 나는이 나는 또한 테스트하기 위해 훈련에서 내 어휘를 저장해야 의미

ValueError: Expected input with 65264 features, got 472546 instead 

기능의 수가 다르다는 오류가 발생? 훈련에 존재하지 않는 용어가 있다면 어떻게됩니까?

나는 같은 벡터 라이저와 분류자를 사용하여 scikit-learn에서 파이프 라인을 사용하려고 시도했으며 두 가지 모두에 대해 동일한 매개 변수를 사용하려고했습니다. 그러나 1 시간에서 6 시간 이상으로 너무 느려 졌으므로 수동으로 수행하는 것을 선호합니다.

답변

1

즉, 테스트하기 위해 훈련에서 어휘를 저장해야한다는 의미입니까?

예, 특히 수단 어휘를 저장하는 벡터 기 전체 TFIDF을 저장해야합니다.

교육에없는 용어가 있으면 어떻게됩니까?

그들은 당신이 더 훈련 데이터 이것에 대해이 없기 때문에 완벽한 의미가있는 무시됩니다

, 따라서 (아직도 그것을 사용할 수 있습니다 더 복잡한 방법이 있습니다 고려 아무것도 없다, 그러나 그들은하지 않습니다 tfidf와 같은 간단한 접근법을 사용하십시오.)

나는 동일한 벡터 라이저와 분류자를 사용하여 scikit-learn에서 파이프 라인을 사용하고 두 가지 모두에 대해 동일한 매개 변수를 사용하려고했습니다. 그러나 1 시간에서 6 시간 이상으로 너무 느려 졌으므로 수동으로 수행하는 것을 선호합니다.

파이프 라인을 사용할 때 약간의 오버 헤드가 없어야하지만, 수동으로 수행하는 것은 벡터화기를 저장하는 것을 잊지 않는 한 수동입니다.

관련 문제