연습 - 의도 및 자연어 이해 설정
이 모듈에서는 Azure Speech Service의 의도 인식에 대해 살펴봅니다. 의도 인식을 사용하면 사용자가 비특이적 음성 명령을 말할 수 있고 시스템이 의도를 이해하도록 할 수 있는 AI 기반 음성 명령을 애플리케이션에 장착할 수 있습니다.
장면 준비
계층 구조 창에서 Lunarcom 개체를 선택한 다음, 검사기 창에서 구성 요소 추가 단추를 사용하여 Lunarcom 개체에 Lunarcom 의도 인식기(스크립트) 구성 요소를 추가합니다.
프로젝트 창에서 자산>MRTK로 이동합니다. Tutorials.GettingStarted Prefated Prefabs>Rocket시작 관리자 폴더는 로켓시작 관리자_Complete 프리팹을 계층 구조 창으로 끌어 카메라 앞에 적합한 위치에 놓습니다.> 예시:
- 변환 위치 X = 0, Y = 1, Z = 1.5
- 변환 회전 X = 0, Y = 90, Z = 0
계층 구조 창에서 Lunarcom 개체를 다시 선택한 다음, Rocket시작 관리자_Complete>Buttons 개체를 확장하고 Buttons 개체의 각 자식 개체를 해당 달 시작 관리자 단추 필드에 할당합니다.
Azure 언어 서비스 리소스 만들기
이 섹션에서는 다음 섹션에서 만들 CLU(대화 언어 이해) 앱에 대한 Azure 언어 서비스 리소스를 만듭니다.
Azure Portal에 로그인하고 리소스 만들기를 선택한 다음, Language Service를 검색하여 선택합니다.
만들기 단추를 선택하여 이 서비스의 인스턴스를 만듭니다.
언어 만들기 페이지에서 다음 값을 입력합니다.
- 평가판 구독이 있는 경우 구독에서 평가판을 선택합니다. 평가판 구독을 이용하지 않는다면 다른 구독 중 하나를 선택합니다.
- 리소스 그룹의 경우 새 링크 만들기를 선택한 다음 적절한 이름(예: MRTK-Tutorials)을 입력합니다. 확인을 선택합니다.
팁
Azure 계정에 다른 적합한 리소스 그룹이 이미 있는 경우 새 리소스 그룹을 만드는 대신 이 리소스 그룹을 사용할 수 있습니다.
[만들기] 페이지에 있는 상태에서 다음 값을 입력합니다.
- 이름에 대해 서비스에 적합한 이름(예: MRTK-Tutorials-AzureSpeechServices)을 입력합니다.
- 지역의 경우 앱 사용자의 실제 위치와 가까운 위치(예: 미국 동부)를 선택합니다.
- 이 자습서에서는 가격 책정 계층으로 F0(30일당 5,000건의 트랜잭션)을 선택합니다.
다음으로 검토 + 만들기를 선택하고, 세부 정보를 검토한 다음, 페이지 맨 아래에 있는 만들기 단추를 선택하여 리소스를 만듭니다(그리고 새로 만들도록 구성한 경우 새 리소스 그룹).
리소스 생성 프로세스가 완료되면 배포가 완료되었습니다라는 메시지가 표시됩니다.
CLU(대화 언어 이해) 앱 만들기
이 섹션에서는 CLU 앱을 만들고, 예측 모델을 구성 및 학습하고, 이전 단계에서 만든 Azure 언어 리소스에 연결합니다.
특히 사용자가 작업을 수행해야 한다고 말하면 사용자가 참조하는 버튼에 따라 앱이 장면에 있는 파란색 버튼 3개 중 하나에서 PressableButton.OnClicked()
이벤트를 트리거하는 의도를 생성합니다.
예를 들어 사용자가 로켓 발사를 진행(go ahead and launch the rocket)하라고 말하면 앱은 go ahead가 어떤 작업 수행을 의미하는지 예측하고, 대상에 대한 PressableButton.OnClicked()
이벤트가 시작 단추를 누르면 시작된다고 예측합니다.
이를 달성하기 위해 수행할 주요 단계는 다음과 같습니다.
- CLU 앱 만들기
- 의도 만들기
- 발화 예제 만들기
- 엔터티 만들기
- 발화 예제에 엔터티 할당
- 앱 학습 테스트 및 게시
1. CLU 앱 만들기
이전 섹션에서 Azure 리소스를 만들 때 사용한 것과 동일한 사용자 계정을 사용하여 Language Studio에 로그인합니다.
로그인하면 Azure 리소스를 선택하라는 메시지가 표시됩니다. Azure 언어 서비스 리소스를 만들 때 사용한 값을 선택한 다음 완료를 선택합니다.
Azure 리소스를 연결한 후 새 > Conversational Language Understanding 만들기를 선택하고 프로젝트 만들기 팝업 창에 다음 값을 입력합니다.
- 이름에는 적절한 이름을 입력합니다(예: MRTK-Tutorials-AzureSpeechServices). 선택한 이름을 기록해 두세요. 나중에 자습서에서 필요합니다.
- 발화 기본 언어의 경우 언어를 선택합니다.
- 설명의 경우 필요에 따라 적절한 설명을 입력합니다.
프로젝트 구성을 검토하려면 다음을 선택합니다. 만들기를 선택하여 프로젝트를 만듭니다.
새 앱을 만들면 해당 앱의 스키마 정의 페이지로 이동됩니다.
2. 의도 만들기
스키마 정의 페이지에서 추가를 선택하고 의도 추가 팝업 창에 다음 값을 입력합니다.
- 의도 이름에 대해 PressButton을 입력합니다.
새 의도를 만들려면 의도 추가를 선택합니다.
주의
이 자습서의 목적상 Unity 프로젝트에서는 이 의도를 의도의 이름(
PressButton
)으로 참조합니다. 의도의 이름을 정확히 동일하게 지정하는 것이 매우 중요합니다.새 의도가 만들어지면 스키마 정의 페이지로 돌아갑니다. PressButton 의도가 의도 목록에 표시됩니다.
3. 발화 예제 만들기
왼쪽 사이드바에서 데이터 레이블 지정 단추를 선택합니다. 데이터 레이블 지정 화면의 의도 선택 드롭다운에서 PressButton을 선택합니다.
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
모든 예제 발화를 추가한 경우 데이터 레이블 지정 페이지는 다음과 같습니다.
주의
이 자습서의 목적을 위해 Unity 프로젝트는 "힌트", "힌트", "재설정" 및 "시작"이라는 단어를 참조합니다. 모든 인스턴스에서 정확히 동일한 방식으로 이러한 단어의 철자를 지정하는 것이 매우 중요합니다.
4. 엔터티 만들기
데이터 레이블 지정 페이지의 오른쪽 작업 창에서 엔터티 추가를 선택하고 엔터티 추가 팝업 창에 다음 값을 입력합니다.
- 엔터티 이름에 대해 Action을 입력합니다.
엔터티 추가를 선택하여 새 엔터티를 만듭니다.
이전 단계를 반복하여 Target이라는 다른 엔터티를 만들면 Action과 Target이라는 엔터티가 두 개 있습니다.
주의
이 자습서의 목적상 Unity 프로젝트에서는 이러한 엔터티를 엔터티의 이름인
Action
및Target
으로 참조합니다. 엔터티의 이름을 정확히 동일하게 지정하는 것이 매우 중요합니다.
5. 발화 예제에 엔터티 할당
이동 단어를 선택한 다음, 앞으로의 단어에서 상황에 맞는 팝업 메뉴에서 작업(단순)을 선택하여 레이블을 작업 엔터티 값으로 계속 진행합니다.
go ahead 구가 이제 Action 엔터티 값으로 정의됩니다. 이제 "go ahead"라는 단어 아래에 작업 엔터티 값이 있습니다.
참고 항목
이미지의 레이블 아래에 표시되는 빨간색 선은 엔터티 값이 예측되지 않았음을 나타냅니다. 이 문제는 다음 섹션에서 모델을 학습할 때 해결됩니다.
다음으로, 단어 시작을 선택한 다음 상황에 맞는 팝업 메뉴에서 대상을 선택하여 시작에 대상 엔터티 값으로 레이블을 지정합니다.
이제 launch 단어가 Target 엔터티 값으로 정의됩니다. 이제 "launch"라는 단어 아래에 대상 엔터티 값이 있습니다.
PressButton 의도 예시 발화인
go ahead and launch the rocket
이 이제 다음과 같이 예측되도록 구성되었습니다.- 의도: PressButton
- Action 엔터티: go ahead
- Target 엔터티: launch
위의 프로세스를 반복하여 각 예시 발화에 Action 및 Target 엔터티 레이블을 할당합니다. 다음 단어는 이름을 Target 엔터티로 지정해야 합니다.
- hint(Unity 프로젝트에서 HintsButton을 대상으로 함)
- hints(Unity 프로젝트에서 HintsButton을 대상으로 함)
- reset(Unity 프로젝트에서 ResetButton을 대상으로 함)
- launch(Unity 프로젝트에서 LaunchButton을 대상으로 함)
변경 사항 저장을 선택합니다. 모든 예제 발화에 레이블을 지정한 경우 PressButton 의도 페이지는 다음과 같습니다.
6. 앱 학습, 테스트 및 게시
앱을 학습하려면 왼쪽 사이드바에서 학습 단추를 선택합니다. 학습 작업 페이지가 표시됩니다.
학습 작업 시작을 선택하고 다음 값을 선택합니다.
- 새 모델 학습을 선택하고 적절한 이름(예: MRTK-Tutorials-AzureSpeechServices)을 입력합니다.
- 표준 교육을 선택합니다.
- 학습 데이터에서 테스트 집합을 자동으로 분할합니다.
학습 과정을 시작하려면 학습을 선택합니다. 학습 처리가 완료되면 완료된 학습 알림이 표시됩니다.
학습 결과를 검토하려면 학습 작업 화면에서 출력 모델을 선택한 다음 모델 성능 탭을 선택합니다.
앱을 배포하려면 왼쪽 사이드바에서 모델 배포 단추를 선택합니다. 모델 배포 페이지가 표시됩니다.
배포 추가를 선택하고 배포 추가 팝업에 다음 값을 입력합니다.
- 새 배포 이름 만들기를 선택하고 적절한 이름을 입력합니다. 선택한 이름을 기록해 두세요. 나중에 자습서에서 필요합니다.
- 학습된 모델 선택 드롭다운에서 이전에 만든 모델을 선택합니다.
배포를 선택하고 게시 프로세스가 완료되기를 기다립니다.
새 배포를 선택하고 예측 URL 가져오기 단추를 선택합니다.
Unity 프로젝트를 CLU 앱에 연결
예측 URL 가져오기 팝업에서 복사 아이콘을 선택하여 예측 URL을 복사합니다.
Unity 프로젝트로 돌아가서 계층 구조 창에서 Lunarcom 개체를 선택한 다음, 검사기 창에서 Lunarcom 의도 인식기(스크립트) 구성 요소를 찾아 다음과 같이 구성합니다.
- CLU 엔드포인트 필드에 이전 단계에서 복사한 예측 URL을 전달합니다.
- CLU 프로젝트 이름 필드에 CLU 앱을 만들 때 적어둔 프로젝트 이름을 전달합니다.
- CLU 배포 필드에 새 배포를 만들 때 적어둔 배포 이름을 전달합니다.
- 언어 서비스 API 키 필드에서 언어 서비스에 대한 API 키(Key1 또는 Key2)를 전달합니다. Azure Portal에서 언어 서비스를 선택한 다음, 왼쪽 메뉴에서 키 및 엔드포인트를 선택하여 찾을 수 있습니다.
의도 인식 테스트
Unity 편집기에서 의도 인식을 직접 사용하려면 개발 컴퓨터에서 받아쓰기를 사용하도록 허용해야 합니다. 이 설정을 확인하려면 Windows 설정 연 다음 Privacy>Speech를 선택하고 온라인 음성 인식이 켜져 있는지 확인합니다.
게임 모드에 들어갔다면 먼저 로켓 단추를 눌러 의도 인식을 테스트할 수 있습니다. 그런 다음 첫 번째 발화 예제를 말할 때 로켓을 발사하면 LunarModule이 우주로 발사되는 것을 볼 수 있습니다.
모든 예제 발화, 예제 발화의 일부 변형, 몇 가지 임의 발화를 시도합니다.