Распознавание объектов AWS costum: Неверная ARN-конечная точка

#amazon-web-services #boto3 #named-entity-recognition #amazon-comprehend

#amazon-веб-сервисы #boto3 #распознавание именованных объектов #amazon-понять

Вопрос:

Я пытаюсь использовать пользовательское распознавание объектов, которое я только что обучил в Amazon Web Service (AWS). Пока обучение работало: Обученный распознаватель объектов

Однако, если я попытаюсь распознать свои объекты с помощью AWS Lambda (код ниже) с заданной ARN-конечной точкой, я получаю следующую ошибку (даже если AWS следует использовать последнюю версию платформы botocore / boto3 «EntpointArn» недоступен (Документы)):

 Response:
{
  "errorMessage": "Parameter validation failed:nUnknown parameter in input: "EndpointArn", must be one of: Text, LanguageCode",
  "errorType": "ParamValidationError",
  "stackTrace": [
    "  File "/var/task/lambda_function.py", line 21, in lambda_handlern    entities = client.detect_entities(n",
    "  File "/var/runtime/botocore/client.py", line 316, in _api_calln    return self._make_api_call(operation_name, kwargs)n",
    "  File "/var/runtime/botocore/client.py", line 607, in _make_api_calln    request_dict = self._convert_to_request_dict(n",
    "  File "/var/runtime/botocore/client.py", line 655, in _convert_to_request_dictn    request_dict = self._serializer.serialize_to_request(n",
    "  File "/var/runtime/botocore/validate.py", line 297, in serialize_to_requestn    raise ParamValidationError(report=report.generate_report())n"
  ]
}
  

Я исправил эту ошибку с первыми 4 строками в своем коде:

 #---The hack I found on stackoverflow----
import sys
from pip._internal import main

main(['install', '-I', '-q', 'boto3', '--target', '/tmp/', '--no-cache-dir', '--disable-pip-version-check'])
sys.path.insert(0,'/tmp/')

#----------------------------------------

import json
import boto3

client = boto3.client('comprehend', region_name='us-east-1')

text = "Thats my nice text with different entities!"

entities = client.detect_entities(
            Text = text,
            LanguageCode = "de", #If you specify an endpoint, Amazon Comprehend uses the language of your custom model, and it ignores any language code that you provide in your request.
            EndpointArn = "arn:aws:comprehend:us-east-1:215057830319:entity-recognizer/MyFirstRecognizer"
)
  

Тем не менее, я все еще получаю еще одну ошибку, которую не могу исправить:

 Response:
{
  "errorMessage": "An error occurred (ValidationException) when calling the DetectEntities operation: 1 validation error detected: Value 'arn:aws:comprehend:us-east-1:XXXXXXXXXXXX:entity-recognizer/MyFirstRecognizer' at 'endpointArn' failed to satisfy constraint: Member must satisfy regular expression pattern: arn:aws(-[^:] )?:comprehend:[a-zA-Z0-9-]*:[0-9]{12}:entity-recognizer-endpoint/[a-zA-Z0-9](-*[a-zA-Z0-9])*",
  "errorType": "ClientError",
  "stackTrace": [
    "  File "/var/task/lambda_function.py", line 25, in lambda_handlern    entities = client.detect_entities(n",
    "  File "/tmp/botocore/client.py", line 316, in _api_calln    return self._make_api_call(operation_name, kwargs)n",
    "  File "/tmp/botocore/client.py", line 635, in _make_api_calln    raise error_class(parsed_response, operation_name)n"
  ]
}
  

Эта ошибка также возникает, если я использую платформу NodeJS с заданной конечной точкой. Забавно, что я должен упомянуть, что каждая ARN-конечная точка, которую я нашел (в руководствах), выглядит точно так же, как моя, и не соответствует шаблону регулярных выражений, возвращаемому как ошибка.

Я не совсем уверен, делаю ли я что-то не так здесь или это ошибка в AWS-Cloud (или SDK).. Может быть, кто-нибудь сможет воспроизвести эту ошибку и / или найти решение (или даже взломать) для этой проблемы

Приветствия

Ответ №1:

Конечная точка ARN — это другой ресурс AWS по сравнению с моделью ARN. Model ARN ссылается на пользовательскую модель, в то время как конечная точка размещает эту модель. В вашем коде ваш код, который вы передаете в modelARN вместо EndpointArn, вызывает ошибку.

Вы можете различать два ARN на основе префикса.

конечная точка arn — arn: aws: понять: us-east-1:XXXXXXXXXXXX: распознаватель объектов-конечная точка/xxxxxxxxxx

модель arn — arn: aws: понять: us-east-1:XXXXXXXXXXXXXX: распознаватель объектов/MyFirstRecognizer

Вы можете прочитать больше о пользовательских конечных точках Comprehend и их ценах на странице документации. https://docs.aws.amazon.com/comprehend/latest/dg/detecting-cer-real-time.html