AI_SENTIMENT
AI_SENTIMENT
AI_SENTIMENT() 함수는 다양한 시장과 언어에 걸친 감성 분류를 제공해요. Snowflake 맞춤 대형 언어 모델을 사용해 텍스트 조각의 전체 감성과, 선택적으로 사용자가 지정한 특정 주제에 대한 측면 기반(aspect-based, 범주/엔티티 기반이라고도 함) 감성을 반환해요.
일반적인 사용 사례는 다음과 같아요.
- 소셜 미디어 모니터링
- 상세 제품 분석
- 포괄적인 브랜드 인식 연구
- 고급 시장 인텔리전스
- 직원 몰입도 분석
- 고객 경험 여정 매핑
- 콘텐츠 성과 분석
- 고객 지원 최적화
본문
문법
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을 참고하세요.