Dialogflow 인텐트에서 학습 문구 품질 평가

이 가이드에서는 Dialogflow 에이전트의 인텐트에 제공된 학습 문구의 품질을 분석하고 평가하는 방법을 보여줍니다. 이 분석의 목적은 에이전트가 다른 인텐트에 제공되거나 다른 인텐트와의 관련성이 더 큰 인텐트와 무관한 문구와 혼동하지 않도록 하는 것입니다.

여기서는 TensorFlow Hub(tf.Hub) Universal Sentence Encoder 모듈을 사용하여 학습 문구의 시맨틱스 임베딩을 생성하는 방법을 사용합니다. 그런 다음 동일 인텐트 내 임베딩과 다른 인텐트 내 임베딩의 유사성에 기초하여 응집도 및 분리도 측정값을 계산합니다. 이 가이드에서는 제공된 인텐트와는 다른 인텐트에 (임베딩 공간에서) 더 가까운 '혼동을 일으키는' 학습 문구도 식별합니다.

이 가이드에 사용할 코드는 이 Colab 노트북에서 찾을 수 있습니다. 이 문서에서는 Dialogflow에 대한 기본적 배경 지식이 있다고 가정합니다. Dialogflow에 대한 자세한 내용은 여러 부분으로 구성된 이 가이드에서 Google Cloud에서 Dialogflow Enterprise 버전을 사용하여 챗봇을 빌드, 보호, 확장하는 방법을 참조하세요.

소개

Dialogflow를 통해 자연어 입력을 처리하고 이해하는 강력한 자연어 이해(NLU) 엔진을 사용하여 제품 및 서비스 위에 대화 인터페이스를 구축할 수 있습니다. Dialogflow 사용 사례는 다음과 같습니다.

  • 항공사, 영화관 등의 예약 봇 빌드
  • 패스트푸드 배달 주문 시스템 단순화
  • 반자동 콜 센터를 통한 효율적 고객 서비스 실현

복잡한 대화 흐름을 구현하여 사용자 발화를 처리할 수도 있지만 기본적으로 Dialogflow는 다음 단계를 수행합니다.

  1. 사용자가 "지난 달 내 청구 총액은 얼마지?" 같은 질문을 합니다.
  2. 에이전트는 입력을 파싱하여 bill_value_inquiry와 같은 인텐트에 일치시킵니다.
  3. 에이전트는 또 '지난 달' 같은 항목 정보를 추출합니다.
  4. 추출된 항목의 인텐트가 있으므로 에이전트는 fulfillment를 호출하여 사용자의 요청에 응답합니다.

다음 표에서는 Dialogflow 플랫폼의 주요 개념을 설명합니다.

용어 설명
에이전트 에이전트는 시스템에 통합할 수 있는 NLU 모듈로 가장 잘 설명할 수 있습니다. 에이전트는 사용자의 입력이 에이전트에 있는 인텐트와 일치할 때 텍스트 또는 사용자의 음성 요청을 실행 가능한 데이터로 변환합니다.
인텐트 대화에서 인텐트는 사용자 입력을 응답에 매핑합니다. 각 인텐트에서 인텐트를 트리거할 수 있는 사용자 발화의 예(학습 문구), 각 발화에서 추출할 대상, 응답 방법을 정의합니다.
항목 인텐트를 통해 에이전트가 특정 사용자 입력의 동기를 이해할 수 있는 경우, 항목은 사용자가 언급하는 구체적인 정보 조각을 포착하는 데 사용됩니다. 예를 들어 주소, 제품명 또는 단위량을 사용하여 사용자의 요청을 수행할 수 있습니다.
fulfillment fulfillment를 통해 에이전트가 추출한 항목 정보를 사용하여 인텐트별로 백엔드에서 동적 응답을 생성하거나 동작을 트리거할 수 있습니다.

Dialogflow 개념에 대한 자세한 내용은 Dialogflow 문서를 참조하세요.

인텐트는 사용자 요청을 올바른 비즈니스 로직에 연결해 처리하기 때문에 Dialogflow 시스템에 필수적입니다. 예를 들어 통신 서비스 제공업체의 Dialogflow 시스템에는 bill_value_inquiry, pay_bill, upgrade_contract, cancel_contract, add_service 같은 인텐트가 있을 수 있습니다. 하지만 사용자 발화(텍스트 또는 음성)를 올바른 인텐트에 일치시키기 위해서는 여러 개의 관련 학습 문구로 인텐트를 학습시켜야 합니다. 예를 들어 날씨 조회 인텐트의 경우 다음과 같은 학습 문구를 사용할 수 있습니다.

  • '지금 날씨가 어때?'
  • '내일 카이로 기온은 몇 도야?'
  • '다음 주에 취리히에 가는데 우산을 가져가야 할까?'

시스템에 여러 인텐트를 만들 경우 인텐트에 제공하는 일부 문구에 혼동 또는 오해의 소지가 있을 수 있습니다. 예를 들어 다른 인텐트와 관련성이 더 큰 문구가 잘못된 인텐트를 학습시키는 데 사용될 수 있습니다. 예를 들어 영업 조직의 정보 소스 역할을 하는 Dialogflow 에이전트가 있다고 가정해 보겠습니다. 이때 연락처 가져오기를 위한 인텐트가 2개(하나는 내부 계정팀용, 다른 하나는 고객용) 있다면 get_internal_contactsget_external_contacts를 호출할 수 있습니다. 각 인텐트의 일반적인 학습 문구는 다음과 같습니다.

  • get_internal_contacts: '고객 X의 연락 담당자가 누구지?'
  • get_external_contacts: '고객 X에게 어떻게 연락하지?'

사용자가 외부 연락처를 찾으면서 '고객 X의 연락처'와 같은 요청을 제공했다고 가정해 보겠습니다. 문구가 두 가지 인텐트에 모두 일치할 수 있기 때문에 이 요청은 Dialogflow 에이전트에 혼동을 일으킬 수 있습니다. 잘못된 인텐트에 일치하는 경우, 사용자가 요청을 다시 명확히 표현해야 합니다. 이런 번거로움과 시간 낭비는 사용자 경험에 나쁜 영향을 미칩니다.

따라서 동일한 인텐트 내의 문구들은 유사도를 높이고 서로 다른 인텐트의 문구들의 유사도는 낮추는 것이 좋습니다. 가이드의 나머지 부분에서는 각 인텐트에 제공된 학습 문구의 품질을 평가하고 잠재적으로 혼동을 일으킬 수 있는 학습 문구를 식별하는 방법을 설명합니다.

접근 방법

이 가이드에서 사용하는 접근 방법은 두 문구 간 유사도를 계산하고 나아가 모든 학습 문구의 유사도 행렬을 계산하는 것입니다. 이 행렬이 있으면 다음을 계산할 수 있습니다.

  • 응집도: 동일한 인텐트에 있는 각 문구 쌍의 평균 유사도 값입니다. 이 값은 인텐트마다 계산됩니다. 인텐트 응집도 값이 높을수록 좋은 인텐트 학습 문구입니다.
  • 분리도: 2개의 인텐트가 있다고 가정할 때 두 인텐트에 있는 각 학습 문구 쌍 간의 평균 거리입니다.
  • 혼동을 일으키는 문구: 다른 인텐트의 학습 문구와 매우 유사한 학습 문구입니다.

두 문구의 유사성 값을 계산하려면 문구의 시맨틱스를 나타내는 실제 값 특징 벡터로 각 문구를 변환해야 합니다(임베딩). 이 작업에 유용하도록 이 가이드에서는 TensorFlow Hub(tf.Hub)를 사용합니다. TensorFlow Hub는 머신러닝 모델의 재사용 가능한 모듈을 게시, 검색, 소비하는 데 사용되는 라이브러리입니다. 이러한 모듈은 선행 학습된 모듈이거나 텍스트, 이미지 등에서 추출한 임베딩일 수 있습니다. 사용 가능한 텍스트 임베딩을 찾아볼 수 있습니다. 이 가이드에서 사용하는 Universal Sentence Encoder(v2) 모듈은 텍스트 분류, 시맨틱스 유사성, 클러스터링, 기타 자연어 작업에 사용할 수 있는 512차원 벡터로 텍스트를 인코딩하는 데 사용됩니다.

이 가이드에서는 코사인 유사도를 2개의 임베딩 벡터 간 근접도 측정항목으로 사용합니다. 2개의 실제 값 벡터(이 예에서는 2개의 학습 문구에서 추출한 2개의 임베딩 벡터)가 주어질 때 코사인 유사도는 다음 공식을 사용하여 두 벡터 간 각도의 코사인을 계산합니다.

$$ \cos(A,B) = \frac{\sum_{i=1}^{n}A_iB_i}{\sqrt{\sum_{i=1}^{n}{A_i^2}}\sqrt{\sum_{i=1}^{n}{B_i^2}}} $$

이 공식에서 n은 벡터에 있는 요소의 수입니다. 벡터 간 각도가 작을수록 이 각도의 코사인 값이 커지며, 유사도가 높음을 나타냅니다. 두 벡터 간 코사인 유사도 값은 항상 0~1입니다.

그림 1은 이 접근 방식의 개요를 보여줍니다.

인텐트 응집도 및 분리도 평가 개요

그림 1: 인텐트 응집도 및 분리도 평가 개요

이 그림은 다음과 같은 순서를 보여줍니다.

  1. 인텐트와 인텐트의 학습 문구를 가져옵니다.
  2. tf.Hub Universal Sentence Encoder 선행 학습 모듈을 사용하여 학습 문구의 임베딩을 생성합니다.
  3. 생성된 임베딩의 시각화를 2차원 공간에 만듭니다.
  4. 서로 다른 인텐트에 있는 모든 학습 문구의 쌍 유사도 값이 포함된 임베딩 코사인 유사도 행렬을 계산합니다.
  5. 응집도 및 분리도 행렬을 계산합니다.
  6. 혼동을 일으키는 문구를 식별합니다.

목표

  • (선택사항) Dialogflow 에이전트를 만듭니다.
  • 학습 문구와 함께 인텐트를 가져옵니다.
  • 인텐트 품질 평가를 위해 Colab 노트북을 실행합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

  • Dialogflow: Standard 버전은 무료이고 Enterprise 버전은 유료 엔터프라이즈 지원을 제공합니다. Dialogflow 에이전트를 만들 때 사용할 버전을 선택할 수 있습니다. 계정에는 두 가지 버전의 에이전트가 포함될 수 있습니다. 자세한 내용은 Dialogflow 가격 책정 페이지를 참조하세요.

시작하기 전에

  1. Google 계정으로 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Dialogflow API를 사용 설정합니다.

    API 사용 설정

  5. Dialogflow API를 호출할 서비스 계정을 만듭니다.

    서비스 계정 만들기
  6. 서비스 계정 세부정보 대화상자에 다음 스크린샷과 같이 계정 이름과 설명을 입력한 다음 만들기를 클릭합니다.

    서비스 계정 세부정보 대화상자 스크린샷
  7. 역할을 Dialogflow API Client로 설정하고 계속을 클릭합니다.

    서비스 계정 권한 대화상자 스크린샷

Colab 메모장에서 가이드 완료

다음 섹션에서는 접근 방법 섹션에서 설명한 단계를 통해 응집도 및 분리도 측정항목을 계산하고 혼동을 일으키는 문구를 식별합니다.

Colab 노트북 시작하기

  1. Colab 노트북(https://colab.research.google.com/drive/...)으로 이동합니다.

  2. Google 드라이브에 로컬 복사본을 만듭니다.

    Google 드라이브에 메모장 복사

  3. Cloud Shell에서 필요한 라이브러리와 모듈을 가져오기 전에 가이드 나머지 부분에 필요한 Python 라이브러리를 설치합니다.

    !pip install --quiet --upgrade tensorflow dialogflow scipy tensorflow-hub seaborn
    
  4. Google Cloud PROJECT_ID시작하기 전에 섹션에서 만든 SERVICE_ACCOUNT_EMAIL을 설정합니다.

    Google Cloud PROJECT_ID 및 SERVICE_ACCOUNT_EMAIL 설정

  5. 세션을 인증하여 서비스 계정의 키를 만듭니다.

    auth.authenticate_user()
    !gcloud config set project {PROJECT_ID}
    !gcloud iam service-accounts keys create sa-key.json \
        --iam-account={SERVICE_ACCOUNT_EMAIL} --project={PROJECT_ID}
    

    이 명령어를 실행하면 링크가 표시됩니다.

  6. 링크를 따라가 사용자 계정을 인증합니다.

  7. 웹페이지에서 인증 코드를 복사해 메모장의 인증 코드 입력 필드에 붙여넣습니다.

    메모장의 **인증 코드 입력** 필드

Dialogflow 에이전트 설정

이 가이드에서 사용할 Dialogflow 에이전트가 이미 있다면 이 단계를 건너뛰어도 됩니다. 그러나 에이전트가 없거나 새 에이전트를 설정하려면 내보낸 Dialogflow 에이전트(intents-healthcheck)의 콘텐츠가 포함된 zip 파일을 다운로드하세요. 이 에이전트를 다음과 같이 Dialogflow 계정으로 가져옵니다.

  1. 가져온 에이전트의 zip 파일을 다운로드합니다.

    gsutil cp gs://dialogflow-intent-health-check/intent-quality-demo.zip .
    
  2. https://dialogflow.com/으로 이동합니다.

  3. 오른쪽 상단의 콘솔로 이동 버튼을 클릭합니다.

  4. 왼쪽 메뉴에서 새 에이전트 만들기를 클릭합니다.

    새 에이전트 만들기

  5. 에이전트 이름(intents-healthcheck)을 입력합니다.

  6. Google 프로젝트 목록에서 Google Cloud 프로젝트를 선택합니다.

    • Google Cloud 프로젝트에는 Dialogflow 에이전트를 하나만 포함할 수 있습니다. 따라서 목록에 Google Cloud 프로젝트가 없다면 에이전트가 이미 프로젝트에 연결된 것입니다.
    • 새 프로젝트 만들기를 선택하면 Dialogflow는 에이전트와 이름이 같은 Google Cloud 프로젝트를 만듭니다.
  7. 만들기를 클릭합니다.

    에이전트에 대한 정보 입력

  8. 왼쪽 메뉴에서 새 에이전트를 선택한 후 설정 아이콘을 클릭합니다. 그런 다음 페이지 중간에 있는 메뉴에서 내보내기 및 가져오기를 선택합니다.

    내보내기 및 가져오기 대화상자

  9. zip 파일에서 복원을 클릭합니다.

    1. 1단계에서 다운로드한 agent-backup.zip 파일을 선택합니다.
    2. 양식 하단의 텍스트 상자에 RESTORE를 입력하여 확인합니다.
    3. 복원을 클릭합니다.

    zip 파일에서 에이전트 복원

    에이전트가 복원되면 Dialogflow는 5개의 인텐트를 만듭니다.

  10. 왼쪽 메뉴에서 인텐트를 선택하여 가져온 인텐트를 확인합니다. 다음과 같은 인텐트를 찾습니다.

    가져온 인텐트 확인

가이드 나머지 부분에서는 복원된 이 에이전트를 사용합니다.

Colab 노트북의 코드 살펴보기

다음 섹션에서는 노트북을 실행할 때 노트북의 코드가 수행하는 작업을 설명합니다.

인텐트 가져오기

다음 코드는 fetch_intents_training_phrases 메서드를 사용하여 Dialogflow 에이전트에서 인텐트와 학습 문구를 가져옵니다. 이 메서드는 사전을 반환하며, 여기서 키는 Dialogflow 에이전트에 있는 이름이 지정된 인텐트이고 각 값은 각 항목의 학습 문구 목록입니다. 코드에서 project는 에이전트가 속한 프로젝트를 참조하고 service_account_file은 이전에 만든 파일을 참조합니다.

def get_intents(service_account_file, project):

    dialogflow_entity_client =  dialogflow.EntityTypesClient.from_service_account_file(service_account_file)
    parent = dialogflow_entity_client.project_agent_path(project)
    entities = list(dialogflow_entity_client.list_entity_types(parent))

    dialogflow_intents_client = dialogflow.IntentsClient.from_service_account_file(service_account_file)
    parent = dialogflow_intents_client.project_agent_path(project)
    intents = list(dialogflow_intents_client.list_intents(
        parent=parent,
        intent_view=dialogflow.enums.IntentView.INTENT_VIEW_FULL))

    entities_name_to_value = {}
    for intent in intents:
        entities_used = {entity.display_name
            for entity in intent.parameters}

        for entity in entities:
            if entity.display_name in entities_used \
                    and entity.display_name not in entities_name_to_value:
                entities_name_to_value[entity.display_name] = np.random.choice(
                    np.random.choice(entity.entities).synonyms, replace=False)

    intent_to_training_phrases = defaultdict(list)
    for intent in intents:
        for training_phrase in intent.training_phrases:
            parts = [entities_name_to_value[part.alias] if part.entity_type else part.text
                for part in training_phrase.parts]
            intent_to_training_phrases[intent.display_name].append("".join(parts))
        # Remove intents with no training phrases
        if not intent_to_training_phrases[intent.display_name]:
            del intent_to_training_phrases[intent.display_name]
    return intent_to_training_phrases
 

다음 코드는 검색된 인텐트를 확인합니다.

intent_training_phrases = fetch_intents_training_phrases("sa-key.json", project_id)
for intent in intent_training_phrases:
    print("{}:{}".format(intent, len(intent_training_phrases[intent])))

fetch_intents_training_phrases 메서드는 다음 목록을 반환합니다. 이 코드 스니펫은 데모 intents-healthcheck 에이전트의 인텐트와 각 인텐트에서 사용할 수 있는 학습 문구 개수를 차례로 보여줍니다.

start_conversation:4
close_conversation:5
get_internal_contacts:17
request_help:7
get_external_contacts:6

학습 문구의 임베딩 생성

다음 코드는 tf.Hub Universal Sentence Encoder 선행 학습된 모듈을 다운로드합니다.

embed_module = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")

첫 사용 후 모듈은 로컬로 캐시됩니다.

다음 코드는 문장의 목록을 받아 tf.Hub 모듈을 기반으로 임베딩 목록을 반환하는 메서드를 구현합니다.

def make_embeddings_fn():
    placeholder = tf.placeholder(dtype=tf.string)
    embed = embed_module(placeholder)
    session = tf.Session()
    session.run([tf.global_variables_initializer(), tf.tables_initializer()])
    def _embeddings_fn(sentences):
        computed_embeddings = session.run(
            embed, feed_dict={placeholder: sentences})
        return computed_embeddings
    return _embeddings_fn

generate_embeddings = make_embeddings_fn()

이 메서드로 tf.Session이 생성되고 임베딩 모듈은 메서드가 호출될 때마다 로드되지 않고 한 번만 로드됩니다.

다음 코드는 인텐트의 학습 문구 임베딩을 생성합니다.

{
    intent: {
        training_phrase': [embedding_array]
    }
}

training_phrases_with_embeddings = defaultdict(list)
for intent_name, training_phrases_list in intent_training_phrases.items():
    computed_embeddings = generate_embeddings(training_phrases_list)
    training_phrases_with_embeddings[intent_name] = dict(zip(training_phrases_list, computed_embeddings))

이 코드 스니펫은 training_phrases_with_embeddings 중첩 사전을 만듭니다.

다음 코드는 생성된 임베딩을 확인합니다.

training_phrases_with_embeddings = defaultdict(list)
for intent_name, training_phrases_list in intent_training_phrases.items():
    computed_embeddings = generate_embeddings(training_phrases_list)
    training_phrases_with_embeddings[intent_name] = dict(zip(training_phrases_list, computed_embeddings))
 

다음 코드 스니펫은 start_conversation 인텐트의 각 학습 문구와 함께 각 문구의 임베딩 벡터의 첫 다섯 개 요소를 보여줍니다. Universal Sentence Encoder는 각 학습 문구의 512차원 임베딩 벡터를 생성합니다.

Ciao!:[-0.03649221  0.02498418 -0.03456857  0.02827227  0.00471277]
Howdy!:[-0.02732556 -0.00821852 -0.00794602  0.06356855 -0.03726532]
Hello!:[-0.0255452   0.00690543 -0.00611844  0.05633081 -0.0142823 ]
Hi!:[-0.03227544 -0.00985429 -0.01329378  0.06012927 -0.03646606]

2차원 공간에서 임베딩 시각화

다음 코드는 주성분 분석을 통해 주성분을 계산하여 임베딩의 차원을 512에서 2로 줄입니다.

from sklearn.decomposition import PCA
embedding_vectors = None

for intent in training_phrases_with_embeddings:
    embeddings = list(training_phrases_with_embeddings[intent].values())
    if embedding_vectors is None:
        embedding_vectors = embeddings
    else:
        embedding_vectors = np.concatenate((embedding_vectors, embeddings))

pca = PCA(n_components=3)
pca.fit(embedding_vectors)

이 코드 스니펫은 sklearnPCA 클래스를 사용하여 학습 문구 임베딩의 2D 표현을 생성합니다.

다음 코드는 차원이 줄어든 문구 임베딩의 시각화를 생성합니다.

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(15,10))
ax = fig.add_subplot(111)

legend = []

for color, intent in enumerate(training_phrases_with_embeddings):
    phrases = list(training_phrases_with_embeddings[intent].keys())
    embeddings = list(training_phrases_with_embeddings[intent].values())
    points = pca.transform(embeddings)
    xs = points[:,0]
    ys = points[:,1]
    ax.scatter(xs, ys, marker='o', s=100, c="C"+str(color))
    for i, phrase in enumerate(phrases):
        ax.annotate(phrase, (xs[i], ys[i]))
    legend.append(intent)

ax.legend(legend)
plt.show()

다음 그림은 결과로 생성되는 시각화를 보여줍니다. 차원이 줄어든 문구 임베딩 시각화

문구 간 쌍 유사성 계산

다음 코드는 sklearn.metrics.pairwise.cosine_similarity를 사용하여 학습 문구 임베딩의 쌍 코사인 유사성을 계산합니다. 이 코드는 쌍 유사성 값과 함께 similarity_df Dataframe을 만듭니다.

from sklearn.metrics.pairwise import cosine_similarity

flatten = []
for intent in training_phrases_with_embeddings:
        for phrase in training_phrases_with_embeddings[intent]:
            flatten.append((intent, phrase, training_phrases_with_embeddings[intent][phrase]))

data = []
for i in range(len(flatten)):
    for j in range(i+1, len(flatten)):
        intent_1 = flatten[i][0]
        phrase_1 = flatten[i][1]
        embedd_1 = flatten[i][2]
        intent_2 = flatten[j][0]
        phrase_2 = flatten[j][1]
        embedd_2 = flatten[j][2]
        similarity = cosine_similarity([embedd_1], [embedd_2])[0][0]
        record = [intent_1, phrase_1, intent_2, phrase_2, similarity]
        data.append(record)

similarity_df = pd.DataFrame(data,
    columns=["Intent A", "Phrase A", "Intent B", "Phrase B", "Similarity"])

다음 코드는 샘플 유사성 레코드를 표시합니다.

different_intent = similarity_df['Intent A'] != similarity_df['Intent B']
display(similarity_df[different_intent].sort_values('Similarity',
ascending=False).head(5))

다음 코드 스니펫은 동일한 인텐트에 속하지 않는 가장 유사한 학습 문구를 보여줍니다.

동일한 인텐트에 속하지 않는 가장 유사한 학습 문구

서로 다른 인텐트에 있으면서 유사성 값이 높은 문구는 Dialogflow 에이전트에 혼동을 줄 수 있으며, 이로 인해 사용자 입력이 잘못된 인텐트에 전달될 수 있습니다.

인텐트의 응집도 및 분리도 측정

다음 코드는 접근 방법 섹션에 설명한 대로 각 인텐트의 응집도 값을 계산합니다.

same_intent = similarity_df['Intent A'] == similarity_df['Intent B']
cohesion_df = pd.DataFrame(similarity_df[same_intent].groupby('Intent A', as_index=False)['Similarity'].mean())
cohesion_df.columns = ['Intent', 'Cohesion']
display(cohesion_df)

결과는 각 인텐트의 응집도 값입니다.

각 인텐트의 응집도 값 계산

다음 코드는 접근 방법 섹션에 설명된 대로 인텐트 간 쌍 분리도를 계산합니다.

different_intent = similarity_df['Intent A'] != similarity_df['Intent B']
separation_df = pd.DataFrame(similarity_df[different_intent].groupby(['Intent A', 'Intent B'], as_index=False)['Similarity'].mean())
separation_df['Separation'] = 1 - separation_df['Similarity']
del separation_df['Similarity']
display(separation_df.sort_values('Separation'))

결과는 인텐트 간 쌍 분리도입니다.

인텐트 간 쌍 분리도 계산

추가 개선

인텐트의 학습 문구 품질을 개선하려면 다음 접근 방법을 고려해 보세요.

  • 서로 다른 인텐트에 있으면서 유사도가 높은 문구를 찾아 변경하거나 삭제합니다.
  • 서로 다른 인텐트에 속하는 가장 유사한 문구를 찾습니다.
  • 응집도가 낮은 인텐트에서 학습 문구를 추가하고, 분리도가 낮은 인텐트의 학습 문구를 조사합니다.

삭제

  1. Cloud Console에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계