스티밋 보팅 챗봇 만들기 - (2) Dialogflow로 학습하기

in #kr6 years ago

요즘 개발 및 학습, 해커톤 참여 준비를 병행하다보니, 재미있으면서도 은근 바쁘네요. 다양한 주제의 포스트를 기획한 것이 많지만, 아무래도 개발자이다 보니, 코드를 작성하는 것이 먼저이지 않겠나요? ㅎㅎ
이번 챗봇 서비스 포스트가 끝나면, EOS, LOOM 등 디앱 개발 관련 및 앞으로 참여하는 해커톤의 상세 내용을 포스트 해보겠습니다. 기대해주세요~!

이번 포스트는 의도 및 성분 분석 서비스인 구글의 Dialogflow를 활용하여, 명령을 학습시키는 과정을 설명해보겠습니다. 쉬운 설명을 위해, 예제를 되도록 간단히 만들었다는 것 참고해주세요.

들어가기에 앞서, 우리가 만들 봇에 대해 기능을 간추려볼게요.

  • 최신/핫한 순으로 트렌드 포스트 확인하기
  • 태그 검색으로 해당 태그의 최신글 자동 보팅

두 개의 인텐트를 만들어 보려고 합니다. 하나는 열람 용도로 사용하는 ‘view_intent’이고, 다른 하나는 보팅 용도로 사용하는 ‘vote_intent’ 입니다.

‘view_intent’의 경우, 두가지 엔티티가 필요할 것입니다. ‘최신순/핫한순' 등의 옵션을 나타내는 엔티티와 포스트를 가리키는 엔티티 입니다.

‘vote_intent’의 경우, 태그 검색에 대한 액션을 지칭하는 엔티티와 그 태그에 대한 엔티티가 필요하겠지요.

그럼, Dialogflow 사이트 (https://dialogflow.com/)로 들어가봅시다. 상단의 ‘GO TO CONSOLE’을 누르고 인증이 끝나면, 여러가지 메뉴로 구성된 화면이 나타납니다.

스크린샷 2018-07-03 오후 2.31.22.png

이는 Dialogflow 콘솔이고, 여기서 새로운 에이전트를 생성합니다. agent name으로 저는 ‘steemit-bot’이라 명칭을 붙여볼게요. Default Language로 ‘Korea - ko’를 선택합니다.
그러면, 기존에 만들었던 파이어베이스 프로젝트나, 새로운 프로젝트를 생성하여 연결합니다.

스크린샷 2018-07-03 오후 2.33.05.png

이제 인텐트를 생성해봅시다. 왼쪽 메뉴의 Intents 탭에 들어가 ‘Create Intent’ 버튼을 클릭합니다.

스크린샷 2018-07-03 오후 1.48.53.png

명칭을 ‘view_intent’라고 이름 붙이고, 아래 ‘Training phrases’에 몇가지 패턴을 입력해봅니다.

“핫한 포스트”
“생성순 포스트"
“포스트보기 최신순"
“포스트 핫한순"

유저가 명령할만한 문장을 쓰는 것이 핵심입니다. 여기서는 간단하게 이 정도의 문장을 구성해봅니다.

그러면, 이 문장을 중심으로 엔티티를 정의해보겠습니다.

공통적으로 ‘포스트', ‘포스트보기'와 같은 포스트에 대한 엔티티가 필요하며, 그 포스트에 대한 타입인 ‘핫한/핫한순/최신순/생성순'에 대한 엔티티가 필요합니다.

전자에 대한 엔티티를 ‘view_post’라 지칭하겠습니다.
왼쪽 메뉴의 Entities를 클릭하고, Create Entity로 새로운 엔티티를 생성합니다.

‘view_post’라 명칭하고, 다음과 같이 ‘포스트'에 대한 동의어를 작성하겠습니다. 물론, 다양한 동의어를 작성할 수록 인식률이 높아지겠지요.

스크린샷 2018-07-03 오후 1.49.13.png

Save를 눌러 저장하고, 다음 엔티티를 생성하겠습니다.

‘discuss_option’이라고 명칭하고, 다음과 같이 ‘최신'과 ‘핫한'에 대한 동의어를 작성하겠습니다. 즉, 해당 동의어가 인식된다면, 앞의 핵심 태그를 가지고 이것이 ‘최신'인지 ‘핫한'인지 판별할 수 있겠지요. 이는 서버에서 분기할 때 다시 살펴보겠습니다.

스크린샷 2018-07-03 오후 1.50.28.png

Save를 눌러 저장하고, 다시 앞서 만든 인텐트인 ‘view_intent’로 돌아가보겠습니다.

앞서 만든 Traning phrases의 문장에 해당 엔티티를 클릭-스크롤하면, 해당 엔티티를 매핑할 수 있는 작은 팝업이 나옵니다. 이는 새로운 문장을 입력해도 자동으로 인식하여 엔티티가 매핑되기도 합니다. 이렇게 매핑되는 엔티티는 아래 Action and parameters에서 확인할 수 있지요,

그러면 다음과 같이 보일거에요.

스크린샷 2018-07-03 오후 1.51.41.png

웹훅을 적용하기 위해서 가장 하단으로 가면, Fulfillment 란이 보이는데, ‘Enable webhook call for this intent’를 활성화시킵니다. 그리고 다시, Save를 누릅니다.

스크린샷 2018-07-03 오후 2.19.33.png

그 다음, ‘vote_intent’도 마찬가지로 작업합니다. 여기서 먼저 ‘태그' 및 ‘태그찾기'에 해당하는 엔티티를 정의해볼게요.

엔티티 생성란으로 가서, ‘tag_option’이라고 명칭을 하고, 다음과 같이 동의어를 나열한 후, Save를 누릅니다.

스크린샷 2018-07-03 오후 2.19.58.png

그 다음, ‘vote_intent’를 생성하고, Training phrases에 다음과 같이 문장을 입력해봅니다.

“kr 태그 검색”
“태그 dev-kr”

일단, 간단하게 두 개정도만 입력해보겠습니다.
여기서, 추출할 수 있는 엔티티는 ‘태그 검색', ‘태그'가 되겠네요. 이는 자동으로 매핑되며, 앞서 만든 @tag_option 엔티티에 대응되죠.

그럼, ‘kr’, ‘dev-kr’과 같은 스티밋의 태그는 어떤 엔티티로 매핑해야할까요? 일단, 이에 대한 태그가 워낙 광범위하기에 이는 그냥 내비두고, 해당 문장에 @tag_option을 제외한 태그 단어를 추출하는 것으로 하지요.

스크린샷 2018-07-03 오후 2.20.54.png

이것도 마찬가지로 하단의 Fulfillment 란의 ‘Enable webhook call for this intent’를 활성화시킵니다.
완료되면, Save를 눌러서 저장합니다.

이제 Dialogflow의 학습 프로세스가 시작되고 곧 완료가 될텐데요. 이는 오른쪽 메뉴의 ‘Try it now’에서 테스트해볼 수 있지요.

‘핫한 포스트 찾기'와 같이 입력 후, 엔터를 치면 다음과 같은 결과가 나옵니다.

스크린샷 2018-07-03 오후 2.21.20.png

이 문장을 분석하여, 이는 ‘view_intent’의 의도가 담겨져있고, 그에 대한 파라미터로 엔티티 view_post는 ‘포스트', discuss_option은 ‘핫한'이 인식된 것을 확인할 수 있습니다. 아직, Response 영역은 구현을 안했기에 결과값이 없지요. 아래, DIAGNOSTIC INFO 를 누르면, JSON 형태로 보다 자세한 분석 정보를 확인할 수 있습니다.

한가지 더 해볼까요? ‘태그 willpark’이라고 입력하면, 다음과 같은 결과가 나옵니다.

스크린샷 2018-07-03 오후 2.22.16.png

‘view_intent’가 인식되었고, 태그가 @tag_option으로 인식되었습니다. 즉, 이 인텐트 안의 해당 태그 엔티티가 있는 것을 확인하면, 태그를 추출해서 이 태그의 최근글을 보팅하는 액션을 취할 수 있게 됩니다.

이렇게 인식된 엔티티에 따라 서버에서 해당하는 액션을 수행하는 코드를 구현하면 되고, 이는 다음 시간부터 다룰 내용입니다.

  1. 스티밋 보팅 챗봇 만들기 - 개요
  2. 스티밋 보팅 챗봇 만들기 - DialogFlow 로 학습하기
  3. 스티밋 보팅 챗봇 만들기 - 서버에서 Steem API 구성하기
  4. 스티밋 보팅 챗봇 만들기 - 서버에서 DialogFlow 연동하기
  5. 스티밋 보팅 챗봇 만들기 - 슬랙으로 통합하기

드디어 서점에서도 ‘누구나 쉽게 배우는 챗봇 서비스'가 출간이 되었다는 소식이 들어왔습니다. 한번 동네 서점에 들려서 확인해봐야 겠네요~ㅎㅎ

http://bit.ly/2tQKV9J

관심있는 분들은 여기서 자세한 내용을 확인할 수 있습니다~.

Sort:  

와! 이거 만드시면 제 로봇에 넣고 싶어요! ㅋㅋㅋㅋ
저도 dailogflow를 시간날때 좀 봐보고싶네요.
책은 얼마인가요?

네 한번 살펴보면 좋을것 같아요 ㅎㅎ 책은 할인 받아서 21600원 정도 되네요~ https://book.naver.com/bookdb/book_detail.nhn?bid=13733578