Надеюсь, мое объяснение прояснит вам, что здесь происходит.
Сначала вы попытались применить TfidfVectorizer
преобразование. Это изменит коллекцию текстов в TfidfVector, который состоит из чисел. Скажем, у вас есть этот список текстов
texts = [
'I am a bird',
'a crow is a bird',
'bird fly high in the sky',
'bird bird bird',
'black bird in the dead of night',
'crow is black bird'
]
работает
TfidfVectorizer().fit_transform(texts).todense()
приведет к
matrix([[0.91399636, 0.40572238, 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0.35748457, 0. , 0.66038049, 0. ,
0. , 0. , 0. , 0.66038049, 0. ,
0. , 0. , 0. ],
...])
Затем, из этой матрицы чисел, вы пытались применитьCountVectorizer
, что я не думаю, что вы хотели бы. Без Pipeline
ваш код будет выглядеть как
CountVectorizer().fit_transform(
TfidfVectorizer().fit_transform(texts).todense()
)
в соответствии с документацией scikit-learn CountVectorizer
принимает последовательность строк или байтов вместо числа.
Есть ли способ использовать два векторизатора в одном конвейере? или какие другие методы вы предлагаете?
Я предлагаю вам использовать один из CountVectorizer
или TfidfVectorizer
, не используйте оба в 1 конвейере. С точки зрения непрофессионала, CountVectorizer
будет выводить частоту каждого слова в наборе строк, которые вы передали, в то время как TfidfVectorizer
также будет выводить нормализованную частоту каждого слова. При этом оба метода служат одной и той же цели: преобразование набора текстов в числа с использованием частоты. Таким образом, вам следует использовать только один из них.
будет рад добавить мой ответ, если вы уточните подробнее, почему вы хотите использовать оба векторизатора в одном конвейере.