[log-15] 감정 — 데이터 준비 (KoED 재샘플링 + 톤 매핑)
KoED에서 6축 56샘플 재샘플링 + Kanana TTS로 감정 톤 오디오 아티팩트 생성.
KoED 재샘플링
log-14에서 감정 실험의 데이터셋으로 KoED(Korean Empathetic Dialogues)를 선정했다. 기존에 16종 감정으로 30개를 뽑아두었는데, Kanana TTS의 감정 톤 표현력을 고려해 축을 재구성했다.
6축 구성
| 축 | 샘플 수 | 포함 감정 |
|---|---|---|
| 기쁨 | 10 | proud, joyful, trusting, hopeful, caring, impressed, faithful |
| 슬픔 | 10 | sad, lonely, sentimental, guilty, ashamed, embarrassed, devastated, disappointed |
| 분노 | 10 | angry, furious, annoyed, disgusted, jealous |
| 중립 | 10 | anticipating, apprehensive, afraid, terrified, surprised, prepared |
| 정 | 8 | jeong (한국 고유) |
| 한 | 8 | han (한국 고유) |
총 56샘플. 5턴 이상 필터, seed=42 고정. 정과 한은 성격이 다르므로 별도 축으로 분리했다. KoED 원본 1,360개 대화에서 각 축의 후보가 충분하여(기쁨 304, 슬픔 286, 분노 129, 중립 169, 정 14, 한 13) 샘플 편향 없이 추출할 수 있었다. 정/한은 후보 수가 적어 거의 전수에 가깝다.
감정 톤 매핑
Kanana API에는 감정 파라미터가 없고, 프롬프트에 자연어로 톤을 지시하는 방식이다(log-14 참조). 각 샘플의 원본 감정 레이블에 대응하는 한국어 톤 지시를 매핑했다.
기쁨 계열
| 원본 감정 | 톤 지시 |
|---|---|
| proud | 자랑스럽고 당당한 톤으로 |
| joyful | 기쁘고 활기찬 톤으로 |
| trusting | 신뢰감 있고 따뜻한 톤으로 |
| hopeful | 희망적이고 밝은 톤으로 |
| caring | 다정하고 부드러운 톤으로 |
| impressed | 감탄하며 놀란 톤으로 |
| faithful | 진심 어린 믿음이 담긴 톤으로 |
슬픔 계열
| 원본 감정 | 톤 지시 |
|---|---|
| sad | 슬프고 가라앉은 톤으로 |
| lonely | 외롭고 쓸쓸한 톤으로 |
| sentimental | 감상적이고 젖어드는 톤으로 |
| guilty | 죄책감에 무거운 톤으로 |
| ashamed | 부끄럽고 작아지는 톤으로 |
| embarrassed | 민망하고 쑥스러운 톤으로 |
분노 계열
| 원본 감정 | 톤 지시 |
|---|---|
| angry | 화가 나서 날카로운 톤으로 |
| furious | 격분하여 거센 톤으로 |
| annoyed | 짜증스럽고 퉁명스러운 톤으로 |
| disgusted | 역겨워하며 차가운 톤으로 |
중립/불안 계열
| 원본 감정 | 톤 지시 |
|---|---|
| anticipating | 기대하며 설레는 톤으로 |
| apprehensive | 조심스럽고 불안한 톤으로 |
| afraid | 두려워하며 떨리는 톤으로 |
| terrified | 공포에 질린 톤으로 |
| surprised | 놀라며 당황한 톤으로 |
| prepared | 차분하고 담담한 톤으로 |
한국 고유
| 원본 감정 | 톤 지시 |
|---|---|
| 정 (j) | 정이 담긴 따뜻하고 그리운 톤으로 |
| 한 (h) | 한이 서린 깊고 먹먹한 톤으로 |
TTS 아티팩트 생성
각 샘플에 대해 2종의 오디오를 생성한다.
- neutral: “다음 대화를 자연스럽게 읽어줘.” (톤 지시 없음)
- emotion: “다음 대화를 {톤 지시} 읽어줘.” (위 매핑 테이블 적용)
56샘플 × 2종 = 112개 WAV. 현재 96개 생성 완료, 한(한) 카테고리 16개가 쿼터 도달로 내일 마무리 예정이다.
출력은 24kHz 16bit mono raw PCM으로, WAV 헤더를 붙여서 저장한다. 이미 생성된 파일은 자동 스킵하므로 스크립트를 다시 돌리면 이어서 진행된다.
축별 생성 결과 예시
같은 대화를 neutral과 emotion으로 읽은 비교. 톤 차이를 직접 들어볼 수 있다.
기쁨-001 (proud, “친구가 두 아이가 있는데도 학기를 훌륭하게 마쳤어”)
neutral:
emotion (“자랑스럽고 당당한 톤으로”):
슬픔-001 (lonely, “이혼을 겪었어. 남편과 딸을 두고 떠나야 했어”)
neutral:
emotion (“외롭고 쓸쓸한 톤으로”):
분노-001 (angry, “최근에 우리 매니저가 우리에게 거짓말을 했어”)
neutral:
emotion (“화가 나서 날카로운 톤으로”):
중립-001 (afraid, “어릴 때 태풍을 겪었어”)
neutral:
emotion (“두려워하며 떨리는 톤으로”):
정-001 (jeong, “회사 청소 아주머니랑 매일 보다 보니 정든 것 같아”)
neutral:
emotion (“정이 담긴 따뜻하고 그리운 톤으로”):
현황
| 항목 | 상태 |
|---|---|
| 샘플 재샘플링 | ✅ 56개 완료 |
| 톤 매핑 테이블 | ✅ 25종 확정 |
| TTS 생성 (neutral) | 48/56 (한 미완) |
| TTS 생성 (emotion) | 48/56 (한 미완) |
| 이미지 렌더링 | 미착수 |
| runner 구현 | 미착수 |