Google Dialogflow로 챗봇 만들기 — basic (3) Entity 정의, 2020.08.30.
이번엔, Dialogflow의 에이전트가 사용자의 발화에서 특정 값을 포착해내도록 entity를 정의하는 실습을 하겠습니다.
Entity 정의
먼저 Dialogflow 콘솔에서 좌측 메뉴란에 Entities를 클릭하여 Entities 탭으로 이동합니다.
아직 정의된 entity가 없으므로 No entities yet. 이라는 문구가 보입니다. 여기서, 지역을 나타내는 location라는 entity를 만들겠습니다. Create the first one. 문구를 클릭하여 entity를 본격적으로 정의하겠습니다.
Entity는 Google Dialogflow로 챗봇 만들기 — basic (2) Intent 정의 글에서 말씀드린 바와 같이, value값을 가지고 있습니다. 우리가 지금 정의하고 있는 location이라는 entity에는 value값으로 “서울”, “대전”, “대구”, “부산” 등 우리나라의 지역 이름을 가지도록 할 것입니다. Entity는 보통 하나의 value 값에 여러 개의 동의어를 넣어 value 값을 통일해주는 역할을 합니다. 예를 들어, “서울”, “서울시”, “서울특별시”는 모두 “서울”의 값과 동일한 동의어라고 사전에 정의할 수 있습니다. 그렇게 되면 value 값이 “서울”, “서울시”, “서울특별시”라고 분리되지 않고 “서울”로 통일될 수 있습니다. 우리도 마찬가지로 우리나라 주요도시를 기준으로 몇 가지 샘플을 입력해보겠습니다.
위와 같이 location이라는 entity에 parameter들을 정의했습니다. 위 체크 박스의 기본 옵션으로 Define synonyms는 좀 전에 말씀드린 것처럼 동의어를 미리 정의해주는 옵션입니다. 나머지 옵션에 대해서는 따로 사용법을 익히지 않고 간략히 설명만 하겠습니다.
- Regexp entity : 정규표현식을 이용하여 정의하는 방법입니다. 사용방법은 이곳을 참고하시면 됩니다.
- Allow automated expansion : 자동적인 확장입니다. 반복되는 내용에 대해 계속 정의하지 않고 자동적으로 처리해줍니다. 예를 들어, 1, 2, 3, 4와 같은 시퀀스를 가지는 entity에 대해서 유용하게 사용할 수 있습니다.
- Fuzzy matching : 사전에 정의했던 value와 스펠링이 정확히 일치하지 않아도 매칭시켜주는 옵션입니다.
작성이 완료되면 우측 상단 SAVE 버튼을 눌러 마무리합니다.
Intent에 적용
이제, 정의한 location entity를 intent에 적용하는 방법을 설명하겠습니다. 직 전 글에서 설명한 것과 같이, intent를 작성하겠습니다.
Intent 탭으로 이동해서 CREATE INTENT 버튼을 클릭해, 작성합니다. intent 이름은 location-weather라고 하겠습니다.
Training phrases 섹션에 학습 문구를 입력합니다. Dialogflow 공식 문서에서는 10~20개의 학습 문구를 권장하지만, 지금은 5개만 입력하겠습니다. “서울 날씨 알려줘”라고 입력하면 Dialogflow 에이전트가 자동으로 “서울”이라는 entity를 포착해 냅니다. 아래 Action and parameters 섹션에 자동으로 entity가 생성되었음을 알 수 있습니다. 만약, 해당 entity를 자동으로 포착하지 않는다면 “서울”이라는 부분을 마우스 드래그를 해서 entity를 선택할 수도 있습니다.
Responses 섹션으로 가서 location-weather에 대한 답변으로 “맑고, 어제보다 2도 높아요”라는 답변을 입력합니다. 답변까지 입력되었으면 우측 상단 SAVE 버튼을 눌러 에이전트가 intent를 학습하도록 합니다.
우측에 있는 테스트 공간에서 “대전 날씨를 묻고 싶어요”라고 입력합니다. 에이전트는 방금 작업했던 location-weather라는 intent를 잘 포착했습니다. 또한 PARAMETER 란에 location 이라는 entity 명이 표시되었고, VALUE로는 “대전”이 출력된 것을 확인할 수 있습니다.
마찬 가지로 “부산 날씨를 알려주세요”라고 입력해도 같은 결과가 나옵니다. intent를 작성할 때, training phrases로 “서울”이라는 value만 입력했는데도, 에이전트는 “서울”이 location이라는 entity이고 “대전”이나 “부산”과 같은 다른 value에서도 location entity를 포착할 수 있도록 작동됩니다.
Entity는 이처럼 여러 값들을 가지는 개념을 한 데로 모아 intent 작성에 편리함을 주기도 하지만, 사전 정의된 parameter에 대해서 value를 포착해 답변에 영향을 줄 수도 있습니다. 위 intent를 발전시킨다면, location entity의 value에 따라 “서울 날씨”나 “대전 날씨”의 실시간 날씨를 간략하게 리턴할 수도 있습니다. 또한, “오늘”, “내일” 과 같은 entity를 추가해서 확장할 수도 있습니다. 이 부분은 advanced 부분에서 다루고자 합니다.
정민수, omicro03@gmail.com