실제 대화 화자 식별 설계
상위 기준: 보이스 프로필 등록 제품 구현 기준서 8장
이 문서는 등록 이후 실제 음성 턴에서 수행되는 현재 CPU 식별 경로를 상세화한다.
현재 구현
AudioRecordManager가 기존 WUW/STT 마이크 입력을 수집한다.ForegroundService.stopRecording()이 post-WUW 발화 샘플을 확정한다.- 같은 샘플을 STT decode와
SpeakerTurnAnalyzer.analyze(samples)에 분기한다. SpeakerIdentificationEngine이 Query Embedding을 생성한다.- 로컬
SpeakerProfileStore의 Reference Embedding들과 비교한다. - threshold를 넘는 최적 Voice ID를 현재 턴의 화자로 사용한다.
화자 식별 때문에 두 번째 AudioRecord를 열지 않는다. Query Embedding도 파일로 저장하거나 DeviceAgent로 전달하지 않는다.
판정과 사용
| 결과 | 현재 동작 | 제품 목표 |
|---|---|---|
MATCH |
로컬 Voice ID와 닉네임 사용 가능 | Voice ID로 Cloud 사용자 정보 조회 |
LOW_CONFIDENCE |
식별하지 않음 | 재확인 또는 비개인화 |
NO_MATCH |
게스트 처리 | 비개인화 유지 |
| Cloud offline | 현재 조회 자체가 없음 | 기본 기기 기능은 계속 동작 |
Cloud Profile API와 계정 권한 조회는 아직 연결되지 않았다. 따라서 현재 CPU PoC에서 표시되는 닉네임은 OnDevice 프로필의 로컬 표시명이며 Cloud 사용자 정보가 아니다.
책임 경계
| 판단 | 책임자 |
|---|---|
| 발화 임베딩 생성 | OnDevice Agent Service |
| 등록 화자와 일치 여부 | OnDevice Agent Service |
| Voice ID에 연결된 계정·동의·권한 | 향후 Profile Cloud |
| 최종 개인화 허용 | 제품 정책 + Cloud 정책 |
Voice ID 일치만으로 결제, 보안, 개인정보 접근 권한을 부여하지 않는다.
데이터 경계
- Cloud 조회가 연결되면
MATCH한 Voice ID만 조회 키로 보낸다. - PCM/WAV와 Query Embedding은 Cloud로 보내지 않는다.
- 이전 턴의 Voice ID를 새 발화 검증 없이 재사용하지 않는다.
- 모델 버전이 바뀌어 임베딩이 호환되지 않으면 재등록 또는 마이그레이션한다.
남은 검증
- 실제 사용자·환경별 FAR, FRR, EER과 threshold를 측정한다.
- 등록 인원 증가에 따른 메모리와 검색 지연을 측정한다.
- 겹침 발화와 짧은 발화의 보수적 fallback을 확인한다.
- Profile Cloud 조회 실패 시 비개인화 fallback을 E2E로 검증한다.