제퍼넷 로고

Amazon SageMaker Ground Truth, Amazon Comprehend 및 Amazon A2I를 사용하여 NLP 기반 엔티티 인식 모델에 대한 사용자 검토 설정

시간

여러 산업 분야의 조직에는 조직 기반 통찰력을 얻기 위해 평가할 수있는 많은 비정형 데이터가 있습니다. 독점 부품 코드 또는 산업별 용어와 같이 비즈니스에 고유 한 고유 한 엔티티 유형을 추가 할 수도 있습니다. NLP (자연어 처리) 기반 모델을 만들려면 특정 엔터티를 기준으로이 데이터에 레이블을 지정해야합니다.

아마존 세이지 메이커 그라운드 진실 머신 러닝 (ML)을위한 매우 정확한 교육 데이터 세트를 쉽게 구축 할 수 있도록합니다. 아마존 이해 모델 학습에 적합한 알고리즘 및 매개 변수를 선택하지 않아도 모델을 학습 할 수 있습니다. 아마존 증강 AI (Amazon A2I)를 사용하면 이러한 예측 결과를 감사, 검토 및 보강 할 수 있습니다.

이 게시물에서는 기본 진리를 사용하여 레이블이 지정된 사용자 지정 엔터티 데이터 집합을 작성하는 방법 명명 된 개체 인식 (NER) 라벨링 기능, 교육 맞춤 엔티티 인식기 Amazon Comprehend를 사용하고 Amazon A2I와 함께 사람 검토자를 사용하여 Amazon Comprehend의 특정 신뢰 임계 값 미만의 예측을 검토하십시오.

이것을 사용하여 다음 단계를 안내합니다. Amazon SageMaker Jupyter 노트북:

  1. 입력 문서를 사전 처리하십시오.
  2. Ground Truth NER 라벨링 작업을 만듭니다.
  3. Amazon Comprehend 사용자 지정 엔터티 인식기 모델을 훈련시킵니다.
  4. Amazon A2I를 사용하여 신뢰도가 낮은 탐지를위한 휴먼 검토 루프를 설정하십시오.

사전 조건

시작하기 전에 다음 단계를 완료하여 Jupyter 노트북을 설정하십시오.

  1. 노트북 인스턴스 생성 Amazon SageMaker에서

Amazon SageMaker 노트북이 필요한지 확인하십시오 AWS 자격 증명 및 액세스 관리 의 전제 조건 섹션에 언급 된 (IAM) 역할 및 권한 수첩.

  1. 노트북이 활성화되면 주피터 열기.
  2. Jupyter 대시 보드에서 신제품, 선택 단말기.
  3. 터미널에서 다음 코드를 입력하십시오.
    cd SageMaker
    git clone “https://github.com/aws-samples/augmentedai-comprehendner-groundtruth”

  4. 선택하여 노트북을 엽니 다 SageMakerGT-ComprehendNER-A2I-Notebook.ipynb 루트 폴더에.

이제 노트북 셀을 통해 다음 단계를 실행할 준비가되었습니다.

입력 문서 전처리

이 사용 사례에서는 채팅 메시지 또는 여러 서비스 티켓을 검토하고 있습니다. 이들이 AWS 오퍼링과 관련이 있는지 알고 싶습니다. Ground Truth의 NER 라벨링 기능을 사용하여 SERVICE or VERSION 입력 메시지에서 엔티티. 그런 다음 트윗이나 티켓 댓글과 같은 텍스트에서 엔티티를 인식하도록 Amazon Comprehend 사용자 지정 엔티티 인식기를 훈련시킵니다.

샘플 데이터 세트는 data/rawinput/aws-service-offerings.txt FBI 증오 범죄 보고서 GitHub 레포. 다음 스크린 샷은 컨텐츠의 예를 보여줍니다.

이 파일을 사전 처리하여 다음을 생성하십시오.

  • 입력.csv – 이 파일을 사용하여 Ground Truth NER 라벨링을위한 입력 매니페스트 파일을 생성합니다.
  • Train.csv 및 test.csv – 이 파일을 사용자 지정 엔터티 교육을위한 입력으로 사용합니다. 이 파일들은 아마존 단순 스토리지 서비스 (Amazon S3) 버킷.

의 단계 1a 및 1b를 참조하십시오. 수첩 데이터 세트 생성 용.

Ground Truth NER 라벨링 작업 생성

목적은 입력 문서 내에서 문장에 주석을 달고 레이블을 지정하여 우리가 정의한 사용자 지정 엔터티에 속합니다. 이 섹션에서는 다음 단계를 완료하십시오.

  1. Ground Truth에 필요한 매니페스트 파일을 만듭니다.
  2. 라벨링 인력을 설정하십시오.
  3. 라벨 작업을 만듭니다.
  4. 라벨 작업을 시작하고 출력을 확인하십시오.

매니페스트 파일 만들기

우리는을 사용하여 inputs.csv NER 라벨링 기능에 필요한 매니페스트 파일을 생성하기 위해 사전에 생성하는 동안 생성 된 파일. 우리는 이름의 매니페스트 파일을 생성합니다 prefix+-text-input.manifest기본 진리 작업을 작성하는 동안 데이터 레이블링에 사용합니다. 다음 코드를 참조하십시오.

# Create and upload the input manifest by appending a source tag to each of the lines in the input text file. # Ground Truth uses the manifest file to determine labeling tasks manifest_name = prefix + '-text-input.manifest'
# remove existing file with the same name to avoid duplicate entries
!rm *.manifest
s3bucket = s3res.Bucket(BUCKET) with open(manifest_name, 'w') as f: for fn in s3bucket.objects.filter(Prefix=prefix +'/input/'): fn_obj = s3res.Object(BUCKET, fn.key) for line in fn_obj.get()['Body'].read().splitlines(): f.write('{"source":"' + line.decode('utf-8') +'"}n')
f.close()
s3.upload_file(manifest_name, BUCKET, prefix + "/manifest/" + manifest_name)

NER 라벨링 작업의 입력 매니페스트는 {"source": "embedded text"}. 다음 스크린 샷은 생성 된 것을 보여줍니다 input.manifest 에서 파일 inputs.csv.

개인 라벨링 인력 만들기

Ground Truth에서는 개인 인력을 사용하여 레이블이 지정된 데이터 집합을 만듭니다.

당신은에 개인 인력을 만들 Amazon SageMaker 콘솔. 지침은 섹션을 참조하십시오 개인 작업 팀 만들기 in Amazon SageMaker Ground Truth 및 Amazon Comprehend를 사용하여 NER 모델 개발.

또는의 단계를 따르십시오 수첩.

이 연습에서는 동일한 개인 인력을 사용하여 사용자 지정 엔터티 교육 후 Amazon A2I를 사용하여 신뢰도가 낮은 데이터에 레이블을 지정하고 보강합니다.

라벨링 작업 생성

다음 단계는 NER 라벨링 작업을 생성하는 것입니다. 이 게시물은 주요 단계를 강조합니다. 자세한 내용은 Amazon SageMaker Ground Truth를 사용하여 명명 된 엔티티 인식을위한 데이터 레이블링 워크 플로우 추가.

  1. Amazon SageMaker 콘솔의 지상 진실선택한다. 라벨링 작업.
  2. 왼쪽 메뉴에서 라벨링 작업 생성.
  3. 럭셔리 직업 이름작업 이름을 입력하십시오.
  4. 럭셔리 입력 데이터 셋 위치, 생성 한 입력 매니페스트 파일의 Amazon S3 위치를 입력합니다 (s3://bucket//path-to-your-manifest.json).
  5. 럭셔리 출력 데이터 셋 위치출력 접두사가있는 S3 버킷을 입력합니다 (예 : s3://bucket-name/output).
  6. 럭셔리 IAM 역할선택한다. 새로운 역할을 만듭니다.
  7. 선택 모든 S3 버킷.
  8. 왼쪽 메뉴에서 만들기.
  9. 럭셔리 작업 카테고리선택한다. 본문.
  10. 선택 명명 된 개체 인식.
  11. 왼쪽 메뉴에서 다음 보기.
  12. 럭셔리 작업자 유형, 고르다 프라이빗 투어.
  13. In 개인 팀, 생성 한 팀을 선택하십시오.
  14. . 명명 된 엔터티 인식 레이블링 도구 섹션 작업에 대한 간단한 설명을 입력하십시오, 입력 Highlight the word or group of words and select the corresponding most appropriate label from the right.
  15. . 명령 상자에 입력하십시오. Your labeling will be used to train an ML model for predictions. Please think carefully on the most appropriate label for the word selection. Remember to label at least 200 annotations per label type.
  16. 왼쪽 메뉴에서 굵은 이탤릭체.
  17. . 레이블 섹션에서 직원에게 표시 할 레이블 이름을 입력하십시오.
  18. 왼쪽 메뉴에서 만들기.

라벨 작업 시작

직원 (또는 자신을 직원으로 선택한 경우)은 로그인 지침이 포함 된 이메일을 받았습니다.

  1. 제공된 URL을 선택하고 사용자 이름과 비밀번호를 입력하십시오.

라벨 작업 UI로 연결됩니다.

  1. 단어 그룹에 대한 레이블을 선택하여 레이블 작업을 완료하십시오.
  2. 왼쪽 메뉴에서 문의하기.
  3. 모든 항목에 레이블을 지정하면 UI가 자동으로 종료됩니다.
  4. 작업 상태를 확인하려면 Amazon SageMaker 콘솔의 지상 진실선택한다. 라벨링 작업.
  5. 작업 상태가 다음과 같이 표시 될 때까지 기다리십시오. Complete.

주석 출력 확인

주석 출력 확인S3 버킷을 열고 찾아 <S3 Bucket Name>/output/<labeling-job-name>/manifests/output/output.manifest. Ground Truth에서 생성 한 매니페스트 파일을 검토 할 수 있습니다. 다음 스크린 샷은 표시되는 항목의 예를 보여줍니다.

사용자 지정 엔터티 모델 교육

이제 주석이 달린 데이터 세트를 사용하거나 output.manifest Ground Truth는 맞춤형 엔터티 인식기를 훈련시키기 위해 만들어졌습니다. 이 섹션에서는 다음 단계를 안내합니다. 수첩.

주석이 달린 데이터 세트 처리

다음을 통해 Amazon Comprehend 사용자 지정 엔터티에 레이블을 제공 할 수 있습니다. 엔터티 목록 or 주석. 이 게시물에서는 Ground Truth 레이블 작업을 사용하여 생성 된 주석을 사용합니다. 주석이 달린 변환해야합니다 output.manifest 다음 CSV 형식으로 파일을 저장하십시오.

File, Line, Begin Offset, End Offset, Type
documents.txt, 0, 0, 11, VERSION

에서 다음 코드를 실행하십시오. 수첩 를 생성 annotations.csv 파일 :

# Read the output manifest json and convert into a csv format as expected by Amazon Comprehend Custom Entity Recognizer
import json
import csv # this will be the file that will be written by the format conversion code block below
csvout = 'annotations.csv' with open(csvout, 'w', encoding="utf-8") as nf: csv_writer = csv.writer(nf) csv_writer.writerow(["File", "Line", "Begin Offset", "End Offset", "Type"]) with open("data/groundtruth/output.manifest", "r") as fr: for num, line in enumerate(fr.readlines()): lj = json.loads(line) #print(str(lj)) if lj and labeling_job_name in lj: for ent in lj[labeling_job_name]['annotations']['entities']: csv_writer.writerow([fntrain,num,ent['startOffset'],ent['endOffset'],ent['label'].upper()]) fr.close()
nf.close() s3_annot_key = "output/" + labeling_job_name + "/comprehend/" + csvout upload_to_s3(s3_annot_key, csvout)

다음 스크린 샷은 파일 내용을 보여줍니다.

사용자 지정 엔터티 인식기 설정

이 게시물은 API를 사용하지만 Amazon Comprehend 콘솔에서 인식기 및 배치 분석 작업을 선택적으로 생성 할 수 있습니다. 지침은 Amazon Comprehend를 사용하여 사용자 지정 엔티티 인식기 구축.

  1. 다음 코드를 입력하십시오. 에 대한 s3_train_channel, 사용 train.csv 인식기 교육을 위해 전처리 단계에서 생성 한 파일 에 대한 s3_annot_channel사용 annotations.csv 사용자 지정 엔터티 인식기를 훈련시키는 레이블로.
    custom_entity_request = { "Documents": { "S3Uri": s3_train_channel }, "Annotations": { "S3Uri": s3_annot_channel }, "EntityTypes": [ { "Type": "SERVICE" }, { "Type": "VERSION" } ]
    }

  2. 다음을 사용하여 엔티티 인식기를 작성하십시오. CreateEntityRecognizer 엔티티 인식기는 Amazon A2I 워크 플로우에 필요한 일부 신뢰도가 낮은 예측을 생성하기 위해 필요한 최소 수의 교육 샘플로 훈련됩니다. 다음 코드를 참조하십시오.
    import datetime id = str(datetime.datetime.now().strftime("%s"))
    create_custom_entity_response = comprehend.create_entity_recognizer( RecognizerName = prefix + "-CER", DataAccessRoleArn = role, InputDataConfig = custom_entity_request, LanguageCode = "en"
    )
    

    엔터티 인식기 작업이 완료되면 성능 점수가있는 인식기를 만듭니다. 앞에서 언급했듯이 Amazon A2I 휴먼 루프를 트리거해야하는 낮은 신뢰도 예측을 생성하기 위해 최소한의 훈련 샘플로 엔티티 인식기를 훈련했습니다. 이러한 지표는 Amazon Comprehend 콘솔에서 찾을 수 있습니다. 다음 스크린 샷을 참조하십시오.

  3. 다수의 문서에서 엔티티를 감지하는 배치 엔티티 감지 분석 작업을 작성하십시오.

Amazon Comprehend 사용 엔터티 감지 작업 문서에서 사용자 지정 엔터티를 감지합니다. 사용자 지정 엔터티 인식기를 사용하여 실시간 분석을위한 끝점을 만드는 방법에 대한 지침은 Amazon Comprehend 맞춤형 엔티티 인식 실시간 엔드 포인트 출시 발표.

을 사용하려면 EntityRecognizerArn 사용자 지정 엔터티 인식의 경우 사용자 지정 엔터티를 검색하려면 인식기에 대한 액세스 권한을 제공해야합니다. 이 ARN은 다음에 대한 응답으로 제공됩니다. CreateEntityRecognizer 작동.

  1. 사용자 지정 엔터티 감지 작업을 실행하여 사전 처리 단계에서 생성 한 테스트 데이터 집합에 대한 예측을 얻으려면 수첩:
    s3_test_channel = 's3://{}/{}'.format(BUCKET, s3_test_key) s3_output_test_data = 's3://{}/{}'.format(BUCKET, "output/testresults/") test_response = comprehend.start_entities_detection_job( InputDataConfig={ 'S3Uri': s3_test_channel, 'InputFormat': 'ONE_DOC_PER_LINE'
    }, OutputDataConfig={'S3Uri': s3_output_test_data }, DataAccessRoleArn=role, JobName='a2i-comprehend-gt-blog', EntityRecognizerArn=jobArn, LanguageCode='en')
    

    다음 스크린 샷은 테스트 결과를 보여줍니다.

휴먼 검토 루프 설정

이 섹션에서는 Amazon A2I에서 신뢰도가 낮은 탐지를위한 휴먼 검토 루프를 설정합니다. 다음 단계가 포함됩니다.

  1. 인력을 선택하십시오.
  2. 휴먼 타스크 UI를 작성하십시오.
  3. 작업자 작업 템플릿 생성자 기능을 만듭니다.
  4. 플로우 정의를 작성하십시오.
  5. 휴먼 루프 상태를 확인하고 검토자가 작업을 완료 할 때까지 기다리십시오.

인력 선택

이 게시물에서는 그라운드 트루 라벨링 작업을 위해 만든 개인 인력을 사용합니다. 인력 ARN을 사용하여 Amazon A2I에 대한 인력을 설정하십시오.

휴먼 타스크 UI 작성

유동 HTML에서 UI 템플리트를 사용하여 휴먼 타스크 UI 자원을 작성하십시오. 이 템플릿은 휴먼 루프가 필요할 때마다 사용됩니다.

다음 코드 예제는 Amazon Comprehend 엔티티 감지와 호환됩니다.

template = """
<script src="https://assets.crowd.aws/crowd-html-elements.js"></script> <style> .highlight { background-color: yellow; }
</style> <crowd-entity-annotation name="crowd-entity-annotation" header="Highlight parts of the text below" labels="[{'label': 'service', 'fullDisplayName': 'Service'}, {'label': 'version', 'fullDisplayName': 'Version'}]" text="{{ task.input.originalText }}"
> <full-instructions header="Named entity recognition instructions"> <ol> <li><strong>Read</strong> the text carefully.</li> <li><strong>Highlight</strong> words, phrases, or sections of the text.</li> <li><strong>Choose</strong> the label that best matches what you have highlighted.</li> <li>To <strong>change</strong> a label, choose highlighted text and select a new label.</li> <li>To <strong>remove</strong> a label from highlighted text, choose the X next to the abbreviated label name on the highlighted text.</li> <li>You can select all of a previously highlighted text, but not a portion of it.</li> </ol> </full-instructions> <short-instructions> Select the word or words in the displayed text corresponding to the entity, label it and click submit </short-instructions> <div id="recognizedEntities" style="margin-top: 20px"> <h3>Label the Entity below in the text above</h3> <p>{{ task.input.entities }}</p> </div>
</crowd-entity-annotation> <script> function highlight(text) { var inputText = document.getElementById("inputText"); var innerHTML = inputText.innerHTML; var index = innerHTML.indexOf(text); if (index >= 0) { innerHTML = innerHTML.substring(0,index) + "<span class='highlight'>" + innerHTML.substring(index,index+text.length) + "</span>" + innerHTML.substring(index + text.length); inputText.innerHTML = innerHTML; } } document.addEventListener('all-crowd-elements-ready', () => { document .querySelector('crowd-entity-annotation') .shadowRoot .querySelector('crowd-form') .form .appendChild(recognizedEntities); });
</script> """

작업자 작업 템플릿 생성기 기능 만들기

이 기능은 Amazon SageMaker 패키지의 작업자 작업 템플릿을 생성하는 방법에 대한 상위 수준 추상화로, 사람 검토 워크 플로를 생성하는 데 사용됩니다. 다음 코드를 참조하십시오.

def create_task_ui(): ''' Creates a Human Task UI resource. Returns: struct: HumanTaskUiArn ''' response = sagemaker.create_human_task_ui( HumanTaskUiName=taskUIName, UiTemplate={'Content': template}) return response

# Task UI name - this value is unique per account and region. You can also provide your own value here.
taskUIName = prefix + '-ui' # Create task UI
humanTaskUiResponse = create_task_ui()
humanTaskUiArn = humanTaskUiResponse['HumanTaskUiArn']
print(humanTaskUiArn)

흐름 정의 만들기

흐름 정의를 사용하면 다음을 지정할 수 있습니다.

  • 작업이 전송되는 인력
  • 직원이받는 지침

이 게시물은 API를 사용하지만 원하는 경우이 워크 플로 정의를 만들 수 있습니다. 아마존 A2I 콘솔.

자세한 내용은 다음 링크를 참조하세요 흐름 정의 만들기.

휴먼 루프 검토를 트리거하는 조건을 설정하려면 다음 코드를 입력하십시오 ( CONFIDENCE_SCORE_THRESHOLD 인간 검토를 시작하려는 신뢰 수준에 따라)

human_loops_started = [] import json CONFIDENCE_SCORE_THRESHOLD = 90
for line in data: print("Line is: " + str(line)) begin_offset=line['BEGIN_OFFSET'] end_offset=line['END_OFFSET'] if(line['CONFIDENCE_SCORE'] < CONFIDENCE_SCORE_THRESHOLD): humanLoopName = str(uuid.uuid4()) human_loop_input = {} human_loop_input['labels'] = line['ENTITY'] human_loop_input['entities']= line['ENTITY'] human_loop_input['originalText'] = line['ORIGINAL_TEXT'] start_loop_response = a2i_runtime_client.start_human_loop( HumanLoopName=humanLoopName, FlowDefinitionArn=flowDefinitionArn, HumanLoopInput={ "InputContent": json.dumps(human_loop_input) } ) print(human_loop_input) human_loops_started.append(humanLoopName) print(f'Score is less than the threshold of {CONFIDENCE_SCORE_THRESHOLD}') print(f'Starting human loop with name: {humanLoopName} n') else: print('No human loop created. n')

휴먼 루프 상태 확인 및 검토자가 작업 완료를 기다리는 중

휴먼 루프의 상태를 확인할 수있는 함수를 정의하려면 다음 코드를 입력하십시오.

completed_human_loops = []
for human_loop_name in human_loops_started: resp = a2i_runtime_client.describe_human_loop(HumanLoopName=human_loop_name) print(f'HumanLoop Name: {human_loop_name}') print(f'HumanLoop Status: {resp["HumanLoopStatus"]}') print(f'HumanLoop Output Destination: {resp["HumanLoopOutput"]}') print('n') if resp["HumanLoopStatus"] == "Completed": completed_human_loops.append(resp)

이전 단계에서 셀 2의 출력으로 제공된 개인 인력 포털로 이동합니다. 수첩. 다음 코드를 참조하십시오.

workteamName = WORKTEAM_ARN[WORKTEAM_ARN.rfind('/') + 1:]
print("Navigate to the private worker portal and do the tasks. Make sure you've invited yourself to your workteam!")
print('https://' + sagemaker.describe_workteam(WorkteamName=workteamName)['Workteam']['SubDomain'])

UI 템플릿은 Ground Truth NER 라벨링 기능과 유사합니다. Amazon A2I는 입력 텍스트에서 식별 된 엔터티를 표시합니다 (낮은 신뢰도 예측). 그런 다음 작업자는 필요에 따라 엔터티 레이블을 업데이트하거나 확인할 수 있습니다. 문의하기.

이 조치는 사용자 검토자가 강조 표시 한 오프셋 및 엔티티로 업데이트 된 주석을 생성합니다.

청소

향후 청구가 발생하지 않도록 Amazon SageMaker 노트북 인스턴스, Amazon Comprehend 사용자 지정 엔터티 인식기 및 Amazon S3의 모델 아티팩트와 같은 리소스를 사용하지 않을 때는 중지하고 삭제하십시오.

결론

이 게시물에서는 Ground Truth NER를 사용하여 Amazon Comprehend 사용자 지정 엔터티 인식을위한 주석을 생성하는 방법을 설명했습니다. Amazon A2I를 사용하여 Amazon Comprehend의 낮은 신뢰도 예측을 강화했습니다.

Amazon A2I가 생성 한 주석을 사용하여 생성 한 주석 파일을 업데이트하고 사용자 정의 인식기를 점진적으로 훈련하여 모델의 정확도를 향상시킬 수 있습니다.

비디오 프레젠테이션, 샘플 Jupyter 노트북 또는 문서 처리, 컨텐츠 조정, 감정 분석, 텍스트 번역 등과 같은 사용 사례에 대한 자세한 내용은 다음을 참조하십시오. 아마존 증강 AI 리소스. 사용 사례에 맞게이 솔루션을 확장하고 의견을 환영하는 방법에 관심이 있습니다.


저자에 관하여

Mona Mona는 버지니아 주 알링턴에 기반을 둔 AI / ML 전문가 솔루션 아키텍트입니다. 그녀는 World Wide Public Sector 팀과 함께 일하며 고객이 대규모로 기계 학습을 채택하도록 돕습니다. 그녀는 AI / ML의 NLP 및 ML 설명 영역에 대해 열정적입니다.

Prem Ranga는 텍사스 휴스턴에 본사를 둔 엔터프라이즈 솔루션 아키텍트입니다. 그는 기계 학습 기술 분야 커뮤니티의 일원이며 ML 및 AI 여정에서 고객과 협력하는 것을 좋아합니다. 프렘은 로봇 공학에 열정을 갖고 있으며 자율 주행 차량 연구원이며 휴스턴과 다른 지역에 알렉사 제어 맥주 쏟아짐을 만들었습니다.

출처 : https://aws.amazon.com/blogs/machine-learning/setting-up-human-review-of-your-nlp-based-entity-recognition-models-with-amazon-sagemaker-ground-truth- Amazon-comprehend-and-amazon-a2i /

spot_img

최신 인텔리전스

spot_img