AI_SENTIMENT

AI_SENTIMENT

AI_SENTIMENT() 함수는 다양한 시장과 언어에 걸친 감성 분류를 제공해요. Snowflake 맞춤 대형 언어 모델을 사용해 텍스트 조각의 전체 감성과, 선택적으로 사용자가 지정한 특정 주제에 대한 측면 기반(aspect-based, 범주/엔티티 기반이라고도 함) 감성을 반환해요.

일반적인 사용 사례는 다음과 같아요.

  • 소셜 미디어 모니터링
  • 상세 제품 분석
  • 포괄적인 브랜드 인식 연구
  • 고급 시장 인텔리전스
  • 직원 몰입도 분석
  • 고객 경험 여정 매핑
  • 콘텐츠 성과 분석
  • 고객 지원 최적화

출처: Snowflake SQL Reference

본문

문법

AI_SENTIMENT( <text> [ , <categories> ] [, <return_error_details> ] )

인자

text (필수) — 감성이 감지되는 텍스트를 담은 문자열이에요.

categories (선택) — 감성을 추출할 최대 10개의 범주(엔티티 또는 측면이라고도 함)를 담은 배열이에요. 각 범주는 문자열이에요. 예를 들어 레스토랑 리뷰에서 감성을 추출한다면 ['cost', 'quality', 'service', 'wait time']을 범주로 지정할 수 있어요. 각 범주는 최대 30자예요. 이 인자를 제공하지 않으면 AI_SENTIMENT는 전체 감성만 반환해요.

return_error_details (선택) — 오류 발생 시 오류 세부 정보를 반환할지 나타내는 BOOLEAN 플래그예요. TRUE로 설정하면 함수는 값과 오류 메시지를 담은 OBJECT를 반환하는데, 함수의 성공/실패 여부에 따라 둘 중 하나는 NULL이에요. 자세한 내용은 Error behavior 참고.

반환

categories 필드를 담은 OBJECT 값을 반환해요. categories는 범주 레코드 배열이에요. 각 범주는 다음 필드를 포함해요.

  • name: 범주의 이름. 범주 이름은 categories 인자에 지정된 범주와 일치해요.
  • sentiment: 범주의 감성. 각 감성 결과는 다음 문자열 중 하나예요.
    • unknown: 범주가 텍스트에 언급되지 않음.
    • positive: 범주가 텍스트에서 긍정적으로 언급됨.
    • negative: 범주가 텍스트에서 부정적으로 언급됨.
    • neutral: 범주가 텍스트에 언급되었지만 긍정적도 부정적도 아님.
    • mixed: 범주가 텍스트에서 긍정적·부정적으로 모두 언급됨.

overall 범주 레코드는 항상 포함되며 텍스트의 전체 감성을 담고 있어요.

예제:

{
  "categories": [
    {
      "name": "overall",
      "sentiment": "mixed"
    },
    {
      "name": "Brand",
      "sentiment": "unknown"
    },
    {
      "name": "Cost",
      "sentiment": "negative"
    },
    {
      "name": "Professionalism",
      "sentiment": "unknown"
    }
  ]
}

오류 동작 (Error behavior)

기본적으로 AI_SENTIMENT가 입력을 처리할 수 없으면 함수는 NULL을 반환해요. 쿼리가 여러 행을 처리하면 오류가 있는 행은 NULL을 반환하고 쿼리가 완료되는 것을 막지 않아요.

오류 시 반환 값은 return_error_details 인자에 따라 달라져요. 다음 표는 return_error_details 인자에 따른 반환 값을 보여줘요.

return_error_details 반환 값 설명
FALSE / 전달 안 함 NULL
TRUE value와 error 필드를 가진 OBJECT value: 감성 분석 결과를 담은 OBJECT, 오류가 발생했으면 NULL. error: 오류가 발생했으면 오류 메시지를 담은 VARCHAR, 함수가 성공하면 NULL.

AI 함수의 오류 처리에 대한 자세한 내용은 Snowflake Cortex AI Function: Multirow error handling improvements 문서를 참고하세요.

접근 제어 요구사항

사용자는 SNOWFLAKE.CORTEX_USER 데이터베이스 역할이 부여된 역할을 사용해야 해요. 이 역할에 대한 자세한 내용은 Cortex LLM 권한을 참고하세요.

사용 노트

  • 지원 언어: AI_SENTIMENT는 영어, 프랑스어, 독일어, 힌디어, 이탈리아어, 스페인어, 포르투갈어로 감성을 분석할 수 있어요. 측면은 텍스트의 언어 또는 영어로 지정할 수 있어요.
  • 컨텍스트 창: AI_SENTIMENT는 2,048 토큰(약 1,600단어)의 텍스트 입력에 최적화되어 있어요. 컨텍스트 창을 초과하는 입력은 오류를 반환하고, 컨텍스트 창을 초과할 출력은 잘려요.
  • 측면 한도: 최대 10개의 측면을 지정할 수 있고, 각 측면은 30자 이하예요.
함수 컨텍스트 창 (토큰) 최대 엔티티 레이블 수
AI_SENTIMENT 2,048 10

예제

텍스트의 전체 감성 가져오기

다음 예제는 AI_SENTIMENT를 사용해 제품 리뷰의 전체 감성을 얻어요.

SELECT AI_SENTIMENT('I went to the store, bought the leggings and exact same as shorts...
  they are expensive but i heard such great things. After wearing them twice i noticed a string popping out already.
  And since i believed that they were this amazing luxury brand i didnt keep the receipt 😭 ');

반환 값:

{
  "categories": [
    {
      "name": "overall",
      "sentiment": "mixed"
    }
  ]
}

측면 기반 감성 가져오기

전체 감성에 더해 측면 기반 감성을 얻으려면 하나 이상의 측면을 지정하세요. 다음 예제는 AI_SENTIMENT를 사용해 레스토랑 리뷰의 특정 측면에 대한 감성 분류를 얻어요.

SELECT AI_SENTIMENT('A tourist\'s delight, in low urban light,
  Recommended gem, a pizza night sight. Swift arrival, a pleasure so right,
  Yet, pockets felt lighter, a slight pricey bite. 💰🍕🚀',
  ['Cost', 'Quality', 'Wait Time']);

반환 값:

{
  "categories": [
    {
      "name": "overall",
      "sentiment": "mixed"
    },
    {
      "name": "Cost",
      "sentiment": "negative"
    },
    {
      "name": "Quality",
      "sentiment": "positive"
    },
    {
      "name": "Wait Time",
      "sentiment": "positive"
    }
  ]
}

지정한 일부 측면이 제공한 텍스트에 적용되지 않으면 다음 예제의 Professionalism와 Brand에서처럼 AI_SENTIMENT는 그 측면에 대해 unknown을 반환해요.

SELECT AI_SENTIMENT('A tourist\'s delight, in low urban light,
  Recommended gem, a pizza night sight. Swift arrival, a pleasure so right,
  Yet, pockets felt lighter, a slight pricey bite. 💰🍕🚀',
  ['Cost', 'Professionalism', 'Brand']);

반환 값:

{
  "categories": [
    {
      "name": "overall",
      "sentiment": "mixed"
    },
    {
      "name": "Brand",
      "sentiment": "unknown"
    },
    {
      "name": "Cost",
      "sentiment": "negative"
    },
    {
      "name": "Professionalism",
      "sentiment": "unknown"
    }
  ]
}

테이블에서 여러 리뷰 분석하기

이 예제에서 reviews라는 이름의 테이블에는 사용자가 제출한 영화 리뷰의 텍스트를 담은 review_content 열이 있어요. 쿼리는 최대 10개 리뷰의 여러 측면에 대한 감성을 반환해요.

SELECT
  AI_SENTIMENT(
    review_content,
    ['concept', 'performance', 'script', 'cinematography', 'soundtrack']
  ),
  review_content
  FROM reviews LIMIT 10;

다국어 감성 분석

AI_SENTIMENT는 여러 언어로 감성을 분석할 수 있어서, 텍스트를 번역해 의미의 본질적인 부분을 잃을 위험을 감수할 필요가 없어요. 텍스트의 언어를 지정할 필요도 없어요. 측면은 텍스트의 언어 또는 영어로 지정할 수 있어요.

다음 예제는 텍스트와 레이블이 모두 스페인어예요:

SELECT AI_SENTIMENT ('Pedí dos pares del mismo modelo en diferentes colores.
    Uno tenía defectos en la costura y el cuero se veía de menor calidad.
    Por 350€ el par, esto es inaceptable. El servicio al cliente tardó una
    semana en responder y la solución no fue satisfactoria. Es una pena porque
    cuando están bien hechos, son zapatos hermosos. Pero la inconsistencia en la
    calidad es preocupante.',
    ['Calidad', 'Calidad de Servicio', 'Precio', 'Tiempo de Espera']);

반환 값:

{
  "categories": [
    {
      "name": "overall",
      "sentiment": "negative"
    },
    {
      "name": "Calidad",
      "sentiment": "negative"
    },
    {
      "name": "Calidad de Servicio",
      "sentiment": "negative"
    },
    {
      "name": "Precio",
      "sentiment": "negative"
    },
    {
      "name": "Tiempo de Espera",
      "sentiment": "negative"
    }
  ]
}

다음 예제는 텍스트가 독일어이고 레이블이 영어예요:

SELECT AI_SENTIMENT ('Die Schuhe selbst sind wirklich schön und gut verarbeitet.
    Das Leder ist weich und die Passform stimmt. Allerdings gab es erhebliche
    Verzögerungen bei der Lieferung - statt der versprochenen 5 Tage hat es 3
    Wochen gedauert. Der Kundenservice war freundlich, aber nicht sehr hilfreich.
    Für 320€ erwarte ich besseren Service. Die Schuhe sind in Ordnung, aber das
    Gesamterlebnis war mittelmäßig',
    ['Quality', 'Price', 'Service', 'WaitTime']);

반환 값:

{
  "categories": [
    {
      "name": "overall",
      "sentiment": "mixed"
    },
    {
      "name": "Price",
      "sentiment": "neutral"
    },
    {
      "name": "Quality",
      "sentiment": "positive"
    },
    {
      "name": "Service",
      "sentiment": "neutral"
    },
    {
      "name": "WaitTime",
      "sentiment": "negative"
    }
  ]
}

지역 가용성 (Regional availability)

AI_SENTIMENT는 다음 지역에서 사용할 수 있어요.

함수 (모델) AWS US West 2 (Oregon) AWS US East 1 (N. Virginia) AWS Europe Central 1 (Frankfurt) AWS Europe West 1 (Ireland) AWS AP Southeast 2 (Sydney) AWS AP Northeast 1 (Tokyo) Azure East US 2 (Virginia) Azure West Europe (Netherlands) AWS (Cross-Region)
AI_SENTIMENT ✔ ✔ ✔ ✔ ✔ ✔ ✔

참고: AI_SENTIMENT는 ENTITY_SENTIMENT의 갱신된 버전이에요. 최신 기능을 사용하려면 AI_SENTIMENT를 사용하세요.

법적 고지

법적 고지는 Snowflake AI and ML을 참고하세요.

더 알아보기 (Learn more)