Как оценить мою развернутую модель Apache SparkML для НЛП - PullRequest
0 голосов
/ 25 июня 2019

Я создал модель мешка слов, используя 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 »и других, похожих на то, что обычно получается при запуске метода преобразования на тестовых данных.

Есть идеи, что я делаю не так? Как я могу сделать свою полезную нагрузку действительной для такого случая?

...