기가지니 AI Kits 중 Dialog Kit에 대하여 알아봅시다.
2.4.1 소개
Dialog Kit은 기가지니 대화 플랫폼이라 하여, 대화 모델 관리(DMT: Dialog Modeling Tool)를 통해 사용자 발화문의 의도와 기능을 정의합니다. 3rd Party가 서비스를 개발하기 위해서는 Invoke, 어휘 사전, 인텐트의 개념만 잘 알고 있으면 됩니다.
- invoke : 3rd Party 서비스의 호출명 (예: 콕콕114, 소리동화, 대교동화, 롯데리아 등)
- 어휘 사전 : 인텐트를 구성하는 요소로, 명사형 어휘 사전(NE)과 동사형 어휘 사전(PR)으로 구분
- 인텐트 : 기가지니가 이해하고 알아들어야 하는 발화문들을 하나로 정의하는 표현어 또는 실행어
Dialog Kit 구성 요소
Dialog Kit을 사용할 때 알아야 하는 용어들에 대하여 간략히 소개하겠습니다. 자세한 내용은 Dialog Kit Guide에 작성되어 있으니 참고해주시면 됩니다. (Dialog KIt Guide 바로가기)
Dialog Kit은 기가지니 대화 서비스를 처리하는 메인 서버인 DSS(Dialog Service Server)와 대화를 해석해주는 DMS(Dialog Management Server), 그리고 3rd Party 서비스를 위한 CDSS(Custom Dialog Service Server)와 CDMS(Custom Dialog Management Server)로 구성됩니다. (여기서 대화 서버라는 것은 기가지니가 사용자의 발화문을 인식하고 이해하여 처리해주는 서버를 말합니다.)
아래 서비스 로직 처리를 보시면 각 대화 서버들의 역할에 대해 이해할 수 있습니다. 기가지니에 사용자 발화가 들어오면 DMS에서 3rd Party의 발화문인지 확인합니다. 해석이 가능한 3rd Party 발화문이라면 CDMS가 해석하여 DSS로 결과를 전달해줍니다.
여기서 만약 3rd Party에서 처리하지 않은 발화문일 경우에는 기가지니 메인 서버에서 해석하여 처리합니다.
2.4.2 Dialog Kit 작업
Dialog Kit은 Console > My Service 에서 진입할 수 있습니다. 기가지니가 사용자의 발화문 의도를 파악하기 위해서는 Dialog Kit을 구성해야 하며, Dialog Kit 구성 요소에는 어휘 사전과 인텐트가 있습니다.
인텐트란 사용자 발화의 의도를 기가지니에게 전달하기 위한 표현어입니다. 예를 들어 사용자가 서비스를 실행시키기 위해서 “ㅇㅇ서비스 실행해줘”, “ㅇㅇ서비스 시작”과 같은 발화를 한다고 하면 해당 발화들을 포함하도록 RunApp이라는 인텐트를 생성합니다. 쉽게 말해, RunApp 인텐트는 ‘서비스 시작’에 대한 의도를 담고 있는 발화를 했을 때 실행되는 함수라고 생각해주시면 됩니다.
어휘 사전은 인텐트를 구성하기 위해 사용되는 요소로 명사형 어휘 사전과 동사형 어휘 사전으로 구분되어 있습니다. 일반적으로 기가지니를 호출하고 기능 및 명령을 실행하는 발화문은 명사형의 체언과 동사형의 용언으로 구성됩니다. 예를 들어, “메뉴 알려줘”, “ㅇㅇ서비스 실행해줘”와 같습니다.
- 어휘 사전 : 명사형과 동사형 어휘 사전으로 구분되며, 인텐트에 속한 발화문을 구성하기 위한 요소
- 인텐트 : 기가지니에게 어떠한 의도를 전달할 것인지에 대한 표현어 또는 실행어
이렇게 Dialog kit에서는 어휘 사전과 인텐트를 이용하여 해당 서비스에 대한 대화 모델을 설계할 수 있는 환경을 제공합니다. 이제 각 요소에 대한 구체적인 내용과 작업 방법을 설명하겠습니다.
1) 어휘 사전과 인텐트
기가지니에 발화문을 학습 시키기 위해서는 인텐트를 구성해야 하고, 그 인텐트는 어휘 사전의 조합으로 만들어집니다. 어휘 사전에는 명사형 어휘 사전인 NE 사전과 동사형 어휘 사전인 PR 사전이 있습니다.
Dialog Kit은 NLU를 통해 각 문장 안에서의 주요 명사형 어휘와 동사형 어휘를 파악합니다. 따라서 전치사를 포함하지 않고 명사형 어휘 사전과 동사형 어휘 사전으로 구성하도록 합니다.
발화문의 모양에 따라 인텐트의 어휘 사전 규칙을 적용합니다. 인텐트 규칙에는 NE사전과 PR사전을 조합할 수 있고, NE 사전이나 PR 사전만 단독으로도 적용할 수도 있습니다. (규칙 가능 조합: NE, PR, NE+PR, NE+NE, NE+NE+PR)
예를 들어 메뉴를 선택하는 인텐트인 OrderPizza를 생성한다고 가정한다면, 아래와 같은 발화문이 들어올 수 있습니다.
- 불고기피자 주문해줘
- 불고기피자 선택해
- 불고기피자
물론 더 다양한 발화들이 들어오겠지만, 대표적으로 위와 같은 패턴의 발화문이 들어온다고 했을 때 인텐트 규칙에는 피자 메뉴(‘불고기피자’, ‘포테이토피자’)들이 들어가 있는 NE-PIZZA 사전과 주문 관련 명령(‘주문해줘’, ‘선택해’ 등)이 들어가 있는 PR-ORDER 사전이 필요하게 됩니다.
인텐트 규칙은 여러 어휘 사전의 조합이 가능하며, 위 예시 문장 처리를 위해서 OrderMenu 인텐트를 생성하고 두 개의 규칙을 적용합니다.
- NE-PIZZA (발화 예: 지니야, 불고기 피자)
- NE-PIZZA + PR-ORDER (발화 예: 지니야, 불고기 피자 주문해줘)
이렇게 적용된 인텐트는 그 목적에 따라 Service SDK 정보 입력에서 작성한 url을 기준으로 페이지을 띄우기도 하고, 페이지 이동 없이 코드 내에서 처리되기도 합니다. 이는 이후 「2.5 인텐트/어휘 정보 가져오기」에서 자세히 다루도록 하겠습니다.
기본 어휘 사전
Dialog Kit에서는 일반적으로 많이 사용되는 NE, PR 사전을 기본 어휘 사전으로 제공하고 있습니다. 숫자와 시간, 사람, 지역과 같은 명사형 NE 사전과 실행, 종료에 대한 명령어가 있는 PR 사전 등이 있습니다.
기본 어휘 사전은 NE-B-~, PR-B-~와 같은 명칭으로 되어 있으며, 인텐트 조합은 다양한 어휘 사전 조합이 가능하기 때문에 기본 어휘 사전을 포함한 인텐트 규칙과 자신이 직접 만든 어휘 사전 조합 둘 다 적용 할 수 있습니다. 만약 제공하는 기본 어휘 사전에 의도와 다른 불필요한 어휘들이 들어있다면, 필요한 내용만 참고하여 직접 PR 사전을 만들어서 제공하시길 권유 드립니다. (기본 어휘 사전은 제공용으로 개발자가 추가/수정/삭제가 불가합니다.)
기본 어휘 사전에 대한 내용은 Dialog Kit > 대화모델 관리(DM) > 기본 어휘 사전에서 확인 가능합니다.
2) 어휘 사전 생성
어휘 사전은 대표단어와 유사단어로 구성되어 있습니다. 유사단어 중에서 대표되는 단어를 대표단어로 지정하는데, 대표단어와 유사단어와의 관계는 주로 세 가지의 경우로 쓰입니다. 이 경우들은 주로 사용되는 관계를 나열한 것이며, 개발의 목적과 방향에 맞게 다른 구성으로도 사용할 수 있습니다.
첫 번째로는 대표단어에 대한 동의어나 유의어를 유사단어로 작성합니다. 동의어는 「형태는 다르지만 서로 뜻이 같은 어휘」를 의미하며, 유의어는 「하나의 뜻을 가리키지는 않지만 비슷한 의미를 담고 있는 어휘」를 의미합니다. 만약 대표어휘가 ‘강아지’라면, 유사어휘로 ‘멍멍이’, ‘애완견’ 등을 추가하시면 됩니다. 만약 띄어쓰기 문제라면 띄어쓰기를 포함한 어휘도 추가해줍니다. (예: ‘고구마피자’가 ‘고구파 피자’로 인식되는 경우)
두 번째로는 각 어휘에 대한 오인식 어휘를 유사단어에 작성합니다. 기가지니는 사용자가 많이 발화하는 어휘들로 학습되어 있기 때문에 새로운 어휘나 사용성이 적은 어휘의 경우 오인식 될 확률이 높습니다. 예로, ‘호랑이’라는 어휘가 ‘노랑이’라고 인식이 된다면 ‘노랑이’를 유사단어로 추가하여 오인식되어도 서비스가 정상적으로 돌아갈 수 있도록 처리하시면 됩니다.
마지막으로 대표단어와 유사단어는 포함 관계일 때도 쓰입니다. 예를 들면 대표단어를 ‘동물’로 작성하고, 동물에 속하는 ‘호랑이’, ‘표범’, ‘사자’ 등과 같은 어휘들을 유사단어로 작성합니다.
어휘 사전 등록은 [Dialog Kit > 대화모델 관리(DMT) > 어휘 사전 관리]에서 진행합니다. 어휘 사전 등록에는 직접 생성과 파일 업로드 방법 두 가지가 있습니다. 개발하는 서비스의 발화문 양이 많을 경우에는 관리를 위하여 엑셀 업로드 방법을 이용하여 버전 별로 관리해두는 것이 좋습니다.
어휘 사전과 인텐트 생성에 대한 순서는 정해져 있지 않지만, 해당 가이드는 어휘 사전 생성 후에 인텐트를 적용하도록 진행하도록 하겠습니다.
어휘 사전 개별 등록
어휘 사전 관리 페이지에서 [어휘 사전 등록] 버튼 누르면, 어휘 사전을 새로 생성할 수 있습니다. 어휘 사전의 특징에 맞게 NE 또는 PR로 종류를 선택하며, 어휘 사전명은 영어와 숫자로만 입력을 진행합니다. 어휘 사전명에 대한 제약은 없지만, 해당 어휘 사전의 특징을 나타내는 명칭이 좋습니다. (도서에 대한 사전인 경우 NE-BOOK, 전화번호에 대한 사전인 경우 NE-PHONENUM 등)
서비스 신청에서 ‘스무고개’ 서비스를 생성하여 예시를 들었으니 대화모델도 ‘스무고개’에 맞게 작성해보도록 하겠습니다.
사용자가 스무고개를 할 카테고리를 선택한다고 가정합니다. 카테고리에는 {동물, 나라, 음식}이 있고, 사용자가 발화를 통해 카테고리를 선택합니다. (예: “지니야, 동물 선택해줘”, “지니야, 동물”, “지니야, 동물 문제 내줘” 등)
어휘 사전: NE-CATEGORY
대표단어 : 동물, 나라, 음식
대표 단어 추가란에 ‘동물’, ‘나라’, ‘음식’을 입력하고, 각 대표 단어에 대한 유사 어휘도 추가합니다. 만약 서비스 화명 구성 시 ‘카테고리 선택에 대한 보기’를 텍스트 형식이 아닌 이미지로 나타낼 경우, 사용자가 발화할 모든 경우의 수를 파악하여 유사 단어에 추가 해야 합니다. (예: ‘음식’ 사진 -> ‘음식’ or ‘먹을거’ or ‘먹는거’ 등)
어휘 사전 일괄 등록
어휘 사전 일괄 등록은 Dialog Kit에서 제공해주는 샘플 파일을 기준으로 작성합니다. 샘플파일은 어휘 사전 목록 아래 [샘플다운로드(xls)]를 누르면 받을 수 있습니다.
양식은 아래와 같습니다. Prefix는 어휘 사전의 종류이며, 개별 등록과 동일하게 대표단어와 유사단어를 작성해줍니다. 작성이 완료되면 [일괄등록] 버튼을 눌러 파일을 업로드 합니다.
작성된 파일에 대하여 실패 없이 완료된 경우는 [적용] 버튼을 눌러 어휘 사전을 생성하고, 실패한 경우는 로그에 출력된 이유를 참고해서 재작성합니다.
3) 인텐트 생성
이제 인텐트를 생성하고, 어휘 사전으로 인텐트 규칙을 적용해보겠습니다. 인텐트는 하나의 목적을 가지고 있고, 그 목적에 맞는 다양한 발화문을 처리하도록 구성합니다. 대부분의 문장은 체언과 용언의 구성으로 되어 있습니다. 여기서 체언은 문장에서 주어, 목적어의 기능을 하며, 용언은 서술어의 기능을 합니다. 따라서 어휘 사전에서 생성한 NE 사전은 체언으로, PR 사전은 용언으로 사용된다고 생각해주시면 됩니다. 인텐트 규칙은 어휘 사전의 조합이라고 했습니다. 인텐트 규칙으로 사용된 어휘 사전에 들어있는 모든 어휘들은 인텐트를 실행시키는 발화에 포함됩니다. 하나의 인텐트에는 여러가지의 인텐트 규칙이 포함될 수 있습니다.
- 인텐트 규칙 후보
- NE 사전
- PR 사전
- NE 사전 + PR 사전
- NE 사전 + NE 사전
- NE 사전 + NE 사전 + PR 사전
어휘 사전에서 생성했던 NE-CATEGORY 사전을 이용해서, 스무고개 게임 실행 시 카테고리를 선택하는 인텐트를 만들어 보도록 하겠습니다. 카테고리에는 {동물, 나라, 음식}이 있고, 사용자가 발화를 통해 카테고리를 선택합니다. (예: “지니야, 동물 선택해줘”, “지니야, 동물”, “지니야, 동물 문제 내줘” 등)
인텐트 개별 등록
인텐트 개별 등록도 어휘 사전 등록과 마찬가지로 [인텐트 등록] 버튼을 눌러 진행할 수 있습니다. 인텐트명은 영문으로 작성하며, 특수기호는 ‘_‘만 입력 가능합니다. 함수와 비슷하게 생각해주시면 되기 때문에 명명에는 해당 인텐트가 어떤 목적을 담고 있는지를 반영해주시면 됩니다.
selectCategory라는 카테고리 선택을 위한 인텐트를 생성하고, 대화입력에는 해당 인텐트를 실행시키는 대표 발화문을 입력합니다. (입력 예: 동물 선택해줘)
‘동물’이라는 카테고리명이 들어가 있는 어휘 사전이 존재할 경우, [분석 결과]에 아래와 같이 동물을 포함한 어휘 사전이 색상으로 나타납니다. 또한 ‘선택’에 관련된 어휘가 포함 되어 있는 기본 어휘 사전인 ‘PR-B-SELECT’가 함께 추출 되었습니다. (앞서 언급했듯이 Dialog Kit에서 기본적으로 제공하는 어휘 사전은 NE-B-~, PR-B-~의 형태로 나타납니다.)
만약, ‘동물’ 어휘를 포함하는 어휘 사전이 없다면 분석 결과에 아래와 같이 어휘가 회색 점선으로 표시되어 나타납니다. 이 경우 해당 어휘를 눌러 바로 어휘 사전을 생성하거나, 어휘 사전 관리 페이지로 넘어가서 어휘 사전을 생성하면 됩니다.
분석결과에 나타난 어휘 사전을 인텐트 규칙에 적용해보겠습니다. [인텐트 규칙]에 반영을 반드시 해줘야 해당 발화로의 인텐트 실행이 가능해집니다. 인텐트 규칙에 포함 시킬 어휘 사전을 클릭하여, 인텐트 규칙으로 지정해줍니다.
‘NE-CATEGORY’와 ‘PR-B-SELECT’를 인텐트 규칙으로 생성하면 아래와 같습니다. 해당 인텐트 규칙이 적용되면 “동물 선택해줘” 뿐만 아니라 “음식 선택해줘”, “나라 선택” 등의 발화문 모두 해당 인텐트를 실행할 수 있게 됩니다.
STATUS 입력이란?
인텐트 규칙에는 Status를 조건으로 넣을 수 있습니다. Status는 해당 대화구문 혹은 인텐트가 특정한 환경(예: OTV 재생중)으로, 인텐트 규칙 마다 Status 조건을 줄 수 있습니다.
※ 특정 Status 환경이 필요한 경우에만 선택합니다. 미선택 시 모든 환경에서 실행 가능
- Status 추가 시, 인텐트 규칙 후보
- NE + Status
- PR + Status
- NE + PR + Status
인텐트 일괄 등록
인텐트 일괄 등록 방법도 어휘 사전 일괄 등록과 동일하게 엑셀 파일을 업로드 하여 등록합니다. 인텐트 목록 창에서 샘플 파일을 다운받아 양식에 맞게 작성한 후 업로드 합니다.
자세한 작성 방법은 샘플 파일 내 ‘작성방법’ 시트를 참고합니다.
4) 인텐트 생성 결과 확인
「대화모델 시뮬레이터」는 개발자가 등록한 인텐트 규칙이 제대로 적용 됬는지 확인 할 수 있는 테스트 시뮬레이터 입니다. 자신의 기가지니 서비스에서 발화할 모든 내용을 입력하여 문제 없이 인텐트가 추출되는지 확인해봅니다.
인텐트 작업이 완료되면 인텐트 관리 하단에 대화모델 시뮬레이터로 이동합니다. 약 1분~5분 사이 일정 시간이 지나면 테스트를 해볼 수 있으며, ‘질의문구’란에 발화문를 입력하여 정상적으로 인텐트가 추출되는지 확인합니다
CDMS Response에서는 인텐트 결과 “Goal:인텐트명”와 함께 개발자가 코드 내에서 처리할 수 있도록 어휘 사전 정보를 Service SDK API - onActionEvent로 전달해줍니다. 이 내용은 「2.5 인텐트/어휘 정보 가져오기」에서 다루도록 하겠습니다.