WER은 잘못된 이름, 잘못된 숫자, 빠진 부정어를 빠진 관사 하나와 똑같이 점수 매깁니다. 전사 시스템은 대표 수치가 아니라 어떤 오류를 잡아내는지, 그리고 수정을 볼 수 있는지로 판단하세요.
단어 오류율(WER)은 음성 인식을 평가하는 표준 기준입니다. 사람이 검수한 기준 전사본을 준비하고, 기계의 출력을 단어 단위로 한 줄씩 맞춰 놓은 뒤 세 가지 실수를 셉니다. 대치(잘못된 단어), 삽입(말하지 않은 단어가 들어간 경우), 삭제(빠진 단어)입니다. 이 셋을 더한 뒤 기준 전사본의 단어 수로 나눕니다.
WER = (대치 + 삽입 + 삭제) / 기준 전사본의 단어 수
줄 맞추기는 눈으로 하지 않습니다. 두 전사본은 최소 편집 거리(Levenshtein distance, 글자가 아닌 단어에 적용)로 정렬됩니다. 출력과 기준을 짝짓는 모든 방법 가운데 편집이 가장 적은 방법을 골라 그 편집 수를 셉니다. 삽입도 세고 분모가 기준의 길이이기 때문에 WER은 100퍼센트를 넘을 수 있습니다. 조용한 1분 동안 글자를 지어내는 모델은 아무것도 적지 않는 모델보다 나쁜 점수를 받습니다.
기준 문장이 "we will meet Dr Okafor at nine on Thursday"이고 단어가 아홉 개인데, 기계가 "we will meet the doctor at nine on Tuesday"라고 적었다고 합시다. 대치가 세 번(Dr, Okafor, Thursday) 있으므로 아홉 단어에 대해 WER은 33퍼센트입니다. 단어의 3분의 2는 맞지만 여전히 엉뚱한 날, 엉뚱한 회의에 가 있는 셈입니다. "Thursday"만 틀렸다면 점수는 11퍼센트였을 것입니다. 모든 단어가 맞고 아무도 말하지 않은 "음"만 추가된 버전도 삽입 한 번이 대치와 같은 값으로 세지므로 11퍼센트가 됩니다.
세기 전에 두 텍스트를 보통 정규화합니다. 이 선택이 모델 성능만큼 점수를 움직입니다. "Dr"과 "Doctor"는 같은 단어인가요? "nine"과 "9"는 같은가요? 대소문자와 문장부호는 셈에 들어가나요? 엄격하게 채점하면 "Dr"과 "Doctor"는 대치로 처리됩니다. 공개된 점수 대부분은 모두 소문자로 바꾸고, 문장부호를 제거하고, 모든 숫자를 단어로 또는 숫자로 한 가지 방식으로 통일한 뒤 비교합니다. 따라서 벤더의 수치는 보이지 않는 정규화기에 은근히 기대고 있습니다. 중국어, 일본어, 태국어처럼 단어 사이에 공백을 쓰지 않는 언어는 셀 단어 경계가 뚜렷하지 않아, 대신 문자 오류율(CER)로 채점합니다. 같은 공식을 단어가 아니라 문자에 적용하는 것입니다.
두 가지가 따라옵니다. 첫째, WER 5퍼센트는 스무 단어에 한 단어꼴이며, 한 시간짜리 강연이라면 수백 단어에 해당합니다. 참고로 사람 전사자는 대화체 음성에서 대략 4~5퍼센트 수준으로 자주 언급되며, 2017년에 자주 인용된 Switchboard 전화 코퍼스 결과에서는 기계가 약 5.1퍼센트를 기록했습니다. 다만 두 수치 모두 오디오와 채점 규칙에 따라 달라집니다. 둘째, 수치는 테스트 오디오에 전적으로 좌우됩니다. 깨끗한 낭독 음성과 억양 및 겹쳐 말하기가 있는 시끄러운 패널 토론은 전혀 다른 수치를 냅니다. 대표 WER은 벤더의 시스템만큼이나 벤더의 테스트 세트를 설명합니다.
여기까지가 세는 방법입니다. 그러나 WER이 놓치는 것은 각 오류가 독자에게 치르게 하는 대가입니다.
WER은 모든 단어를 동일하게 취급합니다. 독자는 그렇지 않습니다.
이 각각은 WER 열에서는 한두 개의 오류입니다. 독자의 열에서는 아무것도 아닌 것부터 다른 날 다른 회의에 참석하게 되는 것까지 다양합니다. 그러니 질문은 "오류율이 얼마인가"만이 아니라 "어떤 종류의 오류인가, 그리고 무엇이 그것을 잡아내는가"여야 합니다.
여러 계층이 인식이 틀린 부분을 잡아내며, 모든 변경은 기록되어 검토하고 되돌릴 수 있습니다. 실시간 전사에서는 이 작업이 텍스트가 계속 들어오는 중에 일어납니다. 각 줄은 처음에는 계속 바뀔 수 있는 초안으로 나타나고, 그다음 확정됩니다(실시간 번역 지연 시간 설명에서 그 이유를 다룹니다).
어떤 실수는 소리에는 맞지만 문장에는 맞지 않습니다. 문장에 "there"가 필요한데 "their"가 나오는 경우가 그렇습니다. 이런 것은 문맥으로 잡아낼 수 있으며, 수정은 조용히 덮어쓰는 대신 독자에게 눈에 보이는 업데이트(API의 transcript.amended)로 전달됩니다. 문맥은 문장이 예측할 수 있는 단어에 강합니다. 예측할 수 없는 단어에는 속수무책입니다.
이름과 기술 용어는 문맥이 고치지 못하는 오류입니다. 이름은 한 번만 나올 때가 많아서, 예측할 근거가 주변에 없기 때문입니다. 참조 스크립트가 이 문제를 해결합니다. 시작 전에 음성, 슬라이드 또는 이름과 용어 목록을 시스템에 주면, 그 단어들이 엔진이 잘못 들은 것보다 우선합니다. 녹음 중에는 스크립트가 텔레프롬프터처럼 전사를 따라가므로, 진행자는 엔진이 어디까지 왔는지 볼 수 있습니다. 스크립트는 예측할 수 있는 단어를 다루고, 잡음이 많은 오디오와 억양은 예측할 수 없는 단어를 만들어 냅니다.
어떤 오류는 방 안의 사람만 볼 수 있습니다. 수동 수정을 쓰면 진행자가 전사가 여전히 실시간인 동안 어떤 단어나 줄이든 고칠 수 있고, 방송의 모든 청취자가 그 변경을 봅니다. 시스템은 가능성이 큰 후보를 가리켜 줍니다. 엔진이 확신하지 못한 단어는 색이 칠해지고 밑줄이 그어지며, 진행자는 전사 전체를 다시 읽는 대신 불확실한 구간을 하나씩 넘겨 볼 수 있습니다. API로는 GET /v1/recordings/{id}/corrections가 녹음의 수정 목록을 반환하고, POST /v1/corrections/{id}/revert가 수정 하나를 되돌립니다. 자세한 내용은 API 참조를 보세요. 그래도 방 안의 사람조차 들을 수 없었던 줄은 고칠 수 없습니다.
마지막 계층은 어떤 오디오는 복구할 수 없다는 것을 받아들입니다. 줄의 점수가 전사의 신뢰도 임계값(기본값 0.60인 confidence.hideBelow)보다 낮으면, 청취자는 추측 대신 그 자리에서 "Audio unclear"를 보고 그 줄은 소리 내어 읽히지 않습니다. 독자는 한 줄을 잃지만, 지어낸 줄을 얻지는 않습니다.
같은 질문들이 이 계층들을 만들었고, 그 질문은 우리를 포함한 어떤 벤더의 정확도 주장에도 똑같이 적용됩니다.
어떤 정확도 주장이든 읽을 때 쓰는 짧은 체크리스트입니다.
VocalStack은 위의 첫 번째 이유 때문에 내부 WER 수치를 공개하지 않습니다. 그 수치는 여러분의 오디오가 아니라 우리의 테스트 세트를 설명하기 때문입니다. 우리는 정확도를 지속적으로 측정합니다. 다른 시스템과 비교할 때는 공개된 독립 벤치마크와 벤더가 공개한 수치를 사용하며, 비공개 테스트는 절대 사용하지 않습니다. 나머지 판단은 여러분의 오디오에 맡깁니다.