Image
Image

GAB-Chatbot3 : Azure Machine Learning 기반 자연어처리 기술 LUIS(Language Understanding Intelligent Service) 활용하기

이번 시간에는 LUIS(Language Understanding Intelligent Service) 머신러닝 기반 자연어 처리 Azure 인공지능 서비스
챗봇에 연동하기 위한 LUIS 무료평가판 서비스를 신청하고 LUIS APP을 생성하고 각종 사용자 의도(INTENT) 를 등록하고 사용자 메시지로부터 데이터를 추출하는 Entity를 등록하고 학습용 발화메시지에 맵핑하는법, 사용자 발화메시지 기반  MACHINE LEARNING(기계학습)  트레이닝 후 학습된 내용을 OPEN API 서비스로 제공하여 챗봇과 연동하는 전반적인 절차에 대해 알아보겠습니다.

발표 관련 학습 링크 URL
https://timetodev.co.kr/blog/123   - 개발환경구축하기
https://timetodev.co.kr/blog/124   - Azure Bot Service로 배포하고 서비스하기
https://timetodev.co.kr/blog/125   - LUIS 활용하기


Language Understanding Intelligent Service "LUIS" 를 활용하여 자연어처리 하는 과정은 아래와 같습니다.

STEP1. 자연어 처리 모델(LUIS App) 만들기 
STEP2. Intent(의도) 등록-학습묭 발화메시지 등록
STEP3. Entity 등록 및 발화메시지 맵핑
STEP4. 모델 훈련시키기: ML Train
STEP5. 테스트하기: 사용자 메시지를 이용한 테스트하기
STEP6. 배포하기 : Publish as Open API
STEP7. 활용하기 : LUIS 자연어처리 서비스 호출하기



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 키를 눌러 화면을 재로드합니다.
LUIS 대표 홈페이지: https://www.luis.ai


 


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


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


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

10. 테스트용  LUIS 앱을 생성합니다.
-Name : 영어로 LUIS 앱명을 입력합니다.
-Culuter : 사용 언어를 선택합니다. (Korean)
-Description: APP 설명내용을 입력합니다.
* LUIS APP단위로 해당 비지니스의 머신러닝 자연어처리 모델이 만들어지고 관리되어집니다.


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

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


12) 등록 Intent에 해당 인텐트를 연상시킬수 있는 최소5개이상 사용자 예시(발화) 메시지를 하나씩 입력 후 엔터키를 칩니다.  
-사용자 메시지에서 예약 인텐트를 연상시킬수 있는  테스트용 메시지로
행사챗봇의 경우
주최는 누가 하나요?
무료행사인가요?
언제하나요?
주차지원은 되나요?

진료예약의 경우
주말에도 진찰이 가능하나요?
평일 진료 종료시간은 언제 인가요?
병원 오픈시간은 언제예요?
외래진료 예약하고 싶어요.
02월 15일 예약확인 하고 싶습니다.





13) 사용자 메시지로부터 데이터를 분석하여 사용자 의도파악을 좀더 자세히 도와주는 엔티티 활용하는방법을 알아보겠습니다.
-좌측메뉴의 엔티티메뉴를 클릭합니다.
-사용자 입력메시지인 발화메시지내에 존재하는 주요 엔티티와 역할을 등록합니다.
-Place란 엔티티를 등록하고 해당 엔티티의 Roles로 교통편,약도,주차장등 연관 롤 키워드를 입력합니다. 





14) Intent의 발화메시지에 엔티티 맵핑하기
- 등록된 특정 Intent 내 등록된 학습용 발화메시지에  특정 키워드를 선택(클릭으로 키워드 블록지정)하고 방금 등록한 Entity의 Role을 지정합니다. 





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




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



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


17) 또다른 Intent를 신규로 등록해보고 위와같은 과정으로 테스트까지 진행해봅니다.
-위치 Intent의 목적은 사용자가 미용실의 위치나 찾아오는길을 물어보는경우 위치와 약도를 보여주기 위한 사용자의 의도를 파악할수 목적으로 사용됩니다.
-서브 타입 키워드로는 주소,지하철,주차,자동차,약도등을 입력합니다.
 

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


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

19) 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” 의 값에 사용자 메시지가 전달됩니다.
 


20) 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 정보를 확인하거나 관리합니다.



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

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


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


Image

댓글목록

Image