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






Comments

  1. 박건태

    안녕하세요. 강사님.
    9/28 부산강의 잘 들었습니다.
    한가지 궁금한 사항이 있어... 여기 문의를 남깁니다. 혹시 답변이 가능하시면.. 부탁드립니다.
    LUIS 한국어 지원관련하여, MS문서를 찾아보면
    미리 빌드된 엔터티 , 구문제안 등이 지원이 안되고 있는것으로 알고 있습니다.
    혹시 향후 계획에 대해서 알고 계신지?
    혹은... 미리 빌드된 엔터티 미지원 상태에서, 한국어에 대한 처리가 매끄러운지
    고객사에 제안이 가능한 수준인지가 제일 궁금합니다.
    여기저기 찾아보면, 구글쪽 자연어처리 서비스를 써야 어느정도 한국어에 대한 처리가 된다고 들었습니다.

Leave a Reply

*