#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