MixedCode

이번 시간에는 Language Understanding(LUIS) 자연어 처리 인공지능 기능을 챗봇에 연동하기 위한 LUIS 무료평가판 서비스를 신청하고 LUIS APP을 생성하고 각종 사용자 의도(INTENT) 키워드를 입력 후 MACHINE LEARNING(기계학습)과정을 통해 사용자 메시지의 의도를 파악할수 있게 훈련시킨 후 학습된 내용을 OPEN API 서비스로 제공하여 챗봇과 연동하는 방법을 알아보겠습니다.

1)구글에서 cognitive service 라고 입력하고 검색합니다.
 

2)Microsoft Cognitive 서비스 소개페이지가 오픈됩니다.
https://azure.microsoft.com/ko-kr/services/cognitive-services/
-화면하단의 언어 링크를 클릭합니다.
 

3)언어 메뉴 하단의  Language Understanding(LUIS) 메뉴를 클릭합니다.
 

4)Language Understanding 서비스 소개 페지의 중간의  무료평가판 메뉴를 클릭해 무료 평가 서비스 신청 페이지로 이동합니다.
-Microsoft 계정으로 로그인합니다.
 

5)사용자 정보 동의 화면에 예를 클릭합니다.
 


6)LUIS 소개 홈페이지가 오픈됩니다.
- 화면 로딩이 늦으면 F5 키를 눌러 화면을 재로드합니다.
<Link> LUIS 소개 홈페이지: https://www.luis.ai/welcome

 


7)LUIS APP 생성화면 이동하기
-화면 하단의 Create LUIS app버튼을 클릭합니다.


8)국가와 사용자 동의항목을 체크후 Contiue 버튼을 클릭합니다.


9)My Apps 화면에서 Create new app 버튼을 클릭해 신규 LUIS app을 생성을 진행합니다.
 

10. 테스트용  LUIS 앱을 생성합니다.
-Name : 영어로 LUIS 앱명을 입력합니다.
-Culuter : 사용 언어를 선택합니다. (Korean)
-Description: APP 설명내용을 입력합니다.


11)생성된 LUIS App내에 다양한 종류의 사용자 Intent(의도) 분석용 키워드를  생성합니다.
-사용자 의도(Intent) 키워드는 사용로부터 전달되는 메시지내 키워드들을 분석해 사용자 의도(Intent) 키워드의  서브 키워드들로 등록된 다양한 단어들을 기계학습시킨 결과를 이용해 사용자 메시지에서  등록된 다양한 사용자 의도(Intent)를 도출하기 위한 목적으로 사용됩니다.

 
-Create new Intent 버튼을 클릭하고 신규 Intent 키워드를 등록합니다.

12) 등록 Intent에 해당 인텐트를 연상시킬수 있는 주요 5가지  서브 타입 키워드 하나씩 입력 후 엔터키를 칩니다.  
-사용자 메시지에서 예약 인텐트를 연상시킬수 있는  키워드로 주말,마감,오픈,예약,시간,언제 등의 서브 타입 키워드를 입력했습니다.

13)상단 Train 버튼을 클릭하여 해당 Intents에 대해 기계학습을 실행 시킵니다.
-상단 빨간색 Train버튼을 클릭하면 입력된 서브 키워드를 기반으로하는 Machine Learning(기계학습) 이 작동되며 기계학습을 이용한 훈련이 종료되면 Train버튼 색상이 초록색으로 변경됩니다.


14)상단 Test 버튼을 클릭하여 학습내용을 테스트 합니다.
-언제 미용실 가면 머리를 할수 있나요? 문장을 입력 후 엔터 치면   입력한 문장에서 사용자 의도를 파악해 기 등록한 Intent와의 적합도를 수치로 표시해주고 질문문장(검정색블럭)을 클릭하면 옆으로 세부적인 분석결과를 보여줍니다.



-다양한 종류의 테스트용 사용자 입력 메시지를 입력 후 테스트를 진행해보세요. 


15 위치 Intent를 신규로 등록합니다.
-위치 Intent의 목적은 사용자가 미용실의 위치나 찾아오는길을 물어보는경우 위치와 약도를 보여주기 위한 사용자의 의도를 파악할수 목적으로 사용됩니다.
-서브 타입 키워드로는 주소,지하철,주차,자동차,약도등을 입력합니다.
 

 -상단의 Train 버튼을 클릭하고 완료 후 Test를 진행합니다.


16) 설정된 Intents 를 OPEN API방식을 외부에 노출하기 위해 PUBLISH버튼을 클릭해 LUIS App을 게시합니다.
-상단 메뉴중 PUBLISH 버튼을 클릭합니다.
-미국 서부 지역만 2018년 07월 현재 지원됩니다.
 

17. LUIS APP이 게시되고 접속주소인 EndPoint 주소와 접속 인증키를 확인합니다.
-게시가 완료되면 화면내 게시버튼 옆에 게시일자가 갱신됩니다.
-LUIS Application ID : c5d5e819-10ae-477e-87f2-7f357f2dda82
-구독키(subscription-key) :  eee7c9a1669449f1b1adef6c13ba5b49
-외부 접속 EndPoint주소: 
https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/c5d5e819-10ae-477e-87f2-7f357f2dda82?subscription-key=eee7c9a1669449f1b1adef6c13ba5b49&verbose=true&timezoneOffset=540&q=
-EndPoint 주소의 QueryString 파라메터 키값중 “q” 의 값에 사용자 메시지가 전달됩니다.
 


18)LUIS App 호출 테스트 하기-브라우저를 오픈하고 주소란에 상기 EndPoint주소를 입력하고 q=파라메터에 문장을 입력 후 호출합니다.
https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/c5d5e819-10ae-477e-87f2-7f357f2dda82?subscription-key=eee7c9a1669449f1b1adef6c13ba5b49
&verbose=true&timezoneOffset=540&q=예약할수있나요?
-호출 후 JSON 포맷으로 데이터가 아래와 같이 출력되면 정상적으로 외부에서 OPEN API 호출방식으로 상기 주소를 호출시 상호간 통신이 가능하며 해당 주소를 이용해 챗봇에서 사용자 메시지를 전달합니다.
 

-해당 LUIS APP 메뉴의 Settings 메뉴를 클릭해 LUIS APP 정보를 확인하거나 관리합니다.



19) ChatBot에서 LUIS App을 호출하고 테스트합니다.
- 미용실 예약 챗봇 초반 시나리오에서  회원여부 사용자 답변 처리 메소드인 HelpReplyReceivedAsync()내 Else 분기문내 사용자 메시지 의도 파악 실패시 재질문을 요청했던 메소드인 //await this.MessageReceivedAsync(context, null); 해당구문을 주석처리하고 LUIS APP을 호출하여 사용자 의도를 파악하는 기능을 호출하게 변경합니다.
 

20) LUIS App에서 제공하는 EndPoint 주소를 호출하고 추천되는 사용자 인텐트를 기반으로 챗봇 시나리오를 계속 진행합니다.
-HttpClient 클래스는 C#에서 RESTful 서비스를 호출할떄 사용하는 클래스입니다.
-LUIS App에서 제공하는 EndPoint 주소정보에 채널로부터 전달된 사용자 메시지를 “&q=” 파라메터에 추가하여 추천 인텐트 결과 값을 호출합니다.
-호출 결과값은 JSON포맷으로 제공되며 제공된 JOSON값을 LuisResult 모델 클래스로 JsonConverter를 이용해 변환 후 여러 개의 인텐트중 적합도 가장높게 판단된 추천 인텐트인 TopScoringIntent값을 추출해 사용자 의도를 파악 후 인텐트별 관련 챗봇 메시지를 사용자에게 전달해 시나리오를  지속합니다.
 


지금까지 AZURE의 Cognitive Service의 언어 카테고리 서비스중 자연어처리 기능을 이용해 챗봇에서 사용자 메시지의 의도를 파악해 좀더 자연스러운 대화흐름을
제어하는 방법에 대해 알아보았습니다.


*