요즘 개발 및 학습, 해커톤 참여 준비를 병행하다보니, 재미있으면서도 은근 바쁘네요. 다양한 주제의 포스트를 기획한 것이 많지만, 아무래도 개발자이다 보니, 코드를 작성하는 것이 먼저이지 않겠나요? ㅎㅎ
이번 챗봇 서비스 포스트가 끝나면, EOS, LOOM 등 디앱 개발 관련 및 앞으로 참여하는 해커톤의 상세 내용을 포스트 해보겠습니다. 기대해주세요~!
이번 포스트는 의도 및 성분 분석 서비스인 구글의 Dialogflow를 활용하여, 명령을 학습시키는 과정을 설명해보겠습니다. 쉬운 설명을 위해, 예제를 되도록 간단히 만들었다는 것 참고해주세요.
들어가기에 앞서, 우리가 만들 봇에 대해 기능을 간추려볼게요.
두 개의 인텐트를 만들어 보려고 합니다. 하나는 열람 용도로 사용하는 ‘view_intent’이고, 다른 하나는 보팅 용도로 사용하는 ‘vote_intent’ 입니다.
‘view_intent’의 경우, 두가지 엔티티가 필요할 것입니다. ‘최신순/핫한순' 등의 옵션을 나타내는 엔티티와 포스트를 가리키는 엔티티 입니다.
‘vote_intent’의 경우, 태그 검색에 대한 액션을 지칭하는 엔티티와 그 태그에 대한 엔티티가 필요하겠지요.
그럼, Dialogflow 사이트 (https://dialogflow.com/)로 들어가봅시다. 상단의 ‘GO TO CONSOLE’을 누르고 인증이 끝나면, 여러가지 메뉴로 구성된 화면이 나타납니다.
이는 Dialogflow 콘솔이고, 여기서 새로운 에이전트를 생성합니다. agent name으로 저는 ‘steemit-bot’이라 명칭을 붙여볼게요. Default Language로 ‘Korea - ko’를 선택합니다.
그러면, 기존에 만들었던 파이어베이스 프로젝트나, 새로운 프로젝트를 생성하여 연결합니다.
이제 인텐트를 생성해봅시다. 왼쪽 메뉴의 Intents 탭에 들어가 ‘Create Intent’ 버튼을 클릭합니다.
명칭을 ‘view_intent’라고 이름 붙이고, 아래 ‘Training phrases’에 몇가지 패턴을 입력해봅니다.
“핫한 포스트”
“생성순 포스트"
“포스트보기 최신순"
“포스트 핫한순"
유저가 명령할만한 문장을 쓰는 것이 핵심입니다. 여기서는 간단하게 이 정도의 문장을 구성해봅니다.
그러면, 이 문장을 중심으로 엔티티를 정의해보겠습니다.
공통적으로 ‘포스트', ‘포스트보기'와 같은 포스트에 대한 엔티티가 필요하며, 그 포스트에 대한 타입인 ‘핫한/핫한순/최신순/생성순'에 대한 엔티티가 필요합니다.
전자에 대한 엔티티를 ‘view_post’라 지칭하겠습니다.
왼쪽 메뉴의 Entities를 클릭하고, Create Entity로 새로운 엔티티를 생성합니다.
‘view_post’라 명칭하고, 다음과 같이 ‘포스트'에 대한 동의어를 작성하겠습니다. 물론, 다양한 동의어를 작성할 수록 인식률이 높아지겠지요.
Save를 눌러 저장하고, 다음 엔티티를 생성하겠습니다.
‘discuss_option’이라고 명칭하고, 다음과 같이 ‘최신'과 ‘핫한'에 대한 동의어를 작성하겠습니다. 즉, 해당 동의어가 인식된다면, 앞의 핵심 태그를 가지고 이것이 ‘최신'인지 ‘핫한'인지 판별할 수 있겠지요. 이는 서버에서 분기할 때 다시 살펴보겠습니다.
Save를 눌러 저장하고, 다시 앞서 만든 인텐트인 ‘view_intent’로 돌아가보겠습니다.
앞서 만든 Traning phrases의 문장에 해당 엔티티를 클릭-스크롤하면, 해당 엔티티를 매핑할 수 있는 작은 팝업이 나옵니다. 이는 새로운 문장을 입력해도 자동으로 인식하여 엔티티가 매핑되기도 합니다. 이렇게 매핑되는 엔티티는 아래 Action and parameters에서 확인할 수 있지요,
그러면 다음과 같이 보일거에요.
웹훅을 적용하기 위해서 가장 하단으로 가면, Fulfillment 란이 보이는데, ‘Enable webhook call for this intent’를 활성화시킵니다. 그리고 다시, Save를 누릅니다.
그 다음, ‘vote_intent’도 마찬가지로 작업합니다. 여기서 먼저 ‘태그' 및 ‘태그찾기'에 해당하는 엔티티를 정의해볼게요.
엔티티 생성란으로 가서, ‘tag_option’이라고 명칭을 하고, 다음과 같이 동의어를 나열한 후, Save를 누릅니다.
그 다음, ‘vote_intent’를 생성하고, Training phrases에 다음과 같이 문장을 입력해봅니다.
“kr 태그 검색”
“태그 dev-kr”
일단, 간단하게 두 개정도만 입력해보겠습니다.
여기서, 추출할 수 있는 엔티티는 ‘태그 검색', ‘태그'가 되겠네요. 이는 자동으로 매핑되며, 앞서 만든 @tag_option 엔티티에 대응되죠.
그럼, ‘kr’, ‘dev-kr’과 같은 스티밋의 태그는 어떤 엔티티로 매핑해야할까요? 일단, 이에 대한 태그가 워낙 광범위하기에 이는 그냥 내비두고, 해당 문장에 @tag_option을 제외한 태그 단어를 추출하는 것으로 하지요.
이것도 마찬가지로 하단의 Fulfillment 란의 ‘Enable webhook call for this intent’를 활성화시킵니다.
완료되면, Save를 눌러서 저장합니다.
이제 Dialogflow의 학습 프로세스가 시작되고 곧 완료가 될텐데요. 이는 오른쪽 메뉴의 ‘Try it now’에서 테스트해볼 수 있지요.
‘핫한 포스트 찾기'와 같이 입력 후, 엔터를 치면 다음과 같은 결과가 나옵니다.
이 문장을 분석하여, 이는 ‘view_intent’의 의도가 담겨져있고, 그에 대한 파라미터로 엔티티 view_post는 ‘포스트', discuss_option은 ‘핫한'이 인식된 것을 확인할 수 있습니다. 아직, Response 영역은 구현을 안했기에 결과값이 없지요. 아래, DIAGNOSTIC INFO 를 누르면, JSON 형태로 보다 자세한 분석 정보를 확인할 수 있습니다.
한가지 더 해볼까요? ‘태그 willpark’이라고 입력하면, 다음과 같은 결과가 나옵니다.
‘view_intent’가 인식되었고, 태그가 @tag_option으로 인식되었습니다. 즉, 이 인텐트 안의 해당 태그 엔티티가 있는 것을 확인하면, 태그를 추출해서 이 태그의 최근글을 보팅하는 액션을 취할 수 있게 됩니다.
이렇게 인식된 엔티티에 따라 서버에서 해당하는 액션을 수행하는 코드를 구현하면 되고, 이는 다음 시간부터 다룰 내용입니다.
드디어 서점에서도 ‘누구나 쉽게 배우는 챗봇 서비스'가 출간이 되었다는 소식이 들어왔습니다. 한번 동네 서점에 들려서 확인해봐야 겠네요~ㅎㅎ
관심있는 분들은 여기서 자세한 내용을 확인할 수 있습니다~.