본문 바로가기

소마

[디베이트 트래커] 어떤 STT API를 써야할까? : 전사/화자분리 정확도 벤치마크 테스트

Situation : 기획에 따른 STT 벤더 선택 필요

 

저희 팀의 소마 기획은 [디베이트 트래커: 토론의 실시간 요약/분석/포트폴리오까지 한번에] 입니다.

(기획에 대해선 다른 글로 후술해보도록 하겠습니다 ㅎㅎ)

이번 스프린트 목표는 다음 메인 대시보드였습니다.

 

1) 실시간 속기록(왼쪽 파트) : 토론 발언자들의 음성 기록이 실시간으로 화자가 분리되어 기록됨
2) 쟁점 요약(오른쪽 파트) : 토론 내용을 축적하며 토론의 쟁점-주장-근거가 구조화되어 대시보드에 표시됨

 

 

이중 실시간 속기록 과정에서 음성을 텍스트로 바꾸는 과정이 필요했고,

이에 따라 STT(Speech-To-Text) API를 무엇으로 해야할지가 큰 과업이었습니다.

 


Task : 벤더별 전사 정확도와 화자분리 정확도 측정하기

 

저희 팀이 던진 대질문은 "왜 이 STT API를 선택했는가" 였습니다.

그리고 이는 STT 전사 결과의 성과를 어떻게 수치화할 것인가?" 라는 질문으로 이어졌습니다.

 

Task-1) Harness를 활용해 비교 대상 API 후보 선정하기

먼저 서비스 요구사항을 구체화하여 API후보군을 추렸습니다.

조건1) 8인 이상의 화자분리를 지원 : 다자 토론에 사용될 예정(CEDA의 경우 6-8인)
조건2) 실시간 스트리밍 지원
조건3) 한국어 전사 지원

 

harness 플러그인으로 서브 에이전트 팀을 만들어 9개의 벤더가 조사되었습니다.

- Research AI : web deepsearch 스킬 기반으로 STT 벤더 탐색

- Development Resource Measurement AI : 조사된 벤더별 공식문서 기반으로 개발 리소스를 측정

- Project PM : 조사결과를 기반으로 프로젝트 적합성 판단

 

그렇게 해서 다음 9가지 벤더가 추려졌습니다.

 

이후 3요건 충족 여부 + 가격 경쟁력 + 한국어 정확도를 고려해 3가지 최종 후보가 추려졌습니다.

후보1. Soniox stt-rt-v4
후보2. DeepGram Nova-3
후보3. MS Azure STT API

 

 

Task-2) 텍스트화 정확도 평가 기준 : CER

다음으로 얼마나 텍스트를 정확하게 전사하는지 평가할 측도가 필요했습니다.

조사결과 텍스트화 정확도에는 크게 단어 기준으로 평가하는 WER과 문자기준으로 평가하는 CER이 있었습니다.

 

한국어 전사 펴악 기준의 표준은 문맥기반으로 평가되므로

의미를 더 잘 담는 CER을 텍스트화 정확도 평가기준으로 채택했습니다.

(리턴제로 API 평가 표준이기도 함)

 

참고) WER과 CER이 무엇이 다른가요?

더보기

WER(Word Error Rate)는 단어 기반 정확도입니다.

 

ex)

[정답 : 한 단어 /  실제 전사 결과 : 한단어]

 

이렇게 되어 있을 때 단어 기준으로 평가합니다.

- 한 vs 한단어- 틀림

- 단어 vs 한단어 - 틀림

을 비교하므로 단어 기반 전사율 정확도는 0%가 됩니다.

 

---

 

그에 반해 CER(Character Error Rate)은 문자 기반 정확도입니다.

따라서 모든 단어들의 공백을 제거하고 붙여 비교하게 됩니다.

 

[정답 : 한 단어 /  실제 전사 결과 : 한단어]

 

이렇게 되어 있을 때 공백을 제거한 문자 기준으로 평가합니다.

- 한 vs 한 - 맞음

- 단 vs 단 - 맞음

- 어 vs 어 - 맞음

따라서 문자 기반 전사율 정확도는 100%가 됩니다.

 

---

 

한국어는 띄어쓰기나 연음 등의 문법이 복잡해서 단어가 아닌 문자단위 정확도가 더 정확합니다.

따라서 한국어 전사 벤치마크 표준은 CER입니다.

 

Task-3) 화자분리 정확도 평가 기준 : DER/JER

화자분리 정확도를 평가할 때는 다음 3가지 상황을 평가합니다.

- Missing : 현장에서는 말하고 있는데 텍스트화가 되지 않은 시간 구간
- False Alarm : 현장에서는 아무 소리가 없었는데 텍스트화가 된 구간
- Confusion : 음성기록이 되었으나 화자가 잘 매핑되지 않은 구간

 

이 3가지 구간을 합쳐 전체 비율을 나타낸 것을 화자분리 오류율 - DER(Diarization Error Rate)- 이라고 합니다.

 

그러나 DER은 각 화자가 말한 비율에 따라 오류율이 천차만별입니다.

총 10분 토론에서 화자1이 1분 말했고 화자2가 5분 말했다면 화자1의 발언비율이 적으므로 평가에 미치는 영향도 줄어듭니다.

따라서 화자의 발언 비율에 따라 오류율을 가중평균 낸 지표를 JER이라고 합니다.

 

서비스에서는 DER과 JER를 모두 활용해 측정하기로 했습니다.

 


Action : 벤더별 벤치마크 테스트

 

Action-1) 3개 벤더를 병렬 스트리밍을 하는 프로토타입 만들기

실제 프로토타입을 만들어 하나의 토론에서 추출되는 전사결과를 비교해보기로 하였습니다.

브라우저로부터 음성기록이 스트리밍되면 이를 3개의 벤더가 각각의 가상스레드로 병렬처리하였고, 

각 벤더에서 결과가 오면 각각 정해진 구역에 결과가 현출되는 방식의 프로토타입을 만들었습니다.

 

[프로토타입 아키텍처 - 3개 벤더 병렬 처리]

 

[실제 프로토타입 화면]

 

 

Action-2) 테스트 데이터셋 만들기

다음으로 실측을 진행할 토론 데이터 셋을 5가지를 추렸습니다.

- 총 10분 분량 X 5세트

- 화자 변동과 발화량이 많은 자유토론 위주

 

해당 정답 데이터셋은 직접 수기로 작성해야 했는데요. 팀원들과 함께 하나당 약 1시간 정도 씩 투자하며 진행했습니다.

(Shout out to 에프이, 커찬)

 

Action-3) CER/DER  평가 라이브러리 채택하기

이제 정답 데이터셋까지 모두 완성이 되었습니다. 이제 구체적인 측정 로직과 플로우를 작성할 차례였습니다.

 

 

3-1) 전사 정확도(CER) 측정은 Jiwer 라이브러리로

 

CER 측정 도구는 총 4가지가 있었습니다.

 

그중 저희 팀은 다음과 같은 이유로 Jiwer 라이브러리를 채택하기로 하였습니다.

1) 표준 평가도구임 : Hugging Face, OpenAI Whisper에서 평가 코드 채택
2) 빠른 평가 속도 - C++ 기반이라 SpeechBrain에 비해 빠름
3) 음성 인식 평가 전용으로 설계된 라이브러리임
4) 자체 전처리 파이프라인이 존재하여 이상값 반영 비율을 줄일 수 있음

 

3-2) DER 측정은 pyannote.metrics라이브러리로

 

화자분리 정확도의 경우, 자체적으로 평가 결과 레포트화 기능이 있는 pyannote.metrics와 meeteval을 사용하기로 했습니다.

 

Action-4) 벤치마크 테스트 파이프라인을 클로드 스킬로 자동화하기

각 라이브러리 도구를 활용해 평가 로직을 Claude와 함께 Python으로 작성한 이후,

전체적인 벤치마크 테스트 파이프라인은 다음과 같아졌습니다.

 

step1. 정답 데이터셋을 테스트 파라미터에 맞게 파싱하기 (CER 평가용 json / DER 평가용 json)
step2. 각 벤더별 데이터셋을 테스트 파라미터에 맞게 파싱하기 (CER 평가용 json / DER 평가용 json)
step3. CER / DER 평가 코드 실행 및 측정
step4. 결과 취합하여 Report.md 작성

 

해당 파이프라인을 클로드 코드를 활용해 커맨드 한줄로 자동화하기 위해 클로드 스킬을 만들어 사용했습니다.

 

이제 /asr-eval 한줄이면 테스트 실행이 가능해졌습니다.

 

Action-5) 테스트 진행

이제 모든 준비가 끝났습니다. 각 토론 파트별 영상을 틀어놓고 전사를 시작했습니다.


Result : 5회 벤치마크 테스트 분석

 

모든 테스트가 끝났습니다. 프로토타입 테스트로부터 얻은 결과와 인사이트는 다음과 같습니다.

 

인사이트1) 텍스트화 전사도는 Soniox가 1위 but 7인 이상 토론에서 극도로 낮아짐

텍스트화 전사도에서는 Soniox가 압도적이었습니다. 5회 모두 1위를 기록했습니다.

(Soniox > Azure > DeepGram 순위)

 

또한, 7인 이상 토론(고란도란 토론)에서는 3사 모두 전사 오류율이 크게 증가하는 걸 볼 수 있었습니다.

 

인사이트2) 화자분리 정확도는 Azure가 1위

 

화자분리는 사실 절망적이었습니다.

특히 7인 이상 토론에서는 누락 화자수가 최대 5명까지 나왔고 가장 낮은 오류율이 45%였습니다.

(Azure > Deepgram > Soniox)

 

그래도 Azurer가 총 4회 1등을 기록하여 평균 16% 오류율이라는 준수한 성능을 보여주었고

영상 녹화 품질이 좋은 경우 2%의 오류율을 기록하기도 하였습니다. 

 

그러나, 성능이 좋은 편은 아니라 추후 화자분리의 경우 전용 분리 워커 분리도 고려해봄직하다고 생각이 들었습니다.

 

 

결론 : Azure로 1차 MVP 구현하자

결국 화자분리와 텍스트 전사도에서 둘다 준수한 성적을 기록한 Azure를 채택하기로 하였습니다.

화자분리의 경우 일단 1차 MVP까지는 Azure 단일 벤더로 사용해보되 1차 MVP 테스트에서도 성능이 안나오면 개선책을 모색해보고자 했습니다.

 

이번 STT 벤치마크 테스트는 서비스 요구사항 명세부터, 음성기록 테스트 지표에 대한 학습, AI를 활용한 워크플로우 구성까지 새로운 경험의 연속이었습니다. 그러나, STT는 API는 서비스의 핵심기능인 만큼 합리적 선택을 위한 충분한 투자가 필연적인 부분이기도 했습니다.

 

다음은 실제 1차 MVP 테스트 결과로 돌아오겠습니다.

 

---

 

모든 토론의 순간을, 성장의 순간으로.

디베이트 트래커의 여정은 이제 시작입니다.