この機能はTfidfVectorizer
で有用です。 documentationによれば、このクラスは予め定義されたvocabulary
で提供されることができる。語彙からの単語が列車データには見られないが、テストでは単語が含まれていれば、smooth_idfを使用すると、単語が正常に処理されます。
train_texts = ['apple mango', 'mango banana']
test_texts = ['apple banana', 'mango orange']
vocab = ['apple', 'mango', 'banana', 'orange']
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer1 = TfidfVectorizer(smooth_idf=True, vocabulary=vocab).fit(train_texts)
vectorizer2 = TfidfVectorizer(smooth_idf=False, vocabulary=vocab).fit(train_texts)
print(vectorizer1.transform(test_texts).todense()) # works okay
print(vectorizer2.transform(test_texts).todense()) # raises a ValueError
出力:
[[ 0.70710678 0. 0.70710678 0. ]
[ 0. 0.43016528 0. 0.90275015]]
...
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
"トレーニング" のために本当です。古い辞書の目に見えない新しいテキストを入力すると、divでゼロになりますか? –
@ThomasJungblutしかし、TfidfVectorizerは「トレーニング」でのみ使用されますか? – yhylord