Я создал модель мешка слов, используя NLTK, на искрометной базе данных отзывов потребителей. У меня есть 3 столбца в моем последнем наборе данных: Настроения, текст и bagofwords. Схема показана ниже
StructType(List(StructField(Sentiment,StringType,true),StructField(text,StringType,true),StructField(bagofwords,ArrayType(StringType,true),true)))
Каждая запись в столбце bagofwords представляет собой список слов, в которых были удалены знаки препинания и стоп-слова. Я думаю, что этот столбец является причиной проблемы.
Я хочу оценить мою развернутую модель spark ml, передав такую полезную нагрузку json, как эта
scoring_payload = {"fields": ["text", "bagofwords"], "values": ["I hate this place, they are very incompetent", "['this', 'place', 'hate', 'they', 'incompetent']"]}
но я продолжаю получать ошибки, такие как:
Status code: 400, body: {
"trace": "ff8e614b33c635684e648e2c6705d9eb",
"errors": [{
"code": "invalid_payload",
"message": "Input Json parsing failed with error: java.lang.ClassCastException"
}]
}
Я еще не знаком с Java или Scala, но из того, что я могу сделать вывод, я думаю, что проблема связана с приведением массива / списка к строке и наоборот.
1016 *
Я попытался откорректировать полезную нагрузку, выполнив дамп как Json, но это также выдает ошибку.
Я также следовал инструкциям, приведенным в ссылке ниже:
https://dataplatform.cloud.ibm.com/analytics/notebooks/1fed143e-1877-42bd-b927-7d366e73745b/view?access_token=4b39718f9e1f1de55e6e67e8dcbb5f0cac848f390d73478d0dea9c1a8af24550
final_dataset1 = spark.read.parquet('final_sparkml_dataset_pq')
final_dataset1.show()
+---------+--------------------+--------------------+
|Sentiment| text| bagofwords|
+---------+--------------------+--------------------+
| negative|You need to doubl...|[something, cold,...|
| negative|Now first off I a...|[out, actually, f...|
| negative|I should have bee...|[we, was, gel, my...|
| negative|We stayed at the ...|[out, ball, cater...|
| negative|I figured I would...|[, respond, compa...|
| negative|Asked for blonde,...|[absolutely, awfu...|
| negative|There are places ...|[grumble, envisio...|
| negative|This place is ter...|[was, for, plotti...|
| negative|I had went here a...|[popped, circumst...|
from watson_machine_learning_client import WatsonMachineLearningAPIClient
wml_credentials = {
"apikey": "***",
"iam_apikey_description": "Auto-generated for key ***",
"iam_apikey_name": "wdp-writer",
"iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
"iam_serviceid_crn": "***",
"instance_id": "***",
"password": "***",
"url": "https://us-south.ml.cloud.ibm.com",
"username": "**"
}
client = WatsonMachineLearningAPIClient(wml_credentials)
created_deployment = client.deployments.create(published_model_uid, name="Sentiment Predictor SparkML")
scoring_endpoint = client.deployments.get_scoring_url(dep_details)
scoring_payload = {"fields": ["text", "bagofwords"], "values": ["I hate this place, they are very incompetent", "['this', 'place', 'hate', 'they', 'incompetent']"]}
deploy_model_pred = client.deployments.score(scoring_endpoint, scoring_payload)
Я получаю ошибки приведения:
Status code: 400, body: {
"trace": "ff8e614b33c635684e648e2c6705d9eb",
"errors": [{
"code": "invalid_payload",
"message": "Input Json parsing failed with error: java.lang.ClassCastException"
}]
}
Я ожидал вывод «rawprediction», «1.pagision »и других, похожих на то, что обычно получается при запуске метода преобразования на тестовых данных.
Есть идеи, что я делаю не так? Как я могу сделать свою полезную нагрузку действительной для такого случая?