Я использовал sk-learn в python для подбора моделей и преобразования input_data через модели.
Я использую FeatureUnion для объединения CountVectorizer и TfidfEmbeddingVectorizer.
Можно использовать только CountVectorizer или только TfidfEmbeddingVectorizer, но если я объединяю две функции с помощью Feature Union, возникает такая ошибка:
TypeError: fit() takes 2 positional arguments but 3 were given
Класс TfidfEmbeddingVectorizer выглядит следующим образом:
class TfidfEmbeddingVectorizer(object):
...
def fit(self, X):
tfidf = TfidfVectorizer(analyzer=lambda x: x)
tfidf.fit(X)
# if a word was never seen - it must be at least as infrequent
# as any of the known words - so the default idf is the max of
# known idf's
max_idf = max(tfidf.idf_)
self.word2weight = defaultdict(
lambda: max_idf,
[(w, tfidf.idf_[i]) for w, i in tfidf.vocabulary_.items()])
return self
И я использовал FeatureUnion следующим образом:
model = gensim.models.Word2Vec(speech.train_data, size = 100)
w2v = dict(zip(model.wv.index2word, model.wv.syn0))
count = CountVectorizer(tokenizer=lambda doc: doc, lowercase=False)
w2v_tfidf = TfidfEmbeddingVectorizer(w2v)
feature_union = FeatureUnion([('ngram', count),
('tfidf', w2v_tfidf)])
feature_union.fit(speech.train_data)
Я видел решение, которое позволяет понизить версию sk-learn до 0.18.0, но я не могу понизить версию sk-learn из-за этой ошибки:
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://andinghub.visualstudio.com/visual-cpp-build-tools
Существуют ли другие решения для использования функции подгонки FeatureUnion?