실제 Intent를 생성하고 등록하는 방법은 User Utterance Model 정의하기 (Intent & Entity)를 참고하세요.
이번 장에서는 예상 발화를 작성하는 방법에 대해 설명합니다. 예상 발화는 사용자가 Play의 특정 기능을 요청하기 위하여 말할 수 있는 문장입니다.
이 문장들은 ASR(Automatic Speech Recognition), NLU(Natural Language Understanding) 엔진의 학습 데이터로 활용되며, 사용자의 발화를 잘 인식하고 이해하는 데 핵심 역할을 합니다. 예상 발화의 학습을 통해 훈련된 ASR, NLU 엔진은 사용자가 실제로 한 발화를 분석한 뒤 그 발화 의도에 맞는 기능을 사용자에게 제공하게 됩니다.
예상 발화 작성 주요 원칙
- 같은 기능으로 처리할 표현이라면 하나의 Intent의 예상 발화로 추가합니다.
- 하나의 Intent에 정의되어야 할 기능을 Entity 단위로 나누어 서로 다른 기능으로 분리되어 정의하지 않도록 주의해야 합니다.
- ‘날씨 알려줘’, ‘날씨 어때?’와 같이 서술어가 다르더라도 날씨를 알려주는 기능으로 연결할 예상 발화라면 하나의 Intent로 추가합니다.
- 예상 발화는 다양할 수록 좋습니다.
- 동일한 의도라도 사람마다 표현이 다릅니다. 의도를 예측하기 위한 학습 데이터에는 다양한 표현이 필요합니다.
- 따라서, 하나의 의도를 나타내는 예상 발화는 서술어와 Entity들의 조합 및 순서에 따른 다양한 문형으로 작성하는 것이 효율적입니다.
- 문형은 서술어의 종류, 어미의 활용, Entity들의 조합, 어순 및 문장 구조에 따라 다양하게 작성할 수 있습니다.
- 또한 Entity Type별로 가능한 Entity들을 다양하게 사전으로 작성하는 것이 좋습니다.(한글/영어/숫자 표기 포함)
- 일정 수 이상의 데이터가 필요 합니다.
- 학습 데이터가 다양하고 양이 많을수록 사용자 의도를 파악하는 정확도가 높아집니다.
- 학습 데이터의 양이 많을수록 의도를 파악하는 정확도가 높아지므로 Intent당 30개 이상의 예상 발화를 등록하는 것을 권장합니다.
- 인식하고자 하는 표현(서술어)이 다양하고, Entity의 개수가 많을수록 다양한 문형의 많은 예상 발화 등록이 필요합니다.
- 예상 발화 간에도 균형이 필요합니다.
- 문형의 복잡도가 비슷한 Intent들의 등록된 예상 발화의 수가 균형을 이루는 것이 좋습니다.
- 처음에는 대표적인 예상 발화들을 등록하여 학습하고, 실제 사용자 발화 로그 기반으로 고빈도 발화들을 추가하여 Play의 인식 범위를 확장해 나갈 수 있습니다.
- 특정 문형 위주에 편중되어 예상 발화가 작성되면 결과가 왜곡될 수 있습니다.
- 예를들어, Intent 대부분을 높임말로 예상 발화를 작성한 경우에는 실제 사용자가 낮춤말로 같은 표현을 했을 때 의도를 알아채지 못할 수 있습니다.
다음과 같은 규칙도 참고해주세요.
1. 호출어(Wake-up word)나 Play 호출 이름은 제외하고 입력합니다.
Wake-up word인 ‘아리아’, ‘팅커벨’ 과 각 Play의 호출이름(Invocation name) 예상 발화 내에서 제외하고 입력해야 합니다.
뉴스 틀어줘 (O) / 아리아, 뉴스 틀어줘 (X) / KBS뉴스에서, 뉴스틀어줘 (X)
2. 영단어는 가능하다면 한글 표기로, 외래어 표기법에 따라 작성해주세요.
스마트홈 (O) / SMART HOME (X)
3. 알파벳으로 읽히는 경우는 영문으로 작성해주세요. 영문 알파벳은 대소문자를 구분할 필요가 없습니다.
AS (O) / 에이에스 (X)
WWW (O) / 더블유더블유더블유 (X)
4. NLU 엔진에서 해석하여 응답하는 기호는 다음과 같습니다.
-
?
: 문형을 분석하는 데 참고합니다. -
'
: 생략된 글자나 숫자가 있을 때 사용하는 영문의 어포스트로피(apostrophe)입니다(he’s, who’d). 한글의 따옴표는 허용 기호에 포함되지 않습니다. -
*
: 주소나 전화번호 등에서 ‘에’, ‘다시’ 등으로 사용되는 하이픈(hyphen)입니다. -
&
: ‘Ampersand’도 허용되며, C&C, M&C 등의 단어에서 ‘앤’, ‘앤드’로 분석됩니다. - 허용 기호에 포함되지 않는 기호는 삭제됩니다.
예제를 통해 알아보기
조금 구체적인 예를 통해 예상 발화를 작성하는 방법을 알아보겠습니다.
-
같은 의미를 가지는 다양한 용언/부사 사용
“어제 에스케이 와이번스 야구 결과 알려줘”, “어제 에스케이 와이번스 야구 어떻게 됐어”, “어제 에스케이 와이번스 야구 이겼어?”
-
특정 용언의 다양한 활용형 사용
“어제 에스케이 와이번스 야구 결과 알려줘”, “어제 에스케이 와이번스 야구 결과 알고싶어”, “어제 에스케이 와이번스 야구 결과 알려줄래”
-
같은 Type 의 다양한 Entity 사용
“어제 엘지트윈스 시합 결과 알려줘”, “오늘 두산베어스 시합 결과 알려줘”
-
특정 Entity에 대한 다양한 표현 사용
“어제 에스케이와이번스 야구 시합 결과 알려줘”, “어제 에스케이 와이번즈 야구 시합 결과 알려줘”, “어제 에스케이 야구 시합 결과 알려줘”, “어제 와이번스 야구 시합 결과 알려줘”
-
다양한 조사/부사 및 어순 변경
“어제 에스케이 와이번스 야구 결과 알고싶어”, “어제 에스케이 와이번스 야구 결과를 알고싶어”, “어제 에스케이 와이번스 야구 결과가 알고싶어”, “에스케이 와이번스 어제 야구 결과 알고싶어”, “어제 야구 결과 에스케이 와이번스 꺼 알고 싶어”
-
사용자가 발화할 만한 수준에서 Entity의 순서를 변경하여 등록
“어제 에스케이 와이번스 시합 결과 알려줘”, “에스케이 와이번스 어제 시합 결과 알려줘”
한국 프로 야구 경기 결과를 조회하는 Play를 개발한다고 할 때, 위의 여섯 가지 원칙을 적용하여 다음과 같은 일련의 발화들을 등록해 볼 수 있습니다.
- 오늘 경기 결과 알려줘
- SK와이번스 오늘 경기 결과
- 삼성 라이온즈 경기 결과 알려줘
- 오늘 두산베어스 경기 어떻게 됐어?
- 어제 LG 트윈스 게임 이겼어 졌어?
- 한화 이글스 어제 경기 이겼는지 말해줘
- 오늘 KT 위즈 경기 스코어 알려줘
- 어제 롯데 자이언츠 시합 어떻게 끝났는지 좀 말해 줄래
- 넥센 히어로즈 19일 시합 결과 좀 알려 줄래
- KIA 타이거즈 화요일 게임 어떻게 됐는지 확인 부탁해
- 오늘 NC 다이노스 야구 어떻게 끝났어?
- …