Ни один алгоритм машинного обучения не может обрабатывать текст как ввод или вывод. Оба всегда будут числовыми. Вам нужно найти способ сопоставить ваши входные данные (электронные письма) и выходные данные (метки) с числовыми значениями таким образом, чтобы сохранить информацию .
Что касается ваших меток, вам, вероятно, нужно сопоставить каждую метку с другим целым числом, а затем использовать их для обучения классификатора:
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
encoded_labels = le.fit_transform(labels)
Модели Sklearn могут выполнять эту работу самостоятельно, хотя в этом нет необходимости.
Что касается ваших входных данных, это может быть намного сложнее. Вот где ваша настоящая проблема .
Вы могли бы выполнить кодирование в горячем режиме, но это было бы очень плохой идеей, потому что тогда две почты могут быть либо одинаковыми, либо разными (и в большинстве случаев они будут разными), независимо от того, насколько они похожи , а также ваш вклад будет очень большой размер.
word2vec (https://radimrehurek.com/gensim/models/word2vec.html) - это способ сопоставить слова с векторами, анализируя логику между словами ваших предложений. В отличие от горячего кодирования, подобные письма будут включать в себя одни и те же слова или структуры предложений и будет близко в скрытом пространстве, даже если они не совсем равны. Это означает, что информация может быть сохранена.
Вам просто нужно найти способ сопоставить ваши предложения с векторами, поскольку ваши предложения являются вашими входными данными, основанными на векторах слов. Возможно, объедините векторы слов в вашем предложении и используйте 0-отступ, чтобы все предложения, даже с разным количеством слов, были сопоставлены с вектором одинаковой длины.
Но это может не сработать, и неочевидно найти способ сопоставить ваши предложения векторам таким образом, чтобы сохранить информацию, даже если вы отобразили свои слова с помощью word2vec. Смотрите этот пост: Как рассчитать сходство предложений, используя модель gensim word2vec с python .
Другим способом было бы попробовать реализацию doc2vec вместо word2vec. Это предназначено для отображения целых предложений на векторы, а не просто слова, и это именно то, что вы хотите сделать.