예상 발화 작성 가이드

이번 장에서는 예상 발화를 작성하는 방법에 대해 설명합니다. 예상 발화는 사용자가 Play의 특정 기능을 요청하기 위하여 말할 수 있는 문장입니다.

이 문장들은 ASR(Automatic Speech Recognition), NLU(Natural Language Understanding) 엔진의 학습 데이터로 활용되며, 사용자의 발화를 잘 인식하고 이해하는 데 핵심 역할을 합니다. 예상 발화의 학습을 통해 훈련된 ASR, NLU 엔진은 사용자가 실제로 한 발화를 분석한 뒤 그 발화 의도에 맞는 기능을 사용자에게 제공하게 됩니다.

실제 Intent를 생성하고 등록하는 방법은 User Utterance Model 정의하기 (Intent & Entity)를 참고하세요.

예상 발화 작성 주요 원칙

  1. 같은 기능으로 처리할 표현이라면 하나의 Intent의 예상 발화로 추가합니다.
    • 하나의 Intent에 정의되어야 할 기능을 Entity 단위로 나누어 서로 다른 기능으로 분리되어 정의하지 않도록 주의해야 합니다.
    • ‘날씨 알려줘’, ‘날씨 어때?’와 같이 서술어가 다르더라도 날씨를 알려주는 기능으로 연결할 예상 발화라면 하나의 Intent로 추가합니다.
  2. 예상 발화는 다양할 수록 좋습니다.
    • 동일한 의도라도 사람마다 표현이 다릅니다. 의도를 예측하기 위한 학습 데이터에는 다양한 표현이 필요합니다.
    • 따라서, 하나의 의도를 나타내는 예상 발화는 서술어와 Entity들의 조합 및 순서에 따른 다양한 문형으로 작성하는 것이 효율적입니다.
    • 문형은 서술어의 종류, 어미의 활용, Entity들의 조합, 어순 및 문장 구조에 따라 다양하게 작성할 수 있습니다.
    • 또한 Entity Type별로 가능한 Entity들을 다양하게 사전으로 작성하는 것이 좋습니다.(한글/영어/숫자 표기 포함)
  3. 일정 수 이상의 데이터가 필요 합니다.
    • 학습 데이터가 다양하고 양이 많을수록 사용자 의도를 파악하는 정확도가 높아집니다.
    • 학습 데이터의 양이 많을수록 의도를 파악하는 정확도가 높아지므로 Intent당 30개 이상의 예상 발화를 등록하는 것을 권장합니다.
    • 인식하고자 하는 표현(서술어)이 다양하고, Entity의 개수가 많을수록 다양한 문형의 많은 예상 발화 등록이 필요합니다.
  4. 예상 발화 간에도 균형이 필요합니다.
    • 문형의 복잡도가 비슷한 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 등의 단어에서 ‘앤’, ‘앤드’로 분석됩니다.
  • 허용 기호에 포함되지 않는 기호는 삭제됩니다.

예제를 통해 알아보기

조금 구체적인 예를 통해 예상 발화를 작성하는 방법을 알아보겠습니다.

  1. 같은 의미를 가지는 다양한 용언/부사 사용

    “어제 에스케이 와이번스 야구 결과 알려줘”, “어제 에스케이 와이번스 야구 어떻게 됐어”, “어제 에스케이 와이번스 야구 이겼어?”

  2. 특정 용언의 다양한 활용형 사용

    “어제 에스케이 와이번스 야구 결과 알려줘”, “어제 에스케이 와이번스 야구 결과 알고싶어”, “어제 에스케이 와이번스 야구 결과 알려줄래”

  3. 같은 Type 의 다양한 Entity 사용

    “어제 엘지트윈스 시합 결과 알려줘”, “오늘 두산베어스 시합 결과 알려줘”

  4. 특정 Entity에 대한 다양한 표현 사용

    “어제 에스케이와이번스 야구 시합 결과 알려줘”, “어제 에스케이 와이번즈 야구 시합 결과 알려줘”, “어제 에스케이 야구 시합 결과 알려줘”, “어제 와이번스 야구 시합 결과 알려줘”

  5. 다양한 조사/부사 및 어순 변경

    “어제 에스케이 와이번스 야구 결과 알고싶어”, “어제 에스케이 와이번스 야구 결과를 알고싶어”, “어제 에스케이 와이번스 야구 결과가 알고싶어”, “에스케이 와이번스 어제 야구 결과 알고싶어”, “어제 야구 결과 에스케이 와이번스 꺼 알고 싶어”

  6. 사용자가 발화할 만한 수준에서 Entity의 순서를 변경하여 등록

    “어제 에스케이 와이번스 시합 결과 알려줘”, “에스케이 와이번스 어제 시합 결과 알려줘”

한국 프로 야구 경기 결과를 조회하는 Play를 개발한다고 할 때, 위의 여섯 가지 원칙을 적용하여 다음과 같은 일련의 발화들을 등록해 볼 수 있습니다.

  • 오늘 경기 결과 알려줘
    • SK와이번스 오늘 경기 결과
    • 삼성 라이온즈 경기 결과 알려줘
    • 오늘 두산베어스 경기 어떻게 됐어?
    • 어제 LG 트윈스 게임 이겼어 졌어?
    • 한화 이글스 어제 경기 이겼는지 말해줘
    • 오늘 KT 위즈 경기 스코어 알려줘
    • 어제 롯데 자이언츠 시합 어떻게 끝났는지 좀 말해 줄래
    • 넥센 히어로즈 19일 시합 결과 좀 알려 줄래
    • KIA 타이거즈 화요일 게임 어떻게 됐는지 확인 부탁해
    • 오늘 NC 다이노스 야구 어떻게 끝났어?