7. 실제 화자분리 상세보고서
논문 작성용 상세 본문
pyannote 기반 화자분리를 TO-BE 1,000개 통화에 적용해 SPEAKER 세그먼트 57,619건을 생성했다.
각 세그먼트는 call_id, speaker_label, start_sec, end_sec, duration_sec 등의 키를 가지며, 후속 feature/STT/stress 병합의 기준 행으로 사용된다.
화자분리 성공은 음성 구간과 화자 후보가 분리됐다는 의미이며, 고객과 상담사의 실제 역할이 확정됐다는 의미는 아니다.
화자분리는 통화 전체 음성을 시간 구간과 화자 후보 라벨로 분할하는 단계이다. 결과는 57,619개 세그먼트이며 각 행은 통화, 화자 후보, 시작·종료 시각, 구간 길이 정보를 가진다.
세그먼트는 후속 acoustic feature, STT, WPM, stress_score를 연결하는 최소 분석 단위이다.
SPEAKER_00과 SPEAKER_01은 상대적 클러스터 라벨이므로 실제 고객 또는 상담사 역할로 확정해서는 안 된다.
분석 수치 및 결과표
표 7-1. 화자분리 결과 요약
| 항목 | 값 | 상태 |
|---|---|---|
| 입력 통화 | 1,000 | 완료 |
| SPEAKER 세그먼트 | 57,619 | 완료 |
| 통화-화자 슬롯 | 2,000 | 완료 |
| 상태 코드 | DONE_SPEAKER_DIARIZATION | 완료 |
표 7-2. 세그먼트 진단 필드
| 필드 | 설명 |
|---|---|
| file | 원본 통화 파일 |
| duration_sec | 통화 길이 |
| sample_rate | 샘플레이트 |
| channels | 채널 수 |
| speaker_count | 검출 화자 수 |
| segment_count | 세그먼트 수 |
| status/error | 실제 오류 여부 |
표 7-Q. 연구 질문
| 번호 | 연구 질문 |
|---|---|
| 1 | 1,000개 통화에서 실제 화자 세그먼트를 안정적으로 생성했는가? |
| 2 | 화자분리 결과가 후속 병합의 기준 키로 활용 가능한가? |
표 7-M. 분석 방법 및 도구
| 순서 | 방법/도구 |
|---|---|
| 1 | pyannote diarization |
| 2 | Two-speaker constraint |
| 3 | Segment diagnostics |
| 4 | Truth-gate verification |
분석 그림 및 도식



원본 분석 산출물 연계
산출물 CSV: research_continuity/17_speaker_diarization_v171/speaker_diarization_segments_v171.csv (행 0, 열 1)
전체 행 포함
| message |
|---|
산출물 CSV: research_continuity/20_speaker_oneclick_addon_v173/speaker_diarization_segments_v173_from_v171.csv (행 0, 열 1)
전체 행 포함
| message |
|---|
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_acoustic_feature_candidates_v176.csv (행 0, 열 2)
전체 행 포함
| item | value |
|---|
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_actual_segments_v176.csv (행 0, 열 9)
전체 행 포함
| file_id | audio_path | segment_index | speaker_label | start_sec | end_sec | duration_sec | source | actual_diarization |
|---|
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_interaction_categories_v176.csv (행 7, 열 5)
전체 행 포함
| category_no | category | state | analysis_view | paper_policy |
|---|---|---|---|---|
| 7-1 | AI-IS/0413 기준 불러오기 | DONE | 기존 stress 산식·0413 본문 기준은 유지 | 본문 유지 |
| 7-2 | TO-BE 음성 입력 확인 | NEEDS_AUDIO_INPUT | 입력 음성 0건 | 확장분석 입력 |
| 7-3 | 실제 화자분리 실행 | READY_TO_RUN_ACTUAL_DIARIZATION_NOT_EXECUTED | 세그먼트 0건 / pyannote=True / token=False | 가짜 분리 금지 |
| 7-4 | 화자별 음성 파일 분리 | WAITING_FOR_ACTUAL_DIARIZATION | SPEAKER_00/SPEAKER_01 등 화자별 wav를 로컬 생성 | 원음성은 공개 배포 제외 |
| 7-5 | 고객/상담원 역할 매핑 | NEEDS_ROLE_MAPPING | speaker_role_mapping_template_v176.csv에서 customer/agent 수동 확인 | 역할 검증 전 고객-only 주장 금지 |
| 7-6 | 고객 고스트레스 이후 상담원 변화 | WAITING_FOR_ROLE_MAPPING_AND_SPEAKER_STT | agent_reactivity_delta 등 후보 지표 | 부록·후속연구 후보 |
| 7-7 | Word 통합 보고서 | DONE | 6번 전체 내용 + 7번 실제 화자분리 상태 포함 | 교수님 검토용 |
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_interaction_metrics_v176.csv (행 0, 열 2)
전체 행 포함
| item | value |
|---|
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_interaction_readiness_v176.csv (행 0, 열 2)
전체 행 포함
| item | value |
|---|
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_role_mapping_template_v176.csv (행 1, 열 6)
전체 행 포함
| file_id | speaker_label | role | mapping_confidence | evidence | memo |
|---|---|---|---|---|---|
| 실제 화자분리 후 자동 생성 |
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_split_audio_manifest_v176.csv (행 0, 열 6)
전체 행 포함
| file_id | speaker_label | split_audio_path | segment_count | state | public_deploy |
|---|
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_tobe_audio_discovery_v179.csv (행 44, 열 5)
전체 행 포함
| priority | candidate_path | exists | audio_count_found | policy |
|---|---|---|---|---|
| 1 | C:\AI\sci_voc_bot\data\voc\audio_wav_16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 2 | C:\AI\sci_voc_bot\data\voc\audio_raw | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 3 | C:\AI\sci_voc_bot\data\tobe\audio_wav_16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 4 | C:\AI\sci_voc_bot\data\tobe\audio_raw | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 5 | C:\AI\sci_voc_bot\datasets0406\02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 6 | C:\AI\sci_voc_bot\datasets0413\02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 7 | C:\AI\sci_voc_bot\datasets0223\02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 8 | C:\AI\sci_voc_bot\VOC_full | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 9 | C:\AI\sci_voc_bot\VOC_sample1000_2 | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 10 | C:\AI\sci_voc_bot\resources\tobe\audio | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 11 | C:\AI\sci_voc_bot\resources\tobe\wav | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 12 | C:\AI\sci_voc_bot\resources\tobe\mp3 | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 13 | C:\jupyter_env\VOC_full | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 14 | C:\jupyter_env\VOC_sample1000_2 | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 15 | C:\jupyter_env\datasets0406\02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 16 | C:\jupyter_env\datasets0413\02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 17 | C:\jupyter_env\datasets0223\02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 18 | /mnt/data/v180_src/data/voc/audio_wav_16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 19 | /mnt/data/v180_src/data/voc/audio_raw | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 20 | /mnt/data/v180_src/data/tobe/audio_wav_16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 21 | /mnt/data/v180_src/data/tobe/audio_raw | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 22 | /mnt/data/v180_src/datasets0406/02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 23 | /mnt/data/v180_src/datasets0413/02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 24 | /mnt/data/v180_src/datasets0223/02_wav16k | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 25 | /mnt/data/v180_src/VOC_full | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 26 | /mnt/data/v180_src/VOC_sample1000_2 | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 27 | /mnt/data/v180_src/resources/tobe/audio | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 28 | /mnt/data/v180_src/resources/tobe/wav | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 29 | /mnt/data/v180_src/resources/tobe/mp3 | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 30 | /mnt/data/v180_src/resources/voc_audio | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 31 | /mnt/data/v180_src/resources/diarization_input | True | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 32 | /mnt/data/v173_src/research_continuity/03_tobe_extension_research/tobe_extension_actual_manifest_v150.json | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 33 | /mnt/data/v173_src/resources/diarization_input | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 34 | resources/diarization_input에 오디오가 없어 상태카드만 생성했습니다. 배포 실패 조건은 아닙니다. | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 35 | resources/diarization_input | True | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 36 | /mnt/data/v173_src/results/tables/asis_tobe/strict_original_csv_schema_compare_v169.csv | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 37 | /mnt/data/v173_src/results/tables/asis_tobe/strict_original_key_metric_compare_v169.csv | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 38 | /mnt/data/v173_src/results/tables/asis_tobe/csv_schema_compare_resolved_v169.csv | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 39 | /mnt/data/v173_src/results/tables/asis_tobe/key_metric_compare_resolved_v169.csv | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 40 | SCHEMA_DIFF/ROW_DIFF/ASIS_ONLY/TOBE_ONLY가 교수님용 경고로 노출 | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 41 | /mnt/data/v173_src/results/tables/asis_tobe/kspon_consistency_metrics_v162.csv | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 42 | /mnt/data/v173_src/resources/tobe/asis_tobe_comparison_visual.png | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 43 | /mnt/data/v173_src/resources/tobe/to_be_actual_visual_summary.png | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
| 44 | /mnt/data/v173_src/results/tables/asis_tobe/kspon_consistency_metrics_v160.csv | False | 0 | TO-BE/VOC analyzed audio auto-scan candidate |
산출물 CSV: research_continuity/24_speaker_actual_diarization_v176/speaker_tobe_audio_files_v179.csv (행 0, 열 4)
전체 행 포함
| order | audio_path | file_id | suffix |
|---|
산출물 텍스트: research_continuity/24_speaker_actual_diarization_v176/speaker_actual_diarization_report_v176.md
# SCI-VOC 7번 실제 화자분리 기반 고객-상담원 상호작용 확장분석 v180 - 상태: READY_TO_RUN_ACTUAL_DIARIZATION_NOT_EXECUTED - 실제 화자분리 완료: False - 입력 음성: 0건 - 입력 기준: 기존 TO-BE/VOC 분석 음성 자동 탐색 - 실제 세그먼트: 0건 - 본문 기준: 0413 AS-IS 통화 전체 음성 유지 - 본문 대체: 금지 - 고객-only 주장: 실제 diarization + role mapping 검증 전 금지 ## 교수님 설명 문장 > 7번은 기존 AI-IS/0413 산출 기준을 유지한 채 기존 TO-BE/VOC 분석에 사용한 음성 경로에서 실제 화자분리를 수행하여 고객 발화와 상담원 발화의 상호작용 변화를 보는 별도 확장분석입니다. pyannote 기반 실제 세그먼트와 고객/상담원 role mapping이 확인되기 전에는 고객-only 또는 상담원 영향 결과로 주장하지 않겠습니다. ## 실행 기준 - pyannote.audio와 PYANNOTE_AUTH_TOKEN/HF_TOKEN이 있으면 실제 SPEAKER_00/SPEAKER_01 세그먼트를 생성합니다. - 토큰 또는 pyannote가 없으면 가짜 분리를 만들지 않고 준비 필요 상태로 표시합니다. - 분리된 화자별 wav는 로컬 분석용이며 공개 배포에는 포함하지 않습니다.
결과 해석
1,000통화 전체에서 세그먼트가 생성되었으므로 화자별 발화량·턴·응답 구조를 계산할 수 있는 기반이 마련됐다.
한계 및 논문 반영 기준
화자분리 라벨은 상대적 SPEAKER_00/01이며 실제 업무 역할은 별도 검증이 필요하다.