Я просто догадываюсь, потому что я не использую sklearn, и вы не опубликовали полную трассировку стека, но исключение выглядит так, как будто он ожидает список строк в качестве параметра и вызывает "lower ()" строковых элементов.
Но то, что вы делаете, дает ему список списка со строками:
corpus = [1,2,3]
document = [' '.join(str(item)) for item in corpus]
print (document)
>>> ['1','2','3']
print ([document])
>>> [['1','2','3']]
Могу поспорить, что это будет исправлено, если вы просто позвоните вместо этого:
tf_idf_vector=tfidf_transformer.transform(cv.transform(document))