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)
...
...
Другие вопросы по тегам