연습 - 의도 및 자연어 이해 설정

완료됨

이 모듈에서는 Azure Speech Service의 의도 인식에 대해 살펴봅니다. 의도 인식을 사용하면 애플리케이션에 AI 기반 음성 명령을 사용할 수 있습니다. 이 경우 사용자가 비특정 음성 명령을 말해도 시스템에서 사용자의 의도를 이해합니다.

장면 준비

  1. [계층 구조] 창에서 Lunarcom 개체를 선택한 다음, [검사기] 창에서 구성 요소 추가 단추를 사용하여 Lunarcom 의도 인식기(스크립트) 구성 요소를 Lunarcom 개체에 추가합니다.

    Screenshot of Add the Lunarcom Intent Recognizer (Script) component.

  2. [프로젝트] 창에서 Assets>MRTK.Tutorials.GettingStarted>Prefabs>RocketLauncher 폴더로 차례로 이동하고, RocketLauncher_Complete 프리팹을 [계층 구조] 창으로 끌어 카메라 앞의 적절한 위치에 배치합니다. 예를 들어 다음과 같습니다.

    • 변환 위치 X = 0, Y = -0.4, Z = 1
    • 변환 회전 X = 0, Y = 90, Z = 0

    Screenshot of Add the RocketLauncher_Complete prefab.

  3. [계층 구조] 창에서 Lunarcom 개체를 다시 선택한 다음, RocketLauncher_Complete>Button 개체를 차례로 펼치고, 각 Buttons 개체의 자식 개체를 해당 Lunar 발사 시스템 단추 필드에 할당합니다.

    Screenshot of Assigning each of the buttons.

Azure 언어 이해 리소스 만들기

이 섹션에서는 다음 섹션에서 만들 LUIS(언어 이해 지능형 서비스) 앱을 위한 Azure 예측 리소스를 만듭니다.

  1. Azure Portal에서 리소스 생성을 선택합니다. 그런 다음, Language Understanding을 검색하여 선택합니다.

    Screenshot of Azure prediction resource.

  2. 만들기 단추를 선택하여 이 서비스의 인스턴스를 만듭니다.

    Screenshot of create an instance of this service.

  3. 만들기 페이지에서 예측 옵션을 선택하고 다음 값을 입력합니다.

    • 평가판 구독을 이용하는 경우 구독에서 무료 평가판을 선택합니다. 평가판 구독을 이용하지 않는다면 다른 구독 중 하나를 선택합니다.
    • 리소스 그룹에서는 새로 만들기 링크를 선택하고 적절한 이름(예: MRKT-Tutorials)을 입력합니다. 확인을 선택합니다.

    Screenshot of Configure the prediction option.

    참고

    이 문서를 작성하는 시점부터 다음 섹션에서 LUIS(Language Understanding Intelligent Service)를 만들 때 LUIS 내에서 작성 평가판 키가 자동으로 생성되므로 작성 리소스를 만들 필요가 없습니다.

    Azure 계정에 다른 적합한 리소스 그룹이 이미 있는 경우 새 리소스 그룹을 만드는 대신 이 리소스 그룹을 사용할 수 있습니다.

  4. [만들기] 페이지에 있는 상태에서 다음 값을 입력합니다.

    • 이름에는 서비스에 적절한 이름을 입력합니다(예: MRTK-Tutorials-AzureSpeechServices).
    • 위치에는 앱 사용자의 물리적 위치와 가까운 위치를 선택합니다(예: (미국) 미국 서부).
    • 예측 가격 책정 계층에 대해 이 자습서에서는 F0(초당 5개 호출, 월당 10,000개 호출) 을 선택합니다.

    Screenshot of Configure the create page.

  5. 그런 다음 검토 + 만들기를 선택하고 세부 정보를 검토한 다음 페이지 맨 아래에 있는 만들기 단추를 선택하여 리소스를 만듭니다. 리소스 그룹을 만들도록 구성한 경우 새 리소스 그룹도 만듭니다.

    Screenshot of Review the details.

    참고

    새 리소스를 만드는 데는 몇 분 정도 걸릴 수 있습니다.

  6. 리소스 만들기 프로세스가 완료되면 배포가 완료됨이라는 메시지가 표시됩니다.

    Screenshot of Message display.

LUIS(언어 이해 지능형 서비스) 소개

이 섹션에서는 LUIS 앱을 만들고, 예측 모델을 구성 및 학습시키고, 이전 단계에서 만든 Azure 예측 리소스에 연결합니다.

수행해야 하는 작업을 사용자가 말하면, 앱이 장면에 있는 세 가지 빨간색 단추 중 사용자가 설정한 단추로 Interactable. OnClick() 이벤트를 트리거하는 의도가 생성됩니다.

예를 들어 사용자가 로켓 발사를 진행(go ahead and launch the rocket)하라고 말하면 앱은 go ahead가 어떤 작업 수행을 의미하는지 예측하고, 대상에 대한 Interactable. OnClick() 이벤트가 시작 단추를 누르면 시작된다고 예측합니다.

이를 위해 수행할 주요 단계는 다음과 같습니다.

  1. LUIS 앱 만들기
  2. 의도 만들기
  3. 발화 예제 만들기
  4. 엔터티 만들기
  5. 발화 예제에 엔터티 할당
  6. 앱 학습 테스트 및 게시
  7. 앱에 Azure 예측 리소스 할당

1. LUIS 앱 만들기

이전 섹션에서 Azure 리소스를 만들 때 사용한 것과 동일한 사용자 계정을 사용하여 LUIS에 로그인하고, 국가를 선택하고, 사용 약관에 동의합니다. 다음 단계에서 Azure 계정을 연결하라는 메시지가 표시되면 평가판 키를 사용하여 계속을 선택하여 Azure 작성 리소스를 대신 사용합니다.

참고

LUIS에 이미 등록했고 작성 평가판 키가 만료된 경우 Azure 리소스 작성 키로 마이그레이션 설명서를 참조하여 LUIS 작성 리소스를 Azure로 전환할 수 있습니다.

  1. 로그인이 끝나면 새 앱을 선택하고 새 앱 만들기 팝업 창에서 다음 값을 입력합니다.

    • 이름에는 적절한 이름을 입력합니다(예: MRTK Tutorials - AzureSpeechServices).
    • 문화권에 대해 영어를 선택합니다.
    • 설명에 대해 필요에 따라 적절한 설명을 입력합니다.
    • 예측 리소스의 경우 Azure Portal에서 만든 드롭다운 목록에서 예측 리소스를 선택합니다.
  2. 완료를 선택하여 새 앱을 만듭니다.

    Screenshot representing Select the done button.

  3. 새 앱이 만들어지면 해당 앱의 대시보드 페이지로 이동합니다.

    Screenshot of App's dashboard page.

2. 의도 만들기

  1. Dashboard 페이지에서 > App Assets >Intents 페이지로 이동한 다음 만들기를 선택하고, 새 의도 만들기 팝업 창에서 다음 값을 입력합니다.

    • 의도 이름에 대해 PressButton을 입력합니다.
  2. 완료를 선택하여 새 의도를 만듭니다.

    Screenshot of Create a new intent.

    주의

    이 자습서의 목적상 Unity 프로젝트에서는 이 의도를 의도의 이름(PressButton)으로 참조합니다. 의도의 이름을 반드시 정확하게 지정해야 합니다.

  3. 새 의도가 만들어지면 해당 의도의 페이지로 이동됩니다.

    Screenshot of Intent's page.

3. 발화 예제 만들기

  1. 다음 발화 예제를 PressButton 의도의 발화 예제 목록에 추가합니다.

    • activate launch sequence
    • show me a placement hint
    • initiate the launch sequence
    • press placement hints button
    • give me a hint
    • push the launch button
    • i need a hint
    • press the reset button
    • time to reset the experience
    • go ahead and launch the rocket
  2. 모든 예시 발화를 추가했다면 PressButton 의도 페이지가 다음과 같이 표시됩니다.

    Screenshot of PressButton intent page.

    주의

    이 자습서에서는 Unity 프로젝트에서 “hint”, “hints”, “reset”, “launch”라는 단어를 참조합니다. 반드시 모든 인스턴스에서 단어의 철자가 정확해야 합니다.

4. 엔터티 만들기

  1. PressButton 의도 페이지에서 > App Assets >Entities 페이지로 이동한 다음 만들기를 선택하고, 새 의도 만들기 팝업 창에서 다음 값을 입력합니다.

    • 엔터티 이름에 대해 Action을 입력합니다.
    • Entity type(엔터티 유형) 에서 Machine learned(기계 학습) 를 선택합니다.
  2. 만들기를 선택하여 새 엔터티를 만듭니다.

    Screenshot of Create a new entity.

  3. 이전 단계를 반복하여 Target이라는 다른 엔터티를 만듭니다. 이제 ActionTarget이라는 두 엔터티가 있습니다.

    Screenshot of Create a target entity.

    주의

    이 자습서의 목적상 Unity 프로젝트에서는 이러한 엔터티를 엔터티의 이름인 ActionTarget으로 참조합니다. 엔터티의 이름을 반드시 정확하게 지정해야 합니다.

5. 발화 예제에 엔터티 할당

[엔터티] 페이지에서 PressButton 의도 페이지로 다시 이동합니다.

  1. PressButton 의도 페이지로 돌아와 go라는 단어와 ahead라는 단어를 선택한 다음 컨텍스트 팝업 메뉴에서 Action (Simple)을 선택하여 go ahead의 이름을 Action 엔터티 값으로 지정합니다.

    Screenshot of Label go ahead as an action entity value.

  2. go ahead 구가 이제 Action 엔터티 값으로 정의됩니다. 이제 “go ahead”라는 단어에 작업 엔터티 값이 존재합니다.

    Screenshot of Notice the action entity value.

    참고

    이미지의 레이블 아래에 표시되는 빨간색 선은 엔터티 값이 예측되지 않았음을 의미합니다. 이 문제는 다음 섹션에서 모델을 학습할 때 해결됩니다.

  3. 이제 launch라는 단어를 선택한 다음 상황에 맞는 팝업 메뉴에서 Target (Simple)을 선택하여 launch의 이름을 Target 엔터티 값으로 지정합니다.

    Screenshot of select the word launch.

  4. 이제 launch 단어가 Target 엔터티 값으로 정의됩니다. 이제 “launch”라는 단어에 Target 엔터티 값이 존재합니다.

    Screenshot of Notice the Target entity value under the word launch.

  5. PressButton 의도 예시 발화인 go ahead and launch the rocket이 이제 다음과 같이 예측되도록 구성되었습니다.

    • 의도: PressButton
    • Action 엔터티: go ahead
    • Target 엔터티: launch
  6. 위의 프로세스를 반복하여 각 예시 발화에 Action 및 Target 엔터티 레이블을 할당합니다. 다음 단어는 이름을 Target 엔터티로 지정해야 합니다.

    • hint(Unity 프로젝트에서 HintsButton을 대상으로 함)
    • hints(Unity 프로젝트에서 HintsButton을 대상으로 함)
    • reset(Unity 프로젝트에서 ResetButton을 대상으로 함)
    • launch(Unity 프로젝트에서 LaunchButton을 대상으로 함)
  7. 모든 예시 발화의 이름을 지정했다면 PressButton 의도 페이지가 다음과 같이 표시됩니다.

    Screenshot of All the example utterances have been labeled.

6. 앱 학습, 테스트 및 게시

  1. 앱을 학습하려면 학습 단추를 선택하고 학습 프로세스가 완료될 때까지 기다립니다.

    Screenshot of Train the app.

    참고

    위의 이미지에서 볼 수 있듯이 모든 레이블 아래의 빨간색 선이 제거되어 모든 엔터티 값이 예측되었음을 나타냅니다. 또한 학습 단추 왼쪽의 상태 아이콘이 빨간색에서 녹색으로 변경되었습니다.

  2. 학습 처리가 끝나면 테스트 단추를 선택하고 go ahead and launch the rocket을 입력한 다음 Enter 키를 누릅니다.

    Screenshot of select the test button.

  3. 테스트 발화가 처리되면 검사를 선택하여 테스트 결과를 확인합니다.

    • 의도: PressButton(98.5% 확신도)
    • Action 엔터티: go ahead
    • Target 엔터티: launch

    Screenshot of select inspect to see the test results.

  4. 오른쪽 위에 있는 게시 단추를 선택한 다음 게시 슬롯 및 설정 선택 팝업 창에서 프로덕션을 선택하고 완료 단추를 선택하여 앱을 게시합니다.

    Screenshot of Publish the app.

  5. 게시 프로세스가 완료될 때까지 기다립니다.

    Screenshot of Wait for the publishing process to complete.

  6. 관리 > 애플리케이션 설정 >Azure 리소스 페이지로 이동합니다. Azure 리소스 페이지는 다음과 같은 형식으로 표시됩니다.

    Screenshot of Azure resources page.

UNITY 프로젝트를 LUIS 앱에 연결

  1. 관리 > 애플리케이션 설정 >Azure 리소스 페이지에서 복사 아이콘을 선택하여 예제 쿼리를 복사합니다.

    Screenshot of Connecting the unity project.

  2. Unity 프로젝트로 돌아가서 [계층 구조] 창에서 Lunarcom 개체를 선택한 다음, [검사기] 창에서 Lunarcom 의도 인식기(스크립트) 구성 요소를 찾아서 다음과 같이 구성합니다.

    • LUIS 엔드포인트 필드에서 이전 단계에서 복사한 예제 쿼리를 전달합니다. URL에서 YOUR_QUERY_HERE를 제거해야 합니다.

    Screenshot of Pass the example query you copied.

의도 인식 테스트 및 개선

  1. Unity 편집기에서 의도 인식을 직접 사용하려면 개발 컴퓨터에서 받아쓰기를 사용하도록 허용해야 합니다. 이 설정을 확인하려면 Windows 설정을 연 다음 개인 정보>음성을 차례로 선택하고 온라인 음성 인식이 설정되어 있는지 확인합니다.

    Screenshot of Testing the intent recognition.

  2. 게임 모드에 들어갔다면 먼저 로켓 단추를 눌러 의도 인식을 테스트할 수 있습니다. 그런 다음, 컴퓨터에 마이크가 있다고 가정하여 첫 번째 발화 예제인 go ahead and launch the rocket이라고 말하면 LunarModule이 우주로 발사되는 것을 볼 수 있습니다.

    Screenshot of Enter the game mode.

  3. 모든 발화 예제를 시도한 다음, 발화 예제의 일부 변형과 함께 몇 가지 임의 발화도 시도합니다.

  4. 그런 다음 LUIS로 돌아가 빌드 > 앱 성능 향상 >엔드포인트 발화 검토 페이지로 이동합니다. 토글 단추를 사용하여 기본 엔터티 뷰에서 토큰 보기로 전환한 다음 발화를 검토합니다.

    • 발화 열에서 필요에 따라 할당된 레이블을 변경하고 제거하여 의도에 맞게 조정합니다.
    • 맞춤 의도 열에서 의도가 올바른지 확인합니다.
    • 추가/삭제 열에서 녹색 확인 표시 단추를 선택하여 발화를 추가하거나 빨간색 x 단추를 클릭하여 삭제합니다.
  5. 발언을 원하는 만큼 검토한 후에는 학습 단추를 선택하여 모델을 다시 학습시킨 다음 게시 단추를 선택하여 업데이트된 앱을 다시 게시합니다.

    Screenshot of Retrain the model.

    참고

    엔드포인트 발화는 PressButton 의도에 맞추지 않지만, 해당 발화에 의도가 없음을 모델에 알리려면 맞춤 의도를 [없음]으로 변경할 수 있습니다.

  6. 앱 모델을 향상시키려면 이 프로세스를 원하는 횟수만큼 반복합니다.