---
title: "aspect-sentiment"
description: "한국어 텍스트의 측면별 감정·상태를 Claude가 직접 추출하는 ABSA(측면 기반 감정분석) 스킬입니다. \"이 리뷰들 측면별 감정 뽑아줘\", \"상담 로그 측면 분석\", \"배송·품질 따로 긍부정 분류\"처럼 말하면 됩니다. 무상태 단건 처리로 맥락 오염 0, 고정 JSON 스키마, 화자분리(고객 발화만), closed-set 분류체계로 집계 가능한 출력을 만듭니다."
pack: itda-data
slug: aspect-sentiment
status: experimental
tags: ["absa", "sentiment", "aspect", "korean", "stdlib"]
---
# aspect-sentiment 사용 가이드

> ⚠️ **개념 증명(PoC) 스킬입니다.** 측면 감정분석의 핵심 흐름(무상태 단건 처리·closed-set 분류체계·화자분리·고정 출력 계약)을 **Claude 단독으로 시연**하는 단계입니다.
> **정확도 보장·골드셋 평가·대량 처리·ML 백엔드는 아직 없습니다**(아래 「한계」 참조). 결과는 참고용으로만 쓰세요.

## 이 스킬은 무엇을 하나

한국어 텍스트(리뷰 / CS 상담)를 주면, "무엇에 대한" 감정인지 **측면별로 분리**해 고정 JSON으로 만듭니다. 단순 긍·부정이 아니라 배송·가격·품질·응대태도 같은 측면마다 긍정/중립/부정을 답니다.

---

## 바로 해보기 — 자료 없이 "지침만으로"

아래 예시는 **외부 파일 없이** 그대로 복사해 말하면 됩니다. (스킬이 분류체계·출력 스키마·few-shot을 자동으로 불러옵니다.)

### 예시 1 — 리뷰 한 건 (한 문장에 여러 측면 + 상반)
```
/aspect-sentiment 분석해줘: 『화질은 진짜 좋은데 배터리가 너무 빨리 닳고 가격은 그럭저럭이에요』
```

기대: 품질(긍정)·품질[배터리](부정)·가격(중립), `overall_sentiment=mixed`.

### 예시 2 — 리뷰 여러 건 (배치 = 건마다 독립 판정)
```
/aspect-sentiment 다음 리뷰 3건을 각각 측면 감정분석해줘. 한 건씩 독립으로 섞지 말고:
1) 배송 빠르고 포장도 꼼꼼해요
2) 디자인은 예쁜데 사이즈가 작아요
3) 가격 대비 영 별로…
```

기대: 리뷰별 JSON 1개씩(서로의 톤이 섞이지 않음).

### 예시 3 — CS 상담 멀티턴 (화자분리)
```
/aspect-sentiment CS 상담 로그야. 고객 발화만 측면 분석해줘(상담원 발화는 제외):
[고객] 30분째 기다리는데 연결이 안 되네요
[상담원] 불편을 드려 죄송합니다
[고객] 됐어요 그냥 취소할게요
```

기대: 대기시간(부정)·환불보상(취소). **상담원 "죄송합니다"는 극성에 넣지 않음.** `euphemistic_negation=true`(됐어요), `resolution=unresolved`.

### 예시 4 — 존댓말 속 완곡 불만
```
/aspect-sentiment 이 문장 측면 감정 뽑아줘: 『가격이… 음, 좀 그렇네요』
```

기대: 가격(부정) + `flags.euphemistic_negation=true`.

### 예시 5 — 사르카즘/반어
```
/aspect-sentiment 측면 분석: 『역시 빠르네요~ 일주일 만에 도착 ㅋㅋ』
```

기대: 배송(부정, 반어) + `flags.sarcasm=true`.

### 예시 6 — 미언급 ≠ 중립
```
/aspect-sentiment 본문이 "그냥 그래요"뿐인 리뷰야. 측면 분석해줘.
```

기대: 잡히는 측면이 없으면 `aspects`는 **빈 배열**(중립으로 억지로 채우지 않음).

### 예시 7 — 내 측면 체계로 (커스텀 분류)
```
/aspect-sentiment 측면 목록을 [맛, 양, 친절]로 해서 분석해줘: 『양은 많은데 너무 짜고 직원분은 친절했어요』
```

기대: 양(긍정)·맛(부정)·친절(긍정). (내장 기본 대신 사용자 측면 목록 우선)

### 예시 8 — 상태 축 분리 (감정이 아닌 사실)
```
/aspect-sentiment CS 분석: 『결제가 두 번 됐다고 했더니 바로 환불해주셔서 해결됐어요』
```

기대: 환불보상(긍정) + `process_signals.resolution=resolved`.

### 예시 9 — 출력 검증
라벨 결과를 JSONL로 저장한 뒤 이렇게 요청하세요.

```
/aspect-sentiment 방금 분석 결과를 스키마·분류체계 멤버십·필드 모순 기준으로 검증해줘
```

---

## 팁

- **배치는 doc별 독립** — 여러 건을 한 번에 줘도 건마다 따로 판정합니다(앞 글 톤이 뒤 글에 옮지 않음).
- **라벨에 극성 넣지 않기** — "배송지연불만" 같은 합친 라벨 대신 `배송 + 부정`으로 분리됩니다.
- **상태 vs 감정** — 해결여부·에스컬레이션은 감정이 아니라 `process_signals`로 나옵니다.
- **도메인이 다르면 커스텀 측면** — 음식점·앱 리뷰 등은 측면 목록을 직접 주세요(예시 7).

---

## 한계 (PoC — 꼭 읽어주세요)

- **정확도 미보장** — 골드셋·F1·주석자 합의도(IAA) 평가가 아직 없습니다. 사르카즘·완곡부정·암시는 특히 약합니다.
- **대량 처리 부적합** — 수만 건+ 저비용·저지연 처리는 범위 밖입니다(향후 별도 ML 백엔드 `ml-absa` 영역).
- **집계·리포트 없음** — 측면별 분포·KPI(미해결율 등) 집계는 후속 단계. 지금은 **라벨링까지**입니다.
- **반구조화 실로그 주의** — 실 CS 로그(문자 발송 로그·시스템 메모가 섞인 형태)는 고객 발화 분리가 까다로워 정확도가 떨어집니다.
- **PII는 직접 마스킹** — 실데이터를 넣기 전 전화·주문번호·이름 등 개인정보를 마스킹하세요. 이 스킬은 비식별화를 **자동 수행하지 않습니다.** 먼저 `itda-data:pii-redact` 스킬(별도 팩 `itda-data` 설치 필요)을 쓰세요.

> 한 줄: **"되는지 감을 보는" PoC**입니다. 운영 품질이 필요하면 골드셋 평가·집계·ML 백엔드를 갖춘 다음 단계가 필요합니다.