AWS Sagemaker | как тренировать текстовые данные | Для классификации билетов
Я новичок в Sagemaker и не знаю, как классифицировать ввод текста в AWS Sagemaker,
Предположим, у меня есть Dataframe с двумя полями, такими как "Билет" и "Категория", оба являются текстовым вводом. Теперь я хочу разделить его на тестовый и обучающий набор и загрузить в модель обучения Sagemaker.
X_train, X_test, y_train, y_test = model_selection.train_test_split(fewRecords['Ticket'],fewRecords['Category'])
Теперь, когда я хочу выполнить извлечение функции TD-IDF, а затем преобразовать его в числовое значение, поэтому выполните эту операцию
tfidf_vect = TfidfVectorizer(analyzer='word', token_pattern=r'\w{1,}', max_features=5000)
tfidf_vect.fit(fewRecords['Category'])
xtrain_tfidf = tfidf_vect.transform(X_train)
xvalid_tfidf = tfidf_vect.transform(X_test)
Когда я хочу загрузить модель в Sagemaker, чтобы я мог выполнить следующую операцию, как
buf = io.BytesIO()
smac.write_numpy_to_dense_tensor(buf, xtrain_tfidf, y_train)
buf.seek(0)
Я получаю эту ошибку
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-36-8055e6cdbf34> in <module>()
1 buf = io.BytesIO()
----> 2 smac.write_numpy_to_dense_tensor(buf, xtrain_tfidf, y_train)
3 buf.seek(0)
~/anaconda3/envs/python3/lib/python3.6/site-packages/sagemaker/amazon/common.py in write_numpy_to_dense_tensor(file, array, labels)
98 raise ValueError("Label shape {} not compatible with array shape {}".format(
99 labels.shape, array.shape))
--> 100 resolved_label_type = _resolve_type(labels.dtype)
101 resolved_type = _resolve_type(array.dtype)
102
~/anaconda3/envs/python3/lib/python3.6/site-packages/sagemaker/amazon/common.py in _resolve_type(dtype)
205 elif dtype == np.dtype('float32'):
206 return 'Float32'
--> 207 raise ValueError('Unsupported dtype {} on array'.format(dtype))
ValueError: Unsupported dtype object on array
Кроме этого исключения, я не уверен, что это правильный путь, поскольку TfidfVectorizer преобразует серию в матрицу.
Код предсказывает нормально на моей локальной машине, но не уверен, как сделать то же самое на Sagemaker. Все упомянутые примеры слишком длинны и не предназначены для человека, который все еще достиг SciKit Learn.
1 ответ
Выход из TfidfVectorizer
скудная разреженная матрица, а не простой массив
Так что либо используйте другую функцию, например:
write_spmatrix_to_sparse_tensor
"" "Записывает скудную разреженную матрицу в разреженный тензор" ""
Смотрите эту проблему для более подробной информации.
ИЛИ сначала преобразуйте вывод TfidfVectorizer
в плотный массив NumPy и затем использовать свой код выше
xtrain_tfidf = tfidf_vect.transform(X_train).toarray()
buf = io.BytesIO()
smac.write_numpy_to_dense_tensor(buf, xtrain_tfidf, y_train)
...
...