cpCER·CER 계산기

화자별로 받아 적은 전사문의 글자 오류율을 계산합니다. 정답과 인식 결과를 붙여 넣거나 파일로 열면 화자 순열을 맞춘 cpCER 과 화자를 무시한 CER 을 구하고, 여러 파일은 한 번에 합산합니다. 입력은 서버로 보내지도 저장하지도 않으며 새로고침하면 사라집니다.

글자 단위 기본 설정은 이 사이트 글의 평가 방식(한글·영문·숫자만 남기고 공백은 세지 않음)과 같습니다. 대체·삭제·삽입의 나눔은 최적 정렬이 여럿일 때 구현마다 다를 수 있고 오류 합계는 같습니다.

단위

비어 있습니다.

비어 있습니다.

정답과 인식 결과를 입력하면 바로 계산합니다.

지표 읽는 법

CER(문자 오류율)은 인식 결과를 정답으로 바꾸는 데 필요한 글자 수정(대체·삭제·삽입)의 수를 정답 글자 수로 나눈 값입니다. 화자는 따지지 않고 모든 발화를 시간순으로 이어 붙인 글자열끼리 비교합니다.

cpCER(concatenated minimum-Permutation CER)은 화자까지 맞혀야 하는 오류율입니다. 정답과 인식 결과 모두 화자별로 발화를 이어 붙인 글자열을 만들고, 정답 화자와 인식 화자를 오류가 가장 적게 되도록 일대일로 짝지은 뒤 합산합니다. 인식 쪽 화자 이름이 정답과 달라도 되고 화자 수가 달라도 계산하며, 짝이 없는 화자는 전부 삭제나 삽입으로 셉니다.

CER   = (대체 + 삭제 + 삽입) / 정답 글자 수          화자를 무시하고 시간순으로 이은 글자열
cpCER = (대체 + 삭제 + 삽입) / 정답 글자 수          화자별로 이은 글자열, 화자 짝은 오류 합이 최소가 되게
화자 귀속 비용 = cpCER - CER

화자 귀속 비용은 글자는 맞게 받아 적었지만 엉뚱한 화자에게 붙여서 늘어난 오류율입니다. 다른 화자에게 붙은 글자는 원래 화자에서 빠진 글자(삭제)와 새 화자에 더해진 글자(삽입)로 두 번 세어집니다. 화자 구분이 없는 입력이면 cpCER 과 CER 은 같고, 오류가 정답 글자 수보다 많으면 100% 를 넘을 수 있습니다.

계산 예시

정답은 2인 대화이고, 인식 결과는 화자 이름이 다르게 붙었으며 짧은 맞장구 "네" 가 앞 화자에게 붙었습니다. 도구의 예제 불러오기로 같은 입력을 불러올 수 있습니다.

[00:00:01] 화자1: 오늘 회의를 시작하겠습니다
[00:00:05] 화자2: 네 안건부터 보겠습니다
[00:00:09] 화자1: 첫 번째 안건은 예산입니다
[00:00:14] 화자2: 예산은 이미 확정되었습니다
[00:00:01] speaker_1: 오늘 회의를 시작하겠습니다 네
[00:00:05] speaker_0: 안건부터 보겠습니다
[00:00:09] speaker_1: 첫번째 안건은 예상입니다
[00:00:14] speaker_0: 예산은 이미 확정됐습니다
화자 짝정답 글자오류내용
화자1 ↔ speaker_1232네 삽입 1, 산→상 대체 1
화자2 ↔ speaker_0223네 삭제 1, 되었→됐 대체 1·삭제 1
합계455cpCER = 5 / 45 = 11.11%

화자를 무시하고 시간순으로 이어 비교하면 네 의 자리가 같아 오류가 3개(산→상 1, 되었→됐 2)뿐이라 CER 은 3 / 45 = 6.67% 입니다. 두 값의 차 +4.44%p 가 화자 귀속 비용이며, 네 한 글자가 삭제와 삽입으로 두 번 세어진 2글자분(2 / 45)입니다. 화자 이름은 화자1·화자2 와 speaker_1·speaker_0 처럼 달라도 오류가 가장 적은 짝(화자1 ↔ speaker_1, 화자2 ↔ speaker_0)을 자동으로 고릅니다.

입력 형식

붙여 넣은 글이나 파일에서 형식을 자동으로 알아봅니다. 이 사이트의 다화자 전사 서비스가 내는 JSON·SRT·VTT·TXT 를 그대로 넣을 수 있고, 정답과 인식 결과의 형식이 달라도 됩니다.

형식예읽는 방법
TXT[00:01:23] 화자1: 안녕하세요 · 화자1: 안녕하세요 · [화자1] 안녕하세요앞의 [시각] 은 시작 시각입니다. 화자 이름이 없는 줄은 앞 발화에 이어 붙입니다.
SRT·VTT00:00:01,000 --> 00:00:03,500 다음 줄에 [화자1] 안녕하세요 또는 <v 화자1>안녕하세요자막 한 개가 발화 한 개입니다. 서식 태그는 지웁니다.
JSON·JSONL{"utterances":[{"speaker":"화자1","start":1.0,"text":"안녕하세요"}]}utterances·segments 배열과 meeteval SegLST(speaker·start_time·words)도 읽습니다.
줄글화자 이름이 없는 글화자가 한 명인 입력으로 봅니다.

화자 이름은 앞뒤 공백을 다듬고 같은 이름을 한 화자로 묶습니다(대소문자와 이름 안의 띄어쓰기는 구분합니다). 모든 발화에 시작 시각이 있으면 시각 순으로, 아니면 입력한 순서로 이어 붙입니다. 문장 속 쌍점이 화자 표시로 읽히면 화자 구분 없음을 켜세요.

정규화 규칙

설정하는 일
한글·영문·숫자만 (기본)NFKC 정규화와 소문자 변환 뒤 한글·영문·숫자 밖의 글자(문장부호·기호·한자·일본어·악센트 등)를 공백으로 바꾸고, 글자 단위에서는 공백을 세지 않습니다. 이 사이트 글의 평가와 같은 방식입니다.
모든 문자문장부호와 기호만 지우고 다른 문자권의 글자는 남깁니다.
정규화 없음공백만 정리합니다. 대소문자와 문장부호를 그대로 비교하고 글자 단위에서는 공백도 한 글자로 셉니다.
간투사 제외단독 어절로 쓰인 음·어·아·에·응 같은 간투사를 계산에서 뺍니다. 정답 전사는 간투사를 적고 음성 인식은 생략하는 경우가 많아 선택으로 두었고, 목록은 고칠 수 있습니다.
어절 단위공백으로 나눈 낱말을 한 토큰으로 세어 WER·cpWER 을 계산합니다.

여러 파일 일괄 계산

파일 · 여러 쌍 방식에서 정답 파일과 인식 결과 파일을 고르면 이름의 줄기(S01.ref.txt 와 S01.hyp.json 은 s01)로 짝을 맞추고, 짝은 직접 고칠 수 있습니다. 데이터셋 전체의 값은 파일별 비율의 평균이 아니라 오류 합 ÷ 정답 길이 합으로 구합니다. 이 사이트 글의 표가 이 방식이며, 단순 평균은 참고로 함께 보입니다. 파일 하나를 눌러 화자 대응과 정렬 비교를 자세히 볼 수 있습니다.

알아 둘 점

  • 대체·삭제·삽입의 나눔은 최적 정렬이 여럿일 때 구현마다 다를 수 있습니다. 오류 합계와 오류율은 같고, 같은 설정의 meeteval·jiwer 값과 합계가 일치하는 것을 확인했습니다.
  • 발화 시각을 맞추는 시간 제약 cpCER(tcpCER)과 화자분리 오류율(DER)은 계산하지 않습니다.
  • 숫자와 표기 차이(열두 시와 12시, 구어체와 문어체)는 글자가 다르면 오류로 셉니다. 간투사는 목록으로 뺄 수 있습니다.
  • 화자는 20명까지, 한쪽은 40,000글자(어절)까지 계산합니다. 더 긴 녹음은 나눠서 계산하고 여러 쌍 방식으로 합산하세요. 입력이 크면 대체·삭제·삽입 구분과 정렬 비교는 생략하고 오류 합계만 구합니다.
  • 입력은 브라우저 안에서만 처리하고 저장하지 않습니다. 새로고침하면 사라집니다.

자주 묻는 질문

왜 CER 과 cpCER 이 다른가요? CER 은 화자를 무시하고, cpCER 은 화자별로 이은 글자열끼리 비교하기 때문입니다. 글자를 맞게 받아 적어도 다른 화자에게 붙이면 cpCER 만 올라갑니다. 두 값의 차가 화자 귀속 비용입니다.

인식 쪽 화자 이름이 정답과 달라도 되나요? 됩니다. 이름이 아니라 오류가 가장 적은 짝을 자동으로 고릅니다. 정답 화자 수와 인식 화자 수가 달라도 계산합니다.

meeteval 과 같은 값이 나오나요? 글자 단위 기본 설정에서 오류 합계와 정답 길이가 같습니다. 무작위로 만든 80개 세션을 meeteval(cpwer)과 jiwer 로 계산한 값과 견주어 확인했고, 간투사 제외 설정도 같았습니다. 대체·삭제·삽입의 나눔은 동률일 때 다를 수 있습니다.

cpCER 이 CER 보다 낮을 수도 있나요? 시작 시각이 없는 입력에서 화자 순서가 정답과 다르게 이어지면 CER 이 더 높게 나올 수 있습니다. CER 은 입력 순서대로 이은 글자열을 비교하기 때문입니다. 시작 시각이 있으면 시각 순으로 이어 비교합니다.

정답은 SRT 이고 인식 결과는 JSON 이어도 되나요? 됩니다. 양쪽을 따로 읽고, 화자 라벨 모양이 달라도 같은 발화 구조로 바꿔 계산합니다.

오류율이 100% 를 넘는 이유는 무엇인가요? 인식 결과가 정답보다 훨씬 길어 삽입이 많으면 오류가 정답 글자 수보다 커집니다. 오류율의 분모는 정답 글자 수입니다.