의도 명명 지침

작업(의도 식별자) 이름을 지정할 때는 아래 지침을 따르세요.

  • 동작 동사, 목적어, 수식어(목적어 앞이나 뒤에 위치)를 사용하세요. 일반적으로 의도의 이름은 2~4개의 단어로 구성됩니다.
  • 작업 목적을 전달하기 위해 5개 미만의 단어를 사용합니다.
  • 동작이 유사한 경우 서로 다른 작업이라도 같은 동사를 사용합니다(예: 사안을 제출하다/보고서를 받다 대신 사안을 제출하다/보고서를 제출하다).
  • 한 단어로 된 동작은 피하세요.
  • 한정사(the, my, that 등)를 피하세요.
  • 숫자는 피하되 그게 불가능할 경우에는 항상 숫자 형식으로 표현하세요.
  • 작업, 경고, 조치, 취소, 삭제, 수정, webhook과 같은 Kore.ai 플랫폼 용어를 사용하지 마세요.
  • 의도 이름에 엔티티가 될 만한 내용을 사용하지 마세요(예: 오늘 날씨 확인에서 오늘이라는 단어는 엔티티가 될 수 있는 단어임).
  • () & / \ $ [ ] + * 같은 특수 문자를 사용하지 마세요.
  • – , 같은 구두점을 사용하지 마세요. ! ? ‘ “.
  • 대명사를 사용하지 마세요(예: 저에게 모든 문제를 알려주세요(Show Me All Issues))
  • 봇 이름과 관련된 용어를 사용하지 마세요(예: Asana 작업 생성).
  • 한 단어를 동사와 명사 양쪽으로 사용하지 마세요(예: 사안 업데이트하기 /업데이트 받기).
  • 항목 목록 엔티티 유형인 경우 동의어를 정의하는 동안 다음 문자의 조합을 사용하지 마세요. (), %, °(온도 기호, 예를 들어 30°C).

주문형 작업(작업, 대화, 정보 작업)에는 항상 동작 동사, 목적어, 수식어(목적어 앞이나 뒤에 위치)가 포함되어야 합니다. 거의 모든 동작을 how + what 형식에 매핑하고 목표가 다음과 같은 문장을 완성해야 합니다.

  • 무언가를 함
  • 어떠한 상태를 불러옴
  • 상세 보고서를 보냄
  • 중요한 보고서 이메일 전송
  • 3일 동안의 일기 예보 확인

경고에는 항상 목적어와 수식어(목적어 앞이나 뒤에 위치)가 포함되어야 합니다. 경고에 동사를 함께 사용하지 마세요. 알림 이름에 알림이라는 단어를 사용하지 마세요. 알림은 what 형식으로 매핑되어야 하며 경고 다음과 같은 것에 대한 알림으로 문장을 완성해야 합니다.

  • 어떤 것
  • 상태 업데이트
  • 중요 상태 업데이트
  • 변경 사항

패턴

이름에 사용된 단어에 동의어를 사용하는 것은 좋지만 사용자는 때때로 속어, 은유 또는 기타 관용적 표현이 들어간 작업을 지칭해야 할 수 있습니다.

예를 들어, 사용자는 오늘의 강우 상황을 입력했는데 작업 이름은 현재 날씨 확인일 수 있습니다. 이런 경우, 작업 이름 안에 있는 단어가 사용되지는 않았지만, 입력된 내용은 같은 의미를 띄게 됩니다. 봇 NLP 인터프리터의 정확도와 인식을 최적화하기 위해, 패턴을 만들 수 있습니다.

NLP 인터프리터가 작업이나 필드에 동의어를 일치시키고 다른 작업이나 필드에 패턴을 일치시킬 때, 패턴 일치에 우선 순위를 적용하여 동의어 일치보다는 인식을 하는 데 사용하게 됩니다.

참고: 나열된 순서대로 패턴을 평가합니다. 따라서 패턴을 추가할 때 가장 제한적인 것부터 가장 덜 제한적인 것의 순서대로 추가하세요.
다음은 의도 패턴을 만들기 위한 몇 가지 일반적인 지침입니다.
  • 최소 3단어 이상을 사용하세요.
  • 표준형 단어를 사용하세요(즉, 동사 원형, 단수 명사).
  • 단어와 동의어 모두 소문자를 사용하세요.
  • 단어에 미국식 철자를 사용합니다(즉, normalise 대신 normalize).
  • 한정사와 대명사(the, a, my, that)를 사용하지 마세요.
  • 숫자 사용을 피하세요.
  • 작업 패턴을 정의할 때 엔티티 값을 사용하지 마세요.
  • 발음 생략(즉, what's)을 사용하지 마세요.
  • () & / \ $ [ ] + * 같은 특수 문자를 사용하지 마세요.
  • – , 같은 구두점을 사용하지 마세요. ! ? ‘ “.

패턴 사용에 대한 빠른 지침의 경우, 패턴 사용 방법?을 참조하세요.

패턴 연산자

  • AND: ( X Y ): 단어의 순서 관계. 기본 설정은 이렇습니다. 즉, 패턴을 주문 취소로 지정하면 (주문 취소)와 같습니다.
    예를 들어, (주문 취소)전화 주문을 취소해주세요와 일치하지만 보류 중인 iPhone X 주문이 있습니다. 취소할 수 있습니까와는 일치하지 않습니다. 봇 빌더 도구는 단어 사이에 와일드카드 수가 증가하는 패턴을 사용합니다(의도의 경우 최대 3개). 따라서 주문 취소 패턴은 다음 내용과 일치할 수 있습니다.

    • 주문 취소
    • 내 주문 취소
    • 마지막 주문 취소
    • 지난 주의 대량 주문 취소
  • OR: [X Y Z]: 이들 중 어떤 쪽이든 사용자 발화에서 서로 바꿔 사용할 수 있습니다. 예를 들어, ([주세요 만들어주세요] 저에게 [음식 음료 디저트])는 아래 발화 중 하나와 일치합니다.
    • 음식을 주세요
    • 음료 한 잔 만들어주세요
    • 음료 한 잔 주세요
    • 디저트 주세요
    • 즉석 음식 만들어주세요
  • NOT: !X: 의도 일치를 위해 사용자 발화에 나타나지 않아야 하는 단어들입니다. 예를 들어, (!예보)는 현재 날씨 확인이라는 의도 패턴으로 표시하는데 봇은 3일 동안의 일기예보 확인이라는 다른 의도를 지원합니다.
    • 사용자 발화: 캘리포니아 여행 계획 중 일기예보를 알려주세요는
      • 현재 날씨 확인과는 일치하지 않고
      • 3일 동안의 일기예보 확인과 일치합니다
        !단어시점 이후가 아님을 참고하세요. 따라서 (!일기예보)와 (일기 !예보 확인)은 다릅니다. 일기예보 확인 발화는 두 번째와는 일치하지만 첫 번째와는 일치하지 않습니다.
  • Optional: {X}: 예를 들어, {전화} 사용자 발화가 전화번호를 알려주세요 또는 번호를 알려주세요인 경우 플랫폼은 이를 같은 것으로 취급합니다.
  • 문구 실행: X_Y: 사이에 어떠한 단어도 없는 경우 사용자 발화에 있는 그대로 문구를 실행합니다. 예를 들어, transfer_funds 자금 이체(transfer funds) 또는 자금을 이체하고 싶습니다(I want to transfer funds)라는 발화와는 일치하지만 자금을 이체할 수 있나요(Can I transfer some funds)와는 일치하지 않습니다.
  • 개념: ~: 플랫폼에는 개발자가 패턴을 정의하는 데 사용할 수 있는 많은 내장된 개념이 있습니다. 예를 들어, (저는 [좋아합니다 사랑합니다] ~세계_국가)는 다음과 일치합니다.
    • 저는 인도를 좋아합니다
    • 저는 호주 여행을 사랑합니다
    • 아프리카 국가를 방문하고 싶습니다
  • Unordered: <<, >>: 임의의 순서로 단어를 찾는 데 사용합니다. 예를 들어, <<주문 취소>>는 <i>전화 주문을 취소해주세요와 일치하고 보류 중인 iPhone X 주문이 있습니다. 취소할 수 있습니까와도 일치합니다
  • Start/End of Statement: <, >: 예를 들어, (자금 이체(transfer fund) )는 자금 이체(transfer funds)를 하고 싶습니다와는 일치하지만 오늘 자금을 이체합니다(transfer funds today)와는 일치하지 않습니다.
  • Quote: ‘ –: 단어를 인용하거나 표준형이 아닌 단어를 사용하는 경우, 시스템은 패턴에서 사용한 것으로 자체적으로 제한합니다. 예를 들어, (지금을 이체하는 것을 좋아합니다(like to transfer funds)내 계좌에서 자금을 이체하고 싶습니다(I would like to transfer funds from my account와는 일치하지만 자금 이체 과정이 정말 마음에 들었습니다(I really liked transfer funds process)와는 일치하지 않습니다.

엔티티 패턴

위와 같이 엔티티를 탐지하기 위해 개발자는 엔티티 패턴 및 개체명 인식 학습 조합을 사용할 수 있습니다. 엔티티 패턴은 Kore에 엔터티의 유효한 값을 찾을 위치를 안내합니다. 엔티티 패턴이 문장의 여러 위치에서 발견될 수 있으며 Kore는 유효한 값을 가진 첫 번째 인스턴스에서 값을 추출합니다. 위의 작업 패턴 지침 외에도, 엔티티 패턴에 대한 아래 지침 내용을 따르세요.

  • 엔티티의 예상 위치를 나타내는 위치 와일드카드 *를 포함합니다(예: (에서 * 까지), (에서 * >)). 이것 없이는 패턴이 유효하지 않습니다.
  • 엔티티 위치의 앞뒤 패턴에 있어야 하는 단어를 사용합니다. 위치 와일드카드 뒤에 오는 단어는 유효한 엔티티 값의 검색 범위를 정하는 데 도움이 됩니다.
  • 문장의 시작과 끝 기호(< 및 >)를 사용하여 위치 와일드카드를 구분하지만 봇 빌더 도구가 엔티티 값을 추출하기 위해 문장 경계를 넘지 않기 때문에 꼭 필요한 것은 아닙니다(설명은 제외).
  • 필드 패턴에서 다른 위치 와일드카드를 사용하지 마세요. 모든 필드 패턴을 동일한 방식으로 처리하며 하나를 제외한 다른 모든 위치 와일드카드는 무시합니다.
  • 패턴 엔티티 패턴에서 필드 이름이나 동의어를 사용하지 마세요. 지정된 단어 사이에 최대 두 개의 와일드카드 단어만 사용하도록 염두에 두세요.

다음은 자금 이체 의도에서 계좌 번호의 fromto를 인식하는 엔티티 패턴의 몇 가지 예입니다.
위에서 정의한 패턴 연산자는 엔티티 패턴에도 적용될 수 있습니다.

  • 패턴: word1 *n – word1 발생 후 최대 n개 단어
    엔티티 ToAccount의 패턴 – to *1
    ToAccount는 transfer funds to ABC123라는 사용자 발화에서 캡처되지만 transfer funds for ABC123에서는 캡처되지 않습니다.
  • 패턴: word1 * word2 또는 word1 word2 *n -사용자 발화의 여러 엔터티.
    엔티티 ToAccount의 패턴 – to * fromfrom to *1.
    엔티티 FromAccount의 패턴 – from * toto from *1.
    ToAccount & FromAccount는 transfer funds from XYZ321 to ABC123transfer funds to ABC123 from XYZ321라는 사용자 발화에서는 캡처되지만 transfer funds for ABC123 using XYZ321에서는 캡처되지 않습니다.
    참고 사항: 엔티티에 여러 패턴을 입력하면 둘 중 하나가 일치합니다.
  • 패턴: [ word1 word2 ] *n – […] 내에 정의된 한 단어 또는 문구와 일치합니다.
    엔티티 ToAccount의 패턴 – to *1.
    엔티티 FromAccount의 패턴 – [ using from ] *1.
    ToAccount & FromAccount는 transfer funds from XYZ321 to ABC123transfer funds to ABC123 using XYZ321라는 사용자 발화에서 캡처되지만 transfer funds for ABC123 using XYZ321에서는 캡처되지 않습니다.
  • 패턴: ~concept *n – concept를 사용하여 만든 패턴입니다.
    엔티티 ToAccount의 패턴 – to *1.
    엔티티 FromAccount의 패턴 – ~from*1 여기서 from은 (using) (from)과 같은 concept입니다
    ToAccount & FromAccount는 transfer funds from XYZ321 to ABC123transfer funds to ABC123 using XYZ321라는 사용자 발화에서 캡처되지만 transfer funds for ABC123 using XYZ321에서는 캡처되지 않습니다.

패턴 추가 방법에 대한 자세한 내용은, 패턴 관리하기를 참조하세요.

네거티브 패턴

네거티브 패턴을 사용하여 기초 의미 또는 기계 학습 모델을 통해 탐지된 의도를 제거합니다.

예를 들어, 사용자가 문제가 발생했을 때 항공편을 예약하려고 했습니다(I was trying to Book a Flight when I faced an issue고 말합니다. 기계는 의도를 항공편 예약(Book a Flight)으로 식별하지만 이는 사용자가 원하는 일이 아닙니다. 이럴 경우, 하려고(was trying to) *를 네거티브 패턴으로 정의하고 일치하는 의도가 무시되도록 합니다.

동의어

의도/엔티티를 식별하는 단어가 서로 바뀌어서 사용되는 경우 동의어를 사용해야 합니다. 의도와 엔티티 둘 다에 동의어를 정의합니다.

각각 의도에는 이름이 있습니다. 예를 들어, 의도 이름이 안내 검색(Guided Search)인 경우입니다. 사용자가 이 작업을 시작하기 위해 입력할 수 있는 동의어가 많이 있습니다. 가령 제품 탐색이라면 화장품을 보여주세요(Show me makeup), 또는 제품을 보여주세요(show me products)가 있습니다.

개발자는 작업 이름을 두세 단어로 제한해야 합니다. 그런 다음 각 단어의 동의어를 고려합니다.

  • 탐색 – 찾기(Find), 검색(Search)
  • 제품 – 화장품(Makeup), 상품(Goods), 키트(Kit)

다음과 같은 철자 오류도 염두에 두어야 합니다.

  • makeup – make up

동의어는 원칙적으로 작업 이름의 일부로 정의한 단어에 대해서만 정의해야 합니다. 봇 수준에서 추가한 동의어는 모든 작업에 적용할 수 있습니다. 즉, 개발자가 작업 A의 단어에 동의어를 추가하면, 해당 동의어는 작업 이름에 같은 단어가 있는 다른 작업에도 사용됩니다. 예를 들어, 안내 검색에서 탐색이라는 단어에 정의한 동의어는 키워드 검색에도 사용됩니다. 동의어는 의도를 요청하는 사용자에게 예상되는 변형된 형태의 수를 늘리는 데 사용할 수 있고 사용해야만 합니다. 모든 것과 일치할 만큼 일반적이지 않으면서 기존 의도 이름을 대체 문구로 보완합니다. 동의어는 단방향이므로 foo=bar가 bar=foo를 의미하지는 않습니다.

동의어에 대한 일반 지침:

  • 표준형 단어를 사용하세요(즉, 동사 원형, 단수 명사).
  • 단어와 동의어 모두 소문자를 사용하세요.
  • 동의어 문구를 5단어 미만으로 유지합니다.
  • 단어에 미국식 철자를 사용합니다(즉, normalise 대신 normalize).
  • 의미보다 의도를 사용하세요(즉, 조치의 컨텍스트가 찾기(find) 및 표시하기(display)를 의미하는 경우 getshow의 좋은 동의어가 됩니다.
  • 한정사나 대명사(the, a, my, that 등)에 동의어를 추가하지 마세요.
  • 두 개의 충돌하는 작업과 일치할 수 있는 동의어를 사용하지 마세요.
  • () & / \ $ [ ] + * 같은 특수 문자를 사용하지 마세요.
  • – , 같은 구두점을 사용하지 마세요. ! ? ‘ “.
  • 여러 개의 단어에 동의어를 지정하지 마세요(예를 들어, 이것은 틀렸습니다(this is wrong): 틀린(wrong), 부적절한(bad)).
  • 숫자에 동의어를 추가하지 마세요.
  • 문구 형식을 사용하지 마세요(즉, 찾아보다(lookup)를 동의어로 사용하지 마세요. 그냥 보다(look)를 사용하세요).
  • 2글자 이하로 줄이지 마세요.

동의어 작업

엔티티(값 목록 및 조회 유형에만 해당) 식별의 사용자 입력 및 동의어 간 일치는 다음 방식 중 하나로 일어날 수 있습니다.

  • 부분 일치 – 입력의 한 개 이상의 단어가 주어진 동의어의 한 개 이상의 단어와 일치해야 하는 기본 작업입니다. 예를 들어, 사용자 발화 직불 카드는 동의어 신용 카드와 일치합니다.
  • 정확히 일치 – 여기서 입력은 주어진 동의어의 모든 단어를 다 포함해야 합니다. 예를 들어, 추가 신용 카드신용 카드와 일치합니다. 그러나, 직불 카드신용 카드와 일치하지 않습니다. 정확한 일치를 트리거하려면, 동의어를 큰따옴표로 묶어야 합니다.
  • 전체 일치 – 전체 입력이 주어진 동의어 단어와 정확히 일치해야 합니다. 예를 들어, a credit card는 <credit card>와 일치해야 하지만 my credit card는 <credit card>와 일치하지 않아야 합니다. 마찬가지로 a credit card는 <my credit card>와 일치하지 않아야 합니다. 정확한 일치를 트리거하려면, 동의어를 꺾쇠 괄호로 묶어야 합니다.
  • 표준형 일치 – 사용자 입력이 동의어 또는 표준형과 일치하는 기본 작업입니다. 예를 들어, check가 checking의 표준형이기 때문에 내 잔액 확인(check my balance)이 동의어 계좌(checking account)와 일치합니다. 이 작업을 중단하려면 동의어에 확인(checking)을 위해 작은 따옴표를 접두사로 붙입니다. (v7.1 이후)
참고: 엔티티뿐만 아니라 의도를 식별하기 위해 동의어를 추가할 수 있습니다. 의도가 식별된 후에만 엔티티 식별이 트리거됩니다.
동의어 추가 방법에 대한 자세한 내용은, 동의어 관리하기를 참조하세요.

개념

개념은 한 개의 단어를 식별 그룹으로 간주하려는 관련된 용어 및 동의어 모음입니다.

개념 명명 규칙:

  • ~를 접두사로 두어야 합니다
  • 개념 이름으로 허용되는 문자는 다음과 같습니다.
    • a~z 및 A~Z
    • 1에서 9까지
    • _ (밑줄)
  • 하나 이상의 알파벳이 ~ 뒤에 와야 합니다.
  • _(밑줄)로 시작하거나 끝나서는 안 됩니다.
  • 이들은 대소문자를 구분하지 않습니다. 즉 ~myConcept는 ~myconcept와 동일합니다.

허용되는 개념 이름의 예:

  • ~my_concept
  • ~Sample
  • ~test123
  • ~my_new_concept

유효하지 않은 개념 이름의 예:

  • ~_concept
  • ~concept_
  • ~a-concept
  • ~123test

이모지로 맞춤형 개념을 정의할 수도 있습니다.

자세한 내용은 맞춤형 개념을 참조하세요.

표준 응답

표준 응답은 플랫폼이 대화 중 특정 상황에 응답하는 데 사용하는 템플릿 메시지입니다. 이러한 상황의 예로는 사용자 입력이 모호한 경우의 해결, 승인 요청, 확인 받기, 중단 및 재개에 대한 알림 등이 있습니다. 표준 응답은 다음과 같이 분류됩니다.

  • 진술
  • 인사말
  • 질의
  • 오류 및 경고
  • 질문 및 선택

플랫폼에는 미리 준비된 답변이 제공되지만, 개발자는 이러한 메시지와 더불어 추가로 변형된 형태를 사용자 정의하는 것이 좋습니다.

대화 단계 전반에 걸쳐 최종 사용자가 원활한 경험을 할 수 있도록 하기 위해, 개발자는 각 표준 응답을 검토하여 봇의 전체 페르소나/테마에 맞는지 확인해야 할 수 있습니다.

표준 응답은 일반 텍스트 메시지이거나 JavaScript로 생성되어 지원 채널의 동적 메시지 및 템플릿을 구성할 수 있습니다. 해당 되는 경우, 표준 응답은 개발자가 메시지를 사용자 정의하는 데 도움이 되는 컨텍스트 태그를 지원합니다.

예를 들어, 사용자가 봇이 수행할 수 있는 작업을 요청하면 봇은 다음과 같은 메시지로 응답합니다. 다음은 제가 수행할 수 있는 작업입니다(Here are the tasks I can perform for you). <list-of-tasks>. 이 예시에서, 개발자는 이 메시지를 수정하고 적절한 곳에 <list-of-tasks> 태그를 재사용하도록 선택할 수 있습니다. 이와 같은 태그는 런타임 값으로 대화하는 동안 실제 텍스트 컨텍스트로 대체됩니다.

지식 그래프

실행 가능한 작업의 경우, 의도는 작업 이름(기초 의미 모델에서 사용됨) 또는 작업에 정의된 기계 학습 발화를 기반으로 식별됩니다. 이 접근 방식은 언어 의미와 기계 학습 모델에서 파생된 통계적 확률로 작업을 다른 작업과 구별할 수 있는 경우에 적합합니다.

FAQ의 경우, 이 접근 방식은 의미적 변형 측면에 보면 FAQ는 대부분 서로 유사하기 때문에 잘 작동하지 않을 수 있으며, 보다 적절한 답변을 찾기 위해 도메인에 대한 추가 인텔리전스가 필요합니다.

Kore.ai의 지식 그래프 기반 모델은 사용자의 의도(이 경우 가장 적절한 질문)를 식별하는 데 있어 주요 도메인 용어와 그 관계의 중요성을 나타내는 데 필요한 추가 인텔리전스를 제공합니다.

다음 두 가지 예를 통해 지식 그래프를 작성하는 데 필요한 다양한 설정을 설명합니다.

예 A 예 B

다음 질문을 학습시킨 봇에 대해 생각해봅시다.

  • A1: 대출 신청은 어떻게 하나요?(How to apply for a loan?)
  • A2: 보험 신청 절차가 어떻게 되나요?(What is the process to apply for insurance?)

다음 질문을 학습시킨 봇에 대해 생각해봅시다.

  • B1: 공동 계좌를 개설할 수 있나요?(Can I open a joint account?)
  • B2: 공동 계좌 소유자는 어떻게 추가하나요?(How do I add a joint account holder?)
  • B3: 수표책 신청은 어떻게 하나요?(How can I apply for a checkbook?)
  • B4: 직불 카드는 어떻게 신청하나요?(How do I apply for a debit card?)

다음은 순수한 기계 학습 및 시멘틱 규칙을 기반으로 하는 일반적인 모델의 의도 인식과 관련된 몇 가지 문제입니다.

  1. 기계 학습 기반 모델에서 얻은 결과는 사용자 발화가 관련 없는 질문과 일치하는 용어가 더 많을 경우, 긍정 오류의 결과를 초래하는 경향이 있습니다.
  2. 봇이 도메인의 용어 및 관계를 기반으로 이해해야 하는 경우 모델이 작동하지 않습니다. 예를 들어, 사용자 발화 대출 신청은 어떻게 하나요?는 A1 대신 우선 일치 항목으로 A2를 잘못 가져옵니다. A2가 A1보다 사용자 발화와 일치하는 용어가 더 많기 때문입니다.
  3. 이 모델은 질문의 일부가 다른 질문과 연결되어 규정되어 있는 경우 올바른 응답을 가져오지 못합니다. 예를 들어, A: 사용자 발화 대출을 신청했는데 보험 가입이 될까요?는 A1과 A2 사이에서 애매모호한 결과를 가져옵니다. 예 B: 사용자 발화 공동 계좌를 개설했는데 직불 카드 발급이 가능한가요?는 B4 대신 B1으로 잘못 일치시킬 수 있습니다.

Kore 지식 그래프 모델에서, 루트 레벨에 모든 질문을 두는 것은 용어 빈도 및 시멘틱 규칙 기반 모델을 사용하는 것과 같습니다.

핵심 도메인 용어와 그 관계

핵심 용어와 그 관계를 식별하는 것은 온톨로지 구축의 중요한 한 측면입니다. 예 A를 통해 이와 같은 사실을 이해해봅시다. A1과 A2는 모두 신청 절차에 관한 것입니다. 하나는 대출 신청에 대해 이야기하고 다른 하나는 보험 신청에 대해 이야기합니다. 따라서 온톨로지를 생성하는 동안 두 개의 자식 노드 대출보험으로 부모 노드 신청을 만들 수 있습니다. 그러면 A1과 A2는 각각 대출보험 노드의 자식 노드로 지정할 수 있습니다.

지식 그래프의 표현
예 A


마찬가지로 예 B의 경우 그래프는 다음과 같습니다

그래프 엔진의 기능

  • 동의어를 사용한 학습의 용이성: Kore.ai 지식 그래프는 동의어를 그래프 노드에 연결할 수 있습니다. 이렇게 하면 질문의 변화를 캡처하는 데 도움이 됩니다. 예를 들어, 위의 예 A에서, 사용자는 getapply의 동의어로 입력할 수 있습니다.
  • 대체 질문의 향상된 범위: 지식 그래프에 대체 질문을 추가할 수 있습니다. 이는 사용자가 동일한 질문을 하는 다양한 방법을 파악하는 데 도움이 됩니다. 위의 예 B에서 공동 계좌 소유자는 어떻게 추가하나요?라는 질문에 대해 아내를 공동 계좌 소유자로 추가할 수 있나요?라는 대체 질문을 추가할 수 있습니다.
  • 향상된 정확도: 온톨로지 기반 질문 답변은 긍정 오류 가능성을 줄여줍니다. 예를 들어, SSN 신청 절차가 어떻게 되나요?라는 사용자 발화의 경우 용어 빈도 기반 모델은 A2를 일치 항목으로 잘못 제시합니다. 온톨로지 기반 모델에는 이러한 긍정 오류를 방지할 수 있는 기능이 있습니다.
  • 클래스를 이용한 문구 저울질: Kore.ai의 그래프 엔진은 관련이 없는 제안을 필터링하기 위해 클래스 개념을 도입했습니다. 자세한 설명은 아래 클래스 섹션을 참조하세요
  • 용어 중요성을 표시하는 기능: Kore.ai 그래프 엔진에는 중요한 온톨로지 용어를 표시하는 기능이 있습니다. 예를 들어, 대출 신청은 어떻게 하나요라는 질문에서 대출은 중요한 용어입니다. 대출 키워드가 사용자 발화에 없으면 A1을 가져오는 것은 거의 의미가 없습니다. 반면 용어 빈도 기반 모델에서 사용자 발화 대출 신청은 어떻게 하나요는 A1을 잘못 가져옵니다.
  • 관련 노드를 그룹화하는 기능: 그래프의 크기가 커지면, 그래프 노드를 관리하는 것이 어려운 작업이 될 수 있습니다. 온톨로지 엔진의 구성자 노드 구조를 사용하여 봇 개발자는 노드에서 관련 노드를 그룹화할 수 있습니다.

지식 그래프 특성

참고: 특성은 v6.4 이하의 클래스를 대체하는 것입니다.

특성을 과도하게 사용하면 부정 오류가 발생할 수 있으므로 잘 판단하여 사용해야 합니다. 클래스를 사용할 때는 다음 사항을 확인하세요.

  • 클래스의 충분한 범위.
  • 클래스를 부적절하게 일반화해서는 안 됩니다.
  • 모든 FAQ를 상호 배타적인 클래스에 태그합니다.

다음은 클래스 작동 방식의 예입니다. 요청이라는 클래스를 만들고 여기에 요청 관련 문구를 추가한다고 가정해봅시다. 사용자가 WebEx를 받고 싶습니다고 말할 때 받고 싶습니다를 요청 클래스에 학습시킨 경우, 이 FAQ는 요청이라는 단어에 태그된 지식 그래프 경로에서만 다룹니다. 다음은 긍정적인 시나리오입니다. 그러나 사용자가 WebEx를 받는 것을 도와줄 수 있습니까?라고 말하는데 요청 클래스에 학습시킨 유사한 발언이 없는 경우 None 클래스로 태그되며 이 FAQ는 요청이라는 단어가 없는 경로에서만 사용됩니다. 따라서 작동하지 않게 됩니다.

또 다른 가능성은 사용자가 WebEx 해결을 위한 도움을 요청하고 싶습니다라고 말했는데 요청하고 싶습니다가 포함된 일부 발화로 요청 클래스를 학습시켰으면 모든 클래스에 걸친 학습을 기반으로 엔진은 이 기능(요청하고 싶습니다가 포함된 문구)을 일반화하고 요청 클래스에 태그할 수 있습니다. 이 경우, 요청 클래스가 WebEx의 도움 경로에 없으면 도움말 > WebEx에 대한 입력을 식별하지 못합니다.

이 클래스가 유용한 경우는 상호 배타적인 FAQ 집합이 있는 경우입니다. 예를 들어, 제품의 문제점에 대한 FAQ 세트와 제품 구매 과정에 대한 FAQ 세트가 있는 경우입니다.
제품 구매 절차에 대한 FAQ:

  1. Microsoft Office를 온라인으로 구입하려면 어떻게 해야 하나요?
  2. 바이러스 백신 소프트웨어를 구매하기 위한 절차가 어떻게 되나요?

제품 문제에 대한 FAQ:

  1. 소프트웨어 설치에 문제가 있습니다
  2. 바이러스 백신 문제를 해결하는 방법

사용자가 바이러스 백신이 작동하지 않을 때 해결하는 절차가 어떻게 되나요?라고 말하면 엔진은 이 입력이 A2 및 B2 둘 다와 유사하다는 것을 발견하고 둘 다 제시하도록 할 수 있습니다. 문제구매와 상호 배타적이며, 이 경우 구매 관련 FAQ를 제시하는 것이 전혀 의미가 없습니다. 그 반대(구매 관련 질문에 문제 FAQ를 일치)의 상황이 훨씬 더 큰 문제(problem)가 될 수 있습니다. 이 문제를 해결하기 위해, 문제 유형과 구매 유형인 클래스 두 개를 만듭니다. 입력한 내용은 구매 또는 문제로 분류되며 적절한 답변을 찾는 데 관련된 질문만 사용됩니다.

이전
기초 의미

 

 

インテントの命名ガイドライン

タスク(インテント識別子)に名前を付ける際には、以下のガイドラインに従ってください。

  • 動作動詞、目的語、場合によっては修飾語(目的語の前後に配置)を使用します。通常、インテント名は2~4語で構成されます。
  • タスクの目的が伝わる5語以内の単語を使用します。
  • 動作が似ている場合は、別のタスクで同じ動詞を使用します(例:問題を表示する/問題を表示する代わりにレポートを表示する/レポートを取得する)。
  • 単一語での動作を避けます。
  • 限定詞を避けます(the、a、my、thatなど)。
  • 数字を避けます。無理な場合は必ず数値表記を使用します。
  • タスク、アラート、アクション、キャンセル、破棄、変更、WebhookなどのKore.aiプラットフォーム用語を避けます。
  • インテント名に潜在的エンティティを使用するのを避けます(例:今日が潜在的なエンティティである今日の天気を取得します)。
  • () & / \ $ [ ] + *などの特殊文字を使用しないでください。
  • – , . ! ? ‘ “などの句読点を使用しないでください。
  • 代名詞を使わないでください(例:私に問題をすべて表示してください)。
  • Bot名に関連する用語を使用しないでください(例:Asanaタスクを作成する)。
  • 単語を動詞と名詞の両方で使用しないでください(例:問題の更新/更新の取得)。
  • List of Itemsのエンティティタイプでは、同義語を定義する際に、「()、%、°(30°Cなどの度数記号)」の文字の組み合わせを持たないようにしてください。

オンデマンドタスク(アクション、ダイアログ、情報タスク)には、常に動作動詞、目的語、そして場合によっては修飾語(目的語の前後に配置)が含まれているべきです。ほとんどすべてのアクションを「how + what」の形式にマッピングし、「目標は…」という文を完成させる必要があります。

  • 何かをする
  • ステータスを取得する
  • 詳細レポートを送信する
  • 重要なレポートをメールで送信する
  • 3日間の予報を取得する

アラートには常に目的語と修飾語(目的語の前後に配置)が含まれているべきです。アラートには動詞を使用しないようにしてください。アラート名に「alert」という単語を使用しないようにしてください。アラートを「what」の形式にマッピングし、「…のアラートを設定する」という文を完成させる必要があります。

  • 何か
  • ステータスの更新
  • 重要なステータスの更新
  • 変更

パターン

名前に使用される言葉に同義語を使用するのは適切ですが、ユーザーはスラングや比喩などの慣用表現を使用してタスクを参照する場合もあります。

例えば、タスク名が「Get Current Weather」となっているにもかかわらず「What’s happening with today’s rain situation」と入力したとします。このような場合、タスク名に使用されている単語はいずれも使用されていませんが、入力内容は同じことを意味しています。Bot用のNLPインタプリタの精度と認識を最適化するために、パターンを作成することができます。

NLPインタプリタが同義語を1つのタスクまたはフィールドに、パターンを別のタスクまたはフィールドに一致させた場合、認識には同義語の一致よりもパターンの一致が優先されます。

:パターンはリストされた順に評価されます。そのため、パターンを追加する際には、最も制限の多い順から少ない順に追加するようにしてください。
インテントパターンの作成に関する一般的なガイドラインは以下の通りです。
  • 3語以上の単語を使用します。
  • 単語を正規化形式で使用します(不定詞、単数名詞など)。
  • 単語およびその同義語には小文字を使用します。
  • 米国式スペルの単語を使用します(normalizeではなくnormalizeなど)。
  • 限定詞や代名詞の使用を避けます(the、a、my、thatなど)。
  • 数字の使用を避けます。
  • タスクパターンの定義にエンティティ値を使用するのを避けます。
  • 省略を使用しないでください(what ’sなど)。
  • () & / \ $ [ ] + *などの特殊文字を使用しないでください。
  • – , . ! ? ‘ “などの句読点を使用しないでください。

パターンの使用に関するクイックガイドについては、パターンの使用方法を参照してください。

パターン演算子

  • AND:( X Y ):単語の順序付けられた関係。 これはデフォルト設定で、パターンをcancel orderとして指定した場合、(cancel order)と同じになります。
    例:(Cancel Order)は「Cancel my phone order」とは一致しますが、「I have a pending order for an iPhone X, can I cancel.」とは一致しません。Botビルダーツールは、単語間のワイルドカード数が増えるパターンを使用しています(1つのインテントに最大3つ)。そのため、「Cancel Order」というパターンは以下に一致する可能性があります。

    • 「cancel order」
    • 「cancel my order」
    • 「cancel that last order」
    • 「cancel last weeks big order」
  • OR:[X Y Z]:これらのいずれかは、ユーザーの発話で意味の区別なく使用することができます。例:([get make] me [food drink dessert])は、以下の発話のいずれかと一致します。
    • Get me food
    • Make me a drink
    • Get me a drink
    • Get me a dessert
    • Make me some quick food
  • NOT:!X:インテント一致でユーザーの発話に表示されるべはずのない単語です。例:(!fourecast)は「Get current weather」という名前のインテントのパターンとしてマークされ、Botは「Get 3-day weather forecast」という名前の別のインテントをサポートしています。
    • ユーザーの発話:「Planning a trip to California get me the forecast」
      • 「Get current weather」とは一致しません。
      • 「Get 3-day weather forecast」と一致します。
        「!word」は、「これ以降はなし」という意味であることにご注意ください。つまり(!forecast the weather)と(get weather !forecast)は異なります。「get forecast for the weather」という発話は後者には一致しますが、前者には一致しません。
  • Optional:{X}:例:{phone}ユーザーの発話が「Get me a phone number」あるいは「get me a number」であれば、プラットフォームはそれを平等に扱います。
  • Enforce Phrase: X_Y:フレーズの出現を、間に単語を挟むことなくユーザーの発話のままに強制します。例:transfer_funds。「transfer funds」または「I want to transfer funds」というユーザーの発話は一致しますが、「Can I transfer some funds」は一致しません。
  • Concepts:~:プラットフォームには、開発者がパターンを定義するために使用可能な多くの組み込みの概念セットがあります。例:(I [like love] ~world_country)は以下に一致します。
    • I like India
    • I love traveling to Australia
    • I would like to visit an African country
  • Unordered:<<, >>:任意の順序で単語を見つけるために使用されます。例:<>は「Cancel my phone order」に一致し、「I have pending order for an iPhone X, can I cancel」にも一致します。
  • Start/End of Statement:<, >:例:(transfer fund >)は「I want to transfer funds」に一致しますが、「transfer funds today」には一致しません。
  • Quote:‘ –:単語を引用したり、正規表現ではない単語を使用したりした場合、システムはパターンで使用したものに制限されます。例:(like to transfer fund)これは「I would like to ransfer funds from my account」に一致しますがbut not」が「I really liked transfer funds process」には一致しません。

エンティティパターン

上記のように、エンティティを検出するために、開発者はエンティティパターンとNERトレーニングを組み合わせて使用することができます。エンティティパターンは、エンティティの有効な値を探す場所についてKoreに指示を行います。エンティティパターンは文中の様々な場所で見つかる可能性があり、Koreは有効な値を持つ最初のインスタンスから値を抽出します。上記のタスクパターンのガイドラインとは別に、以下のエンティティパターンのガイドラインに従ってください。

  • エンティティの予想される位置を示す位置のワイルドカード*を含めます(例:「(from * to)」、「(in * >)」)。それがない場合、パターンは無効になります。
  • パターン内でエンティティの位置の前後に存在すべき単語を使用します。位置のワイルドカードの後の単語は、有効なエンティティ値の検索範囲を区切るのに役立ちます。
  • 文の開始と終了の記号(「<」と「>」)を使用して、位置のワイルドカードを区切りますが、Botビルダーツールはエンティティ値を抽出するために文の境界を越えることはないため、これらは厳密には必要ありません(説明用を除く)。
  • フィールドパターンに他の位置のワイルドカードを使用しないようにします。すべてのフィールドパターンは同じように処理され、1つを除く他の位置のワイルドカードはすべて無視されます。
  • パターンでフィールド名またはその同義語を使用しないでください。エンティティパターンは、指定された単語の間に最大2つのワイルドカードの単語のみを考慮します。

以下は、「transfer funds」というインテントに対して「from」と「to」の口座番号を認識するエンティティパターンの例です。
上で定義したパターン演算子は、エンティティパターンにも適用することができます。

  • パターン:word1 *n – word1の出現後の最大n個の単語。
    エンティティToAccountのパターン – to *1
    ToAccount はユーザーの発話「transfer funds to ABC123」から取得したものであり、「transfer funds for ABC123」からではありません。
  • パターン:word1 * word2またはword1 word2 *n – ユーザーの発話からの複数のエンティティ。
    エンティティToAccountのパターン – to * fromおよびfrom to *1。
    エンティティFromAccountのパターン – from * toおよびto from *1
    ToAccountとFromAccountは「transfer funds from XYZ321 to ABC123」および「transfer funds to ABC123 from XYZ321」というユーザーの発話から取得したものであり、「transfer funds for ABC123 using XYZ321」からではありません
    注:エンティティに複数のパターンが入力されている場合は、どちらかのパターンが一致します。
  • パターン:[ word1 word2 ] *n – [ …]内で定義されている任意の1つの単語またはフレーズと一致します。
    エンティティToAccountのパターン – to *1
    エンティティFromAccountのパターン – [ using from ] *1
    ToAccountとFromAccountは「transfer funds from XYZ321 to ABC123」および「transfer funds to ABC123 using XYZ321」というユーザーの発話から取得したものであり、「transfer funds for ABC123 using XYZ321」からではありません
  • パターン:~concept *n – 概念を使用して構築されたパターン。
    エンティティToAccountのパターン – to *1
    エンティティFromAccount のパターン –
    ~from *1。ここで、fromは (using)(from)という概念です。
    ToAccountとFromAccountは「transfer funds from XYZ321 to ABC123」および「transfer funds to ABC123 using XYZ321」というユーザーの発話から取得したものであり、「transfer funds for ABC123 using XYZ321」からではありません

パターンを追加する方法の詳細については、パターンの管理を参照してください。

ネガティブパターン

ネガティブパターンは、ファンダメンタルミーニングまたは機械学習モデルによって検出されたインテントを排除するために使用することができます。

例えば、ユーザーが「I was trying to Book a Flight when I faced an issue」と言ったとします。 機械はインテントを「Book a Flight」として識別しますが、それはユーザーが求めていることではありません。このような場合、「was trying to *」をネガティブパターンとして定義することで、一致したインテントを無視させることができます。

同義語

インテント/エンティティを識別するために使用される単語を同じ意味で使用できる場合には、同義語を使用する必要があります。同義語は、インテントとエンティティの両方に対して定義することができます。

Guided Searchなど、それぞれのインテントには名前があります。ユーザーがこのタスクを開始するために入力しそうな同義語はたくさんあります。例えば、「browse products」、「Show me makeup」、「show me products」などです。

開発者としては、タスクの名前は2~3語に限定すべきです。次にそれぞれの単語の同義語を考えてみましょう。

例:

  • Browse – Find、Search
  • Product – Makeup、Goods、Kit

また、以下のようなスペルミスも考慮してください。

  • makeup – make up

同義語は、タスク名の一部として定義された単語に対してのみ定義されるのが理想的です。Botレベルで追加された同義語は、すべてのタスクに適用可能です。つまり、開発者がタスクAに単語の同義語を追加した場合、それらの同義語はタスク名に同じ単語が含まれている別のタスクにも使用することができます。例えば、「browse」という単語に対してGuided Searchと定義された同義語は、Keyword Searchにも使用することができます。同義語は、インテントを要求するユーザーに期待されるバリエーションの数を増やすために使用することができます。それらは既存のインテント名を代替的な言葉で補足しますが、すべてに一致するほど汎用的ではありません。 同義語は一方向にのみ作用するものであるため、foo=barはbar=fooを意味するものではないことにご注意ください。

同義語の一般的なガイドライン:

  • 正規化形式の単語を使用します(不定詞、単数名詞など)。
  • 単語と同義語には小文字を使用します。
  • 同義語のフレーズは5語以内のものにします。
  • 米国式スペルの単語を使用します(例:normalizeではなくnormalizeなど)。
  • 意味よりもインテントを使用します(つまり、動作のコンテキストが「find and display」という意味であれば、「get」は「show」の適切な同義語になります)。
  • 限定詞や代名詞に同義語を追加しないでください(the、a、my、thatなど)。
  • 2つの相反するタスクで一致する可能性のある同義語を使用しないでください。
  • () & / \ $ [ ] + *などの特殊文字を使用しないでください。
  • – , . ! ? ‘ “などの句読点を使用しないでください。
  • 複数の単語に同義語を割り当てないでください(例:this is wrong:wrong、bad)。
  • 数字に同義語を追加しないでください。
  • フレーズ形式を使用しないでください(例:「lookup」を同義語として使用せず、単に「look」を使用してください)。
  • 2文字以下の省略はしないでください。

同義語の操作

ユーザー入力とエンティティ(List of ValuesおよびLookupタイプの場合のみ)IDの同義語間の一致は、以下のいずれかの方法で発生する可能性があります。

  • 部分一致 – これは デフォルトの動作で、入力された1つ以上の単語が、与えられた同義語の1つ以上の単語と一致することを意味します。例えば、「debit card」というユーザーの発話は同義語のcredit cardと一致します。
  • 完全一致 – ここでは、与えられた同義語に対するすべての単語が入力に含まれている必要があります。例えば、「add-on credit card」は「credit card」と一致します。しかし、デビットカードの場合は「credit card」とは一致しません。完全一致をトリガーするには、同義語を二重引用符(”)で囲む必要があります。
  • 全文一致 – 入力全体が与えられた同義語と正確に一致する必要があります。 例えば、「credit card」はと一致しますが、「my credit card」はとは一致しません。同様に、「credit card」はとは一致しません。全文一致をトリガーするには、同義語を角括弧(<>)で囲む必要があります。
  • Canonical form match – これは、ユーザー入力が同義語またはその正規表現と一致するデフォルトの動作です。例えば、「check」は「checking」の正規表現であるため、「check my balance」は同義語である「checking account」と一致します。この動作を無効にするには、同義語の前に「checking」として単一のアポストロフィーを付けます。(バージョン7.1以降)
注:同義語を追加して、エンティティだけでなくインテントを識別することができます。エンティティの識別は、インテントが識別された後にのみトリガーされます。
同義語を追加する方法の詳細については、同義語の管理を参照してください。

概念

概念とは、単一の用語で識別されるグループと見なされる、関連する同義語の集まりです。

認められる概念の命名規則:

  • 接頭語として~が必要です。
  • 概念の名前で使用可能な文字は以下の通りです。
    • a〜zおよびA〜Z
    • 1~9
    • _(アンダースコア)
  • 少なくとも1つのアルファベットが〜の後に続く必要があります。
  • _(アンダースコア)で始まる、または終わることはできません。
  • 大文字と小文字を区別しません。つまり、~myConceptは~myconceptと同じです。

認められる概念の名前の例:

  • ~my_concept
  • ~Sample
  • ~test123
  • ~my_new_concept

Examples of Invalid concepts names:

  • ~_concept
  • ~concept_
  • ~a-concept
  • ~123test

詳細については、カスタム概念を参照してください。

標準応答

標準応答は、会話中の特定の状況に対応するためにプラットフォームが使用するテンプレートメッセージです。例としては、不明瞭なユーザー入力の解決、承認の要求、確認、一時停止や再開についての通知などがあります。標準応答は以下のように分類されます。

  • ステートメント
  • 挨拶
  • クエリ
  • エラーと警告
  • 質問と選択

プラットフォームには定型の応答が用意されていますが、これらのメッセージをカスタマイズしたり、バリエーションを追加したりすることを開発者にお勧めします。

会話を通してシームレスなエンドユーザー体験を提供するために、開発者はそれぞれの標準応答を見直し、Botの全体的なペルソナ/テーマに適しているかどうかを確認する必要があります。

標準応答は、プレーンテキストメッセージにより、あるいはJavaScriptからの生成により、サポートされているチャネルの動的メッセージおよびテンプレートを作成することができます。該当する場合、標準応答は、開発者がメッセージをカスタマイズするのに役立つコンテキストタグをサポートします。

例えば、ユーザーがBotにできることを要求した場合、Botは「Here are the tasks I can perform for you.」というメッセージで応答します。この例では、開発者はこのメッセージを変更し、適切な場所でタグを再度使用することを選択することができます。これらのタグは、実行時の値を含む会話の中で、実際のテキストコンテキストに置き換えられます。

ナレッジグラフ

実行可能なタスクについては、タスク名(ファンダメンタルミーニングモデルで使用)またはタスクに定義された機械学習の発話に基づいて、インテントが識別されます。このアプローチは、言語意味論や機械学習モデルから得られる統計的確率を用いて、タスクを他のタスクと区別して識別することができる場合に適しています。

FAQの場合、ほとんどのFAQは意味論的バリエーションの点で類似しているため、このアプローチはうまくいかない可能性があります。より適切な回答を見つけるためには、ドメインに関する追加のインテリジェンスが必要になります。

Kore.aiのナレッジグラフベースのモデルは、ユーザーインテント(この場合、最も適切な質問)を識別する際の主要なドメイン用語とそれらの関係の重要性を示すために必要な、追加のインテリジェンスを提供します。

以下の2つの例を使用して、ナレッジグラフの構築に必要なさまざまな設定について説明します。

例A 例B
以下の質問でトレーニングされたBotについて考えてみましょう。

  • A1: How to apply for a loan?
  • A2: What is the process to apply for insurance?
以下の質問でトレーニングされたBotについて考えてみましょう。

  • B1: Can I open a joint account?
  • B2: How do I add a joint account holder?
  • B3: How can I apply for a checkbook?
  • B4: How do I apply for a debit card?

純粋な機械学習と意味規則に基づいた代表的なモデルを用いたインテント認識では、以下のような課題があります。

  1. 機械学習に基づいたモデルから得られた結果は、ユーザーの発話に無関係な質問と一致する用語が多い場合、偽陽性の結果に繋がる傾向があります。
  2. Botがドメイン用語や関係性に基づいて理解する必要がある場合、そのモデルは失敗の結果に繋がります。例えば、「What is the process to apply for a loan?」というユーザーの発話は、A1の代わりに誤ってA2を優先的な一致として取得します。A2はA1よりもユーザーの発話と一致する用語が多いため、A2を優先的に取得します。
  3. 質問の一部が他の質問と関連して発言されているものの場合、このモデルは正しい応答を取得することができません。例A:「I have applied for a loan, can I get insurance」というユーザーの発話の場合、A1およびA2間のあいまいさが発生します。例B:「I have opened a joint account, can I have a debit card」というユーザーの発話の場合、B4よりもB1と誤って一致します。

Koreのナレッジグラフモデルにおいて、ルートレベルですべての質問を行うことは、用語の頻度と意味規則に基づくモデルを使用することと同じです。

主要なドメイン用語とそれらの関係性

重要な用語やそれらの関係を特定することは、オントロジーを構築する上で重要です。例Aを使用して、これらについて理解を深めましょう。A1とA2はどちらも申請手続きに関するもので、一方はローンの申請について、他方は保険の申請について話しています。そこで、オントロジーを作成する際に、「loan」、「insurance」という2つの子ノードを持つ、「application」という親ノードを作成することができます。その後、A1とA2をそれぞれ「loan」と「insurance」ノードの子ノードとして割り当てることができます。

ナレッジグラフの表示
例A


同様に、例Bの場合、グラフは以下のようになります。

グラフエンジンの機能

  • 同義語を使用したトレーニングのしやすさ:Kore.aiのナレッジグラフには、グラフノードに対して同義語を関連付ける機能があります。これは質問のバリエーションを把握するのに役立ちます。例:上記の例Aでは、ユーザーは「get」を「apply」の同義語にすることができます。
  • 代替質問によるより広範な適用:ナレッジグラフには、代替の質問を追加する機能があります。これにより、ユーザーが同様の質問をする様々な方法を把握することができます。上記の例Bでは、「How do I add a joint account holder」という質問に対して、「Can I add my wife as a joint account holder」という代替の質問を追加することができます。
  • 精度の向上:オントロジー主導の質問と応答は、偽陽性の可能性を減らします。例えば、「What is the process to apply for SSN」というユーザーの発話に対して、用語頻度に基づいたモデルは、誤ってA2を一致するものとして提案してしまいます。オントロジー主導のモデルには、このような偽陽性を防ぐ機能が備わっています。
  • クラスを使用したフレーズの重み付け:Kore.aiのグラフエンジンは、無関係な提案をフィルタリングするためのクラスの概念を導入しました。クラスの詳細な説明については、以下のセクションを参照してください。
  • 用語の重要性をマークする機能:Kore.aiのグラフエンジンには、オントロジー用語を重要なものとしてマークする機能があります。例えば、「How to apply for a loan」という質問において「loan」は重要な用語です。「loan」というキーワードがユーザーの発話内に存在しない場合、A1を取得することはほとんど意味がありません。一方で、用語頻度ベースのモデルでは、「How to apply for a」というユーザーの発話は、誤ってA1を取得してしまいます。
  • 関連するノードをグループ化する機能:グラフのサイズが大きくなると、グラフのノードの管理が難しくなる可能性があります。Botの開発者は、オントロジーエンジンの「オーガナイザーノード」を使用することで、ノードの下に関連するノードをグループ化することができます。

ナレッジグラフの特性

:特性はバージョン6.4以前のクラスに置き換わります。

特性を使用する際には、使用しすぎると偽陰性になる可能性があるため、正しく使用するようにしてください。クラスを使用する場合は、必ず以下のことを満たしてください。

  • クラスをうまく扱う
  • クラスが不適切に一般化されないようにする
  • すべてのFAQが、相互に専用のクラスにタグ付けされるようにする

クラスの仕組みの例を以下に示します。Requestというクラスを作成し、そこにリクエスト関連のフレーズを追加するとします。ユーザーが「I would like to get WebEx」と言い、「I would like to get」がその「Request」クラスに対してトレーニングされている場合、このFAQは、その単語がタグ付けされているナレッジグラフのパス全体でのみ考慮されます。これはポジティブなシナリオです。しかし、ユーザーが「Can you help with getting WebEx」と言い、そのRequestクラスに対して同様の発話がトレーニングされていなかった場合、「None」クラスにタグ付けされ、このFAQは「request」という単語が存在しないパスでのみ使用されます。これにより障害が発生します。

もう 1 つの可能性としては、ユーザーが「I want to request for help fixing WebEx」と言った場合、「I want to request」を含む発話でRequestクラスをトレーニングし、すべてのクラスで行われたトレーニングに基づいて、エンジンがこの機能(I want to requestを含むフレーズ)を一般化してRequestクラスにタグ付けする場合です。この場合、WebExのヘルプパスにRequestクラスが存在しないと、「help」 >「WebEx」に対する入力の識別に失敗します。

クラスが役立つのは、相互に専用のFAQセットがある場合です。例えば、Product issuesに関するFAQセットとProcess for buying a productに関するFAQセットがあったとします。
Process for buying a productに関するFAQ:

  1. How do I buy Microsoft Office online?
  2. What is the process for buying antivirus software

Product issuesに関するFAQ:

  1. I am having issues installing software
  2. How to resolve an issue with antivirus

ユーザーが「What is the process for fixing antivirus when it doesn’t work」と言った場合、エンジンはこの入力がA2とB2の両方に類似することに気付き、両方を提案として提示することがあります。Issuebuyと相互に独占的であり、この場合、buyに関連するFAQを提示することは意味がありません。その逆(buy関連の質問にIssueのFAQを一致させること)の方が、はるかに大きな問題になる可能性があります。これを解決するために、issue buy2つのタイプのクラスを作成します。すべての入力はbuyまたはissueのどちらかに分類され、適切な回答を見つけるために関連する質問のみが使用されます。

ファンダメンタルミーニング

 

 

Intent Naming Guidelines

Follow the below guidelines when naming your task (intent identifier):

  • Use an action verb, an object, and possibly a modifier (placed before or after the object). Typically, an intent name consists of 2 to 4 words.
  • Use less than 5 words to convey the purpose of the task.
  • Use the same verb in different tasks if the action is similar (For example, Show Issue/Show Report instead of Show Issue/Get Report).
  • Avoid single-word actions.
  • Avoid determiners (the, a, my, that, etc.)
  • Avoid digits but if you cannot, always use the numerical form.
  • Avoid Kore.ai platform terms such as task, alert, action, cancel, discard, amend, and webhook.
  • Avoid using a potential entity in an intent name (For example, Get Weather Today, where today is a potential entity).
  • Don’t use special characters such as () & / \ $ [ ] + *.
  • Don’t use punctuation such as – , . ! ? ‘ “.
  • Don’t use pronouns (i.e. Show Me All Issues)
  • Don’t use terms related to the bot name (For example, Create Asana Task).
  • Don’t use a word both as a verb and as a noun (For example, Update Issue/Get Updates).
  • For List of Items entity type, do not have the combination of following characters while defining synonyms – (), %, ° (degree symbol for degrees i.e. 30°C).

On-demand tasks (Actions, Dialog, Information tasks) must always contain an action verb, an object, and possibly a modifier (placed before or after the object). You must map almost all actions to the form how + what and complete the sentence the goal is to:

  • Do Something
  • Get Status
  • Send Detailed Report
  • Email Report Critical
  • Get 3 Day Forecast

Alerts must contain an object and possibly a modifier (placed before or after the object). Avoid using verbs in alert altogether. Avoid using the word alert in an alert name. Alerts must be mapped to the form what and complete the sentence alert me on:

  • Something
  • Status Updates
  • Critical Status Update
  • Changes

Patterns

While using synonyms is great for words used in the name, users may sometimes refer to a task using slang, metaphors, or other idiomatic expressions.

For example, a task name might be Get Current Weather, but the user inputs, What’s happening with today’s rain situation. In such cases, none of the words used in the task name are used, yet the input has the same meaning. To optimize the accuracy and recognition of the NLP interpreter for your bots, you can create patterns.

When the NLP interpreter matches a synonym to one task or field, and a pattern to a different task or field, the pattern match is prioritized and used for recognition over the synonym match.

Note: Patterns are evaluated in the order of their listing. So ensure when adding patterns, add in the order of most restrictive to least restrictive.
The following are some general guideline for creating intent patterns:
  • Use a minimum of 3 words.
  • Use words in their canonical forms (i.e. infinitive verbs, singular nouns).
  • Use lowercase both for words and their synonyms.
  • Use the US spelling of words (i.e. normalize instead of normalise).
  • Avoid using determiners and pronouns (the, a, my, that).
  • Avoid using digits.
  • Avoid using entity values in defining a task pattern.
  • Don’t use elision (i.e. what’s ).
  • Don’t use special characters such as () & / \ $ [ ] + *.
  • Don’t use punctuation such as – , . ! ? ‘ “.

For a quick guide towards the usage of patterns, refer to How to use Patterns?.

Pattern Operators

  • AND: ( X Y ): An ordered relationship of words in sequence. This is the default setting. i.e. when you specify a pattern as cancel order it is the same as (cancel order).
    For example, (Cancel Order) matches Cancel my phone order but doesn’t match I have a pending order for an iPhone X, can I cancel. Bot Builder tool uses patterns with increasing numbers of wildcards between words (up to 3 for an intent). So a pattern of Cancel Order can match:

    • cancel order
    • cancel my order
    • cancel that last order
    • cancel last weeks big order
  • OR: [X Y Z]: Any of these can be interchangeably used in the user utterance. For example, ([get make] me [food drink dessert]) will match any of the below utterances:
    • Get me food
    • Make me a drink
    • Get me a drink
    • Get me a dessert
    • Make me some quick food
  • NOT: !X: Words that should not appear in the user utterance for an intent match. For example, (!forecast) is marked as a pattern for intent named Get current weather and the bot supports another intent called Get 3-day weather forecast.
    • User utterance: Planning a trip to California get me the forecast
      • will not match Get current weather
      • will match Get 3-day weather forecast
        Note that the !word means not after this point. So (!forecast the weather) and (get the weather !forecast) are different. The utterance get the forecast for the weather matches the second but not the first.
  • Optional: {X}: For example, {phone} If the user utterance is Get me a phone number or get me a number the platform will treat it equally.
  • Enforce Phrase: X_Y: To enforce occurrence of the phrase as is in the user utterance, without any words in between. For example, transfer_funds. The utterance transfer funds or I want to transfer funds will match but not Can I transfer some funds.
  • Concepts: ~: Platform has a large set of inbuilt concepts that developers can use to define a pattern. For example, (I [like love] ~world_country) will match
    • I like India
    • I love traveling to Australia
    • I would like to visit an African country
  • Unordered: <<, >>: Used to find words in any order. For example, <<Cancel Order>> matches Cancel my phone order and also I have a pending order for an iPhone X, can I cancel
  • Start/End of Statement: <, >: For example, ( transfer fund > ) will match I want to transfer funds but will not match transfer funds today.
  • Quote: ‘ –: If you quote words or use words that are not in canonical form, the system will restrict itself to what you used in the pattern. For example, (like to transfer funds) This matches I would like to transfer funds from my account but not I really liked transfer funds process.

Entity Patterns

As above, to detect entities, developers can use a combination of entity patterns and NER training. Entity patterns guide Kore as to where to look for a valid value for the entity. It is possible for an entity pattern to be found in several places in a sentence and Kore will extract the value from the first instance that has a valid value. Apart from the task pattern guidelines above, follow the below guideline for entity patterns:

  • Include the positional wildcard * that indicates the expected position of the entity ( i.e. (from * to), (in * >)); without it the pattern is invalid.
  • Use words that should be present in the pattern before and after the position of the entity. Words after the positional wildcard help to delimit the search range for a valid entity value.
  • Use start and end of sentence symbols (< and >) to separate the positional wildcard, but these are not strictly necessary because the Bot Builder tool does not cross a sentence boundary to extract an entity value (except for a Description).
  • Don’t use other positional wildcards in your field pattern. All field patterns are processed in the same way and all other positional wildcards except one are ignored.
  • Don’t use field names or their synonyms in patterns entity patterns. Only consider up to two wildcard words between the specified words.

Examples

Following are some examples of entity patterns to recognize from and to account number for the intent transfer funds.
Pattern operators defined above can be applied to entity patterns also.

  • Pattern: word1 *n – up to n words after the occurrence of word1
    pattern for entity ToAccount –  to *1
    ToAccount captured from user utterance transfer funds to ABC123 but not from transfer funds for ABC123.
  • Pattern: word1 * word2 or word1 word2 *n – multiple entities from a user utterance.
    patterns for entity ToAccount –  to * from, and from to *1.
    patterns for entity FromAccount –  from * to and to from *1.
    ToAccount & FromAccount captured from user utterance transfer funds from XYZ321 to ABC123 and transfer funds to ABC123 from XYZ321 but not from transfer funds for ABC123 using XYZ321.
    Note: when multiple patterns are entered for an entity, a match of either one will be taken.
  • Pattern: [ word1 word2 ] *n – match against any one word or phrase as defined within […].
    pattern for entity ToAccount –  to *1.
    pattern for entity FromAccount –  [ using from ] *1.
    ToAccount & FromAccount captured from user utterance transfer funds from XYZ321 to ABC123 and transfer funds to ABC123 using XYZ321 but not from transfer funds for ABC123 using XYZ321.
  • Pattern: ~concept *n – pattern built using concepts.
    pattern for entity ToAccount –  to *1.
    the pattern for entity FromAccount –  ~from *1 wherefrom is a concept as (using) (from)
    ToAccount & FromAccount captured from user utterance transfer funds from XYZ321 to ABC123 and transfer funds to ABC123 using XYZ321 but not from transfer funds for ABC123 using XYZ321.

For more information on how to add patterns, refer to Managing Patterns.

Negative Patterns

Negative patterns are used to eliminate intents detected by the Fundamental Meaning or Machine Learning models.

For example, a user says I was trying to Book a Flight when I faced an issue. Though the machine identifies the intent as Book a Flight, that is not what the user wants to do. In such a case, defining was trying to * as a negative pattern, would ensure that the matched intent is ignored.

Synonyms

Synonyms must be used when the words used to identify an intent/entity are used interchangeably. Synonyms are defined for both intents and entities.

Each intent has a name. For example, if your intent name is Guided Search. There are many synonyms that a user might enter to start this task, such as browse products, “Show me makeup, or show me products.

As a developer, you must limit the name of a task to only two or three words. And then consider synonyms for each of those words.

Example

  • Browse – Find, Search
  • Product – Makeup, Goods, Kit

Also consider misspellings, such as:

  • makeup – make up

Synonyms must be ideally defined only for words defined as part of the task name. The synonyms added at the bot level are applicable for all the tasks, i.e. when a developer adds a synonym for a word in Task A, those synonyms are also used for any other tasks with the same words in the task name. For example, synonyms defined for the word browse in the Guided Search are also used for the Keyword Search. Synonyms can (and should) be used to increase the number of variations that we expect from a user requesting an intent. They supplement existing intent name with alternative wording, while not being so generic as to match everything. Remember that synonyms are unidirectional so foo=bar does not mean bar=foo.

The general guideline for Synonyms:

  • Use words in their canonical forms (i.e. infinitive verbs, singular nouns).
  • Use lowercase both for words and their synonyms.
  • Keep synonym phrases to less than 5 words.
  • Use the US spelling of words (i .e. normalize instead of normalize).
  • Use intent over meaning (i .e. get is a good synonym for show if the context of the action means find and display).
  • Don’t add synonyms to determiners or pronouns (the, a, my, that, etc.).
  • Don’t use a synonym that could match in two conflicting tasks.
  • Don’t use special characters such as () & / \ $ [ ] + *.
  • Don’t use punctuation such as – , . ! ? ‘ “.
  • Don’t assign synonyms to multiple words (For example, this is wrong: wrong, bad).
  • Don’t add synonyms to digits.
  • Don’t use the phrasal form (i.e. don’t use lookup as a synonym; simply use look).
  • Don’t abbreviate to less than 2 letters.

Synonym Operations

A match between the user input and synonym for entity (only for List of Values and Lookup types) identification can occur in one of the following ways:

  • Partial Match – This is the default behavior whereby one or more words in the input must match one or more words for a given synonym. For example, the user utterance debit card will match the synonym credit card.
  • Exact Match – Here the input must contain all the words for a given synonym. For example, an add-on credit card will match a credit card. But debit cards will not match credit cards. To trigger an exact match, the synonym must be enclosed within double-quotes.
  • Full Match – The entire input must exactly match a given synonym word. For example, a credit card should match <credit card> but my credit card should NOT match <credit card>. Similarly, a credit card should not match <my credit card>. To trigger an exact match, the synonym must be enclosed within angular brackets.
  • Canonical Form Match – This is the default behavior wherein the user input is matched with the synonym or its canonical form. For example, check my balance will match with the synonym checking account since the check is the canonical form of checking. To disable this behavior, prefix the synonym with a single apostrophe as checking. (post v7.1)
Note: Synonyms can be added to identify intents as well as entities. Entity identification is triggered only after an Intent is identified.
For more information on how to add synonyms, refer to Managing Synonyms.

Concepts

Concepts are clusters of related and synonymous terms that you want to be considered as a group identified by a single term.

Allowed concept naming conventions:

  • Must have ~ as a prefix
  • Allowed characters in concept name are:
    • a to z and A-Z
    • 1 to 9
    • _ (underscore)
  • At least one alphabet must follow the ~.
  • Must not start or end with a _ (underscore).
  • These are case insensitive. i.e ~myConcept is the same as ~myconcept

Examples for allowed concept names:

  • ~my_concept
  • ~Sample
  • ~test123
  • ~my_new_concept

Examples of invalid concepts names:

  • ~_concept
  • ~concept_
  • ~a-concept
  • ~123test

You can also define custom concepts using emojis.

For more information, refer to Custom Concepts.

Standard Responses

Standard Responses are template messages that the platform uses to respond to specific situations during a conversation. Examples of these situations include resolution of ambiguous user inputs, requisition for authorization, obtaining confirmations, informing about interruptions and resumptions, and more. Standard Responses are categorized into the following:

  • Statements
  • Greetings
  • Queries
  • Errors & Warning
  • Questions and Choices

While the platform does come with canned responses, developers are encouraged to customize these messages as well as additional variations.

To provide a seamless end-user experience across the conversational journey, developers may have to review each of the Standard Responses to ensure that they fit the overall persona/theme of the bot.

Standard Responses can be plain text messages or can be generated through JavaScript to compose dynamic messages and templates for supported channels. Where applicable, Standard Responses support contextual tags that help the developer to customize the messages.

For example, when a user requests what a bot can do, the bot responds with a message Here are the tasks I can perform for you. <list-of-tasks>. In this example, the developer may choose to modify this message and reuse the tag <list-of-tasks>where appropriate. These tags are replaced with the actual text context during the conversation with run-time values.

Knowledge Graph

For executable tasks, the intent is identified based on either the task name (used in the Fundamental Meaning model) or machine learning utterances defined for a task. This approach is appropriate when a task can be distinctively identified from other tasks, using language semantics, and statistical probabilities derived from the machine learning model.

In the case of FAQs, this approach may not fare well as most of the FAQs are similar to each other in terms of semantic variation, and will require additional intelligence about the domain to find a more appropriate answer.

Kore.ai’s Knowledge Graph-based model provides that additional intelligence required to represent the importance of key domain terms and their relationships in identifying the user’s intent (in this case the most appropriate question).

We will use the following two examples to explain the different configurations required to build a Knowledge graph.

Example A Example B

Consider a bot trained with the following questions:

  • A1: How to apply for a loan?
  • A2: What is the process to apply for insurance?

Consider a bot trained with the following questions:

  • B1: Can I open a joint account?
  • B2: How do I add a joint account holder?
  • B3: How can I apply for a checkbook?
  • B4: How do I apply for a debit card?

The following are a few challenges with intent recognition using a typical model based on pure machine learning and semantic rules:

  1. Results obtained from machine learning-based models have a tendency to produce a false positive result if the user utterance has more matching terms with the irrelevant question.
  2. The model fails when the bot needs to comprehend based on domain terms and relationships. For example, the user utterance What is the process to apply for a loan? will incorrectly fetch A2 as a preferred match instead of A1. As A2 has more terms matching with user utterance than A1.
  3. This model fails to fetch the correct response if part of a question is stated in a connection with another question. Example, A: the user utterance I have applied for a loan, can I get insurance results in the ambiguity between A1 & A2. Example B: User utterance I have opened a joint account, can I have a debit card will incorrectly match B1 over B4.

In the Kore knowledge graph model, having all the questions at the root level is equivalent to using a model based on term frequency and semantic rules.

Key Domain Terms and their Relationship

Identifying key terms and their relationships is an important aspect of building ontology. Let us understand this using our sample Example A. Both A1 and A2 are about an application procedure, one talks about applying for a loan while the other talks about applying for insurance. So while creating an ontology, we can create a parent node apply with two child nodes as loan and insurance. Then A1 and A2 can be assigned as child nodes of loan and insurance node respectively.

Representation of Knowledge Graph
Example A


Similarly, in the case of Example B, the graph will be as below

Capabilities of a Graph Engine

  • Ease of Training using Synonyms: Kore.ai’s Knowledge Graph has a provision to associate synonyms against a graph node. This helps capture the variation in a question. For example, In Example A above, a user can put get as a synonym to apply.
  • Better Coverage with Alternate Questions: Knowledge Graph has a provision to add alternate questions. This helps us to capture the various ways a user might ask the same question. In Example B above, for the question How do I add a joint account holder we can add an alternate question as Can I add my wife as a joint account holder.
  • Improved Accuracy: Ontology-driven question-answers reduce the possibility of false positives. For example, for the user utterance What is the process to apply for SSN? a term frequency-based model will incorrectly suggest A2 as a match. An ontology-driven model has the capability to prevent such false positives.
  • Weighing Phrases using Classes: Kore.ai’s graph engine has introduced a concept of classes for filtering out irrelevant suggestions. See the below section on classes for a detailed explanation
  • Ability to Mark Term Importance: Kore.ai’s graph engine has a provision to mark an ontology term is important. For example, in the question, How to apply for a loan, loan is an important term. If a loan keyword is not present in the user utterance, then it makes little sense to fetch A1. Whereas in term frequency-based model a user utterance How to apply for a will incorrectly fetch A1.
  • Ability to Group Relevant Nodes: As the graph grows in size, managing graph nodes can become a challenging task. Using the organizer node construct of the ontology engine, the bot developer can group relevant nodes under a node.

Knowledge Graph Traits

Note: Traits replace Classes from v6.4 and before.

When using trait ensure you use it judicially as over usage may result in false negatives. When using classes ensure:

  • Good coverage of classes.
  • Classes should not get generalized improperly.
  • All the FAQs get tagged to mutually exclusive classes.

Following is the example of how classes work: Let’s say we create a class called Request and add request related phrases to it. If the user says I would like to get WebEx and I would like to get is trained for the Request class, this FAQ is only considered across the Knowledge Graph paths where the word request is tagged with. This is a positive scenario. But if the user says Can you help with getting WebEx?, and we did not have similar utterances trained for the Request class, it gets tagged with None class, and this FAQ is only used with the paths where the word request isn’t present. This results in a failure.

Another possibility is that if the user says I want to request help fixing WebEx and we have trained the Request class with some utterances having I want to request, and based on the training provided across all classes, the engine may generalize and tag this feature (phrase containingIwant to request ) to the Request class. In this case, if the Request class is not present in the help path for WebEx, this results in failure of identifying the input against help > WebEx.

The cases where classes are useful is when we have a mutually exclusive set of FAQs. For example, if we have a set of FAQs for Product issues and also a set of FAQs for the Process of buying a product.
FAQs for Process for buying a product:

  1. How do I buy Microsoft Office online?
  2. What is the process for buying anti-virus software?

FAQs for Product Issues:

  1. I am having issues installing software
  2. How to resolve an issue with antivirus

When a user says What is the process for fixing antivirus when it doesn’t work?, the engine may find that this input is similar to both A2 and B2, and may present both of them as suggestions. We know that Issue is mutually exclusive to buy, and it does not make sense present buy related FAQs at all, in this case. The opposite (matching Issue FAQs for buy related question) may be a much bigger problem. To solve this, we will create two classes, one for type issues and another for buy. Every input is classified into either buy or issue and only the relevant questions will be used in finding an appropriate answer.

Previous
Fundamental Meaning