VITO API 성능 비교

이번 Tutorial에서는 VITO API 를 이용해 음성 데이터를 텍스트로 변환해보고 결과가 얼마나 정확한지 확인해봅니다. 또한, 측정한 성능이 STT 시장에서 어느 정도의 수준인지 확인합니다.

VITO API 성능 비교

by Kobie

이번 Tutorial에서는 VITO API 를 이용해 음성 데이터를 텍스트로 변환해보고 결과가 얼마나 정확한지 확인해봅니다. 또한, 측정한 성능이 STT 시장에서 어느 정도의 수준인지 확인합니다.

1. STT 평가 지표 이해하기

WER, CER

  • WER(Word Error Rate)
    • 단어 에러 비율(WER) = (S +D + I) / N
    • D : 음성 인식된 텍스트에 잘못 삭제된 단어 수
    • S : 음성 인식된 텍스트에 잘못 대체된 단어 수
    • I : 음성 인식된 텍스트에 잘못 추가된 단어 수
    • N : 정답 텍스트의 단어 수
  • CER(Chatacter Error Rate)
    • 음절 에러 비율(CER) = (S+D+I) / N
    • D : 음성 인식된 텍스트에 잘못 삭제된 음절
    • S : 음성 인식된 텍스트에 잘못 대체된 음절
    • I : 음성 인식된 텍스트에 잘못 추가된 음절
    • N : 정답 텍스트의 음절

추가적으로 초,중,종성을 분리해서 에러율을 측정하는 방법도 있습니다.

WER, CER 측정 라이브러리(Python)

  1. Jiwer
  2. Speechbrain

Levenshtein distance

문장 끼리의 유사성을 측정하는 방법입니다. Levenshtein distance 는 한 문장을 다른 문장으로 변환하는 최소 횟수를 두 string 간의 거리로 정의합니다.

사전 지식

형태적 유사성 vs 의미적 유사성, string distance‘영화’와 ‘애니메이션’ 두 단어의 유사성을 판단하자면, 글자와 글자수가 다르므로 형태적으론 유사하지 않지만 의미적으론 유사합니다.이처럼 string의 형태적인 거리를 정의하는 방법을 string distance 라고 합니다.

  • Levenshtein Distance 를 알아보기 전에, 두 라이브러리 다 WER, CER 값을 구할 때 Levenshtein Distance 를 사용하는지 확인을 해봅시다.

[Levenshtein distance 에서 string 을 변화하기 위한 3가지 edit 방법]

  1. delete
    점심을먹자점심먹자로 바꾸기 위해서는 을 삭제해야 합니다.
  2. insert
    점심먹자점심을먹자로 바꾸기 위해서는 을 삽입해야 합니다.
  3. substitution
    점심먹자점심먹장 로 바꾸기 위해서는 으로 치환해야 합니다.

Levenshtein distance 는 Dynamic Programming 을 이용하여 두 string 간의 최소 거리를 측정하는데, 그 규칙은 아래와 같습니다.

d[i,j] = min(
             d[i-1,j] + deletion cost,
             d[i,j-1] + insertion cost,
             d[i-1,j-1] + substitution cost
            )

참고 링크 : https://lovit.github.io/nlp/2018/08/28/levenshtein_hangle/,


2. 평가 방법

  1. VITO, Clova, Google STT API 각각으로 음성데이터 4개에 대한 전사 작업을 진행합니다.
  2. 각 전사 결과와 Ground Truth(이하 GT) 사이의 CER 값을 측정합니다.
  • WER대신 CER만 측정한 이유
    • 한국어는 어근과 접사에 의해 단어의 기능이 결정되는 교착어 입니다. 일반적으로 조사나 접사 보다는 어근의 의미가 더 중요한데, 단어의 앞부분을 잘 전사해도 접사나 조사가 틀리면 틀린 단어로 인식합니다.
    • WER 문장부호[’.’, ‘,’, ‘!’, ‘?’…]에 영향을 받습니다. 전사 결과가 GT의 문장부호 규칙과 비슷하다면 다소 편향적인 측정이 될 수 있습니다.
    • 더 읽어보기: 한국어 특성에 따른 문제
  1. 측정한 값들을 표로 정리합니다.

아래 내용에서 Clova Speech Recognition(CSR) API 라고 표현한 것은 AI·NAVER API / Application / CLOVA Speech Recognition(CSR) 를 의미합니다.


3. 사용할 4개의 데이터


4. Clova Speech Recognition API 사용기

1. clova cloud platform 에서 어플리케이션 생성

2. 인증키를 이용해 코드 작성

  1. 파이썬 파일 실행

5. Clova Speech API 사용기

https://console.ncloud.com/nest/domain

  1. naver cloud platform 에서 AI Services 카테고리에 있는 CLOVA Speech 의 도메인을 생성을 시도
    • 도메인 생성 시도합니다.
    • 도메인을 생성하려고 하면 Bucket을 생성하라는 창이 뜹니다.
    • Object Storage에서 Bucket을 만듭니다.
  2. Object Storage에서 Bucket 만들기
    • Object Storage 이용을 신청합니다.
    • Bucket Management 에서 버킷 생성생성 결과 확인합니다.
  3. 다시 도메인 생성
  4. 다음의 두 정보를 CLOVA Speech 서비스 빌더에서 확인
    • ${Invoke URL} Copy from domain/setting/Invoke Key
    • ${Secret Key} Copy from domain/setting/Secret Key
  5. 음성 파일 준비
    CLOVA Speech API 는 다음 세 가지 방법 중 하나로 이용할 수 있습니다.
    • object storage 파일 url로 인식 요청
    • 외부 url로 인식 요청
    • 로컬 경로에 파일을 업로드해서 요청
      전사하고자 하는 음성 파일을 로컬에 저장해두고 코드 상에서 경로를 입력합니다.
  6. 파이썬 코드 작성

코드상에서 음성 파일의 경로를 수정해주고 CLOVA Speech 도메인에서 Secret Key와 CLOVA Speech Invoke URL를 확인하여 invoke_url, secret 변수값을 채워줍니다.

  1. 파이썬 파일 실행
실행 결과

6. 전사 결과

  • 전사 결과를 살펴볼 때는 3가지 오류를 각각 확인하면 좋습니다.
  • 각 API의 전사 결과에서 정상적으로 전사한 부분은 텍스트 색을 파란색으로 적용했습니다.
    1. 대체된 글자인지
    1. 삭제된 글자인지
    1. 추가된 글자인지

보통 전사 결과를 통해 글자가 추가되는 경우는 드물고, 잘못 인식해서 글자가 대체되거나 인식하지 못 하여 삭제 되는 것 같습니다.

데이터 1

Ground Truth감계 덕산 안에 이차 때문에 연락을 드렸는데 고 이차 임시 사용 승인 혹시 임시 승인 허가증 좀 받을 수 있겠습니까 팩스로 임시 사용 허가증. 선생님 죄송합니다만 이 업무 보는 부서로 제가 연결을 해드려야 될 거 같은데 혹시 어디를 위치 사용하신다는 말씀이십니까? 감계 덕산 안에 감계 북면에 아파트가 덕산 안에가 임시 사용 승인이 났거든요. 허가를 담당했던 주택정책과로 바로 연결을 해드릴 텐데요 잠시만 더 기다려 주시겠습니까? 의창구 지역에 아파트 허가 담당하는 담당자가 있는데 통화 중으로 확인되어서 제가 직통 번호 안내 드려야 될 거 같은데 괜찮으실까요?
VITO API관계 덕산 안에 이 차 때문에 연락을 드렸는데 고 이 차, 그 임시 사용승인 혹시 임시 사용승인 허가증 좀 받을 수 있겠습니까? 팩스로 임시 사용 허가점. 선생님, 죄송합니다만 이 부분 업무보는 부서로 제가 연결을 해드려야 될 거 같은데. 혹시 어디를 임시 사용하신다는 말씀이십니까? 감계 덕산 안에 관계 북면에 아파트가 덕산 안에가 임시 사용 승인이 났거든요. 허가를 담당했다. 주택정책과로 바로 연결을 해드릴텐데요. 잠시만 더 기다려주시겠습니까? 의창구 지역에 아파트 허가 담당하는 담당자가 있데 통화 중으로 확인되어서 제가 직통 번호 안내드려야 될 것 같은데 괜찮으실까요?
Clova Speech관계 독산 안에 이차 때문에 연락을 드렸는데 고 2차 임시 사용 승인 혹시 임시 사용 승인 허가증 좀 받을 수 있겠습니까 팩스로 임시 사용 허가 선생님 죄송합니다만 이 업무 보는 부서로 제가 연결을 해드려야 될 거 같은데 혹시 어디를 위치 사용하신다는 말씀이십니까 감개 덕산 안에 감개 북면에 아파트가 덕산 안에가 임시 사용 승인이 났거든요. 허가를 담당했던 주택 정세가로 바로 연결을 해드릴 텐데요. 잠시만 더 기다려 주시겠습니까 의창구 지역에 아파트 허가 담당하는 담당자가 있는데 통화 중으로 확인되어서 제가 직통 번호 안내해 드려야 될 거 같은데 괜찮으실까요.
CRS(Clova Speach Recognition) API그럼에도 손 안에 착한 일을 하기로 했는데 거의 차도 사용 승인 없이 1시간 뒤에 임신도 사용할 수 있는 즐거움이란 아이도 너무 맘에 들어서 두개가 연결을 해도 될 것 같은데 혹시 어디에 있지하신다는 말씀일까 감계 덕산 아내 공개 도면에 아파트가 초상화 내가 임시 사용승인 인하 종료 후 관리 안된 주택 전세 계약 시에 알람 의창구 지역 아파트 허가 담당하는 담당자 검토중으로 확인 되어서 그렇지 좀 더 많이 걸릴 것 같은데 괜찮을까요
Google STT Demo아네 이사 때문에 연락 드렸는데 혹시 좀 받을 수 있겠습니까? 팩스로 죄송합니다만 제가 연결 해야 될 거 같은데 혹시 어디 있지 사용하신다는 말씀이십니까? 덕산아내 북면에 아파트가 놨거든요. 아파트 담당하는 확인되어서 될 거 같은데 괜찮으실까요?

데이터 2

Ground Truth시에서 하는 저/ 뭐지 아파트 청소 같은 거 이런 건 없습니까? 지금 현재 선생님 시에서 운영하는 아파트가 의창구 북면에 이쪽도 괜찮으신 건가요 우선 그러면은 확인할 수 있도록 제가 관리하는 부서로 한번 확인하고 연결해 드릴 텐데요 잠시만 기다려 주시겠습니까? 그/ 청소직이나 이런 부분은 관리사무소로 한번 문의를 하셔야 된다라고 하시더라구요. 아/ 관리사무소로요 근데 관리사무소 전화번호도 모릅니다. 제가 관리사무소 전화번호 안내 드릴 텐데 메모 가능하실까요? 네 시에서 이래 저/ 저/ 그/ 저/ 좀 사람도 넣어주고 그래 해요? 시에서 모집하는 건 아니구요 청소 (()) 이런 부분이 그 아파트 관리사무소에서 자체적으로 한다라고 하십니다.
VITO API시에서 하는 저 뭐꼬 아파트 청소 같은 거 이런 거는 없습니까? 지금 현재 선생님 시에서 운영하는 아파트가 의창구 북면에 이쪽도 괜찮으신 건가요? 우선 그러면은 확인할 수 있도록 제가 관리하는 부서 한번 확인하고 연결해드릴텐데요. 잠시만 기다려주시겠습니까. 그 청소직이나 이런 부분은 관리사무소로 한번 문의를 하셔야 된다라고 하시더라고요. 아, 관리사무소로요. 근데 관리사무소 전화번호도 모릅니다. 제가 관리사무소 전화번호 안내드릴 텐데 메모 가능하실까요? 인제 시에서. 이 저 저 그 저 좀 사람도 넣어주고 그래 해요. 시에서 모집하는 건 아니구요. 청소년들. 이런 부분이 그 아파트 관리사무소에서 자체적으로 한다라고 하십니다.
Clova Speech시에서 하는 아파트 청소 같은 거 이런 건 없습니까 지금 현재 선생님 시에서 운영하는 아파트가 의창구 북면에 이쪽도 괜찮으신 건가요 우선 그러면은 확인할 수 있도록 제가 관리하는 부서로 한번 확인하고 연결해 드릴 텐데요. 잠시만 기다려 주시겠습니까 청소기기나 이런 부분은 관리사무소로 한번 문의를 하셔야 된다라고 하시더라구요. 관리사무소로요 근데 관리사무소 전화번호도 모릅니다. 제가 관리사무소 전화번호 안내 드릴 텐데 메모 가능하실까요. 시에서 사람도 넣어주고 그래 해요. 시에서 모집하는 건 아니구요. 청소년 이런 부분이 그 아파트 관리사무소에서 자체적으로 한다라고 하십니다.
CRS(Clova Speach Recognition) API집에서 하는 최고 아파트 청소 같은 거 일어나 보니까 그림 한자 쓰기에도 좋은 아파트가 의창구 북면의 일족도 괜찮으신가요 확인할 수 있도록 관련 부서로 한번 확인하고 연결해 드릴테니 잠시만 기다려 주시겠습니다  정서적이다 이런 부분 관리 사무소로 한번 문의를 해야 된다라고 하시더라구요 관리 사무소 알아야 하는데 관리 사무소 전화번호 모릅니다 관리 사무소 전화번호 알려 드릴테니 가능할까요 몇시에 자 이제 끄자 좀 사람들도 주거급여 헤어에서 보드 타는 건 아니구요 성 소현이랑 그리고 아파트 관리 사무소에서 자체적으로 한 드라마입니다
Google STT Demo뒤에서 많은데 먹고 아파트 청소 같은 거 이런 거는 주니까 지금 핸들링이 3동 성원아파트 1차 한 거 보면 쪽도 괜찮으신가요? 확인할 수 있도록 관리하는 부서 한번 확인하고 연결해 드릴텐데요. 잠시만 기다려 주시겠습니까? 이런 부분을 관리 사무소로 문일 하게 하는 거라고 하시더라고요. 관리사무소 근데 관리사무소 전화번호 모릅니다 관리사무소 전화번호 알려 드릴 테니 메모 가능하실까요? 있잖아 그 사람도 더 주고 그렇게 해요. 모집하는 건 아니고요. 청소하지 이런 부분이 그 아파트 관리사무소 자체적으로 안 달라고 하십니다.

데이터 3

Ground Truth마산에서 진해 방향으로 가는 쪽이었구요 다리 한가운데에 갔다가 2차선에 있어서 위험해서 연락드렸어요. 마천대교 위에 2차선에 뭐 떨어져 있다는 말씀이십니까? o/ 기다란 물체 네 네 네 천막으로 이렇게 쌓여 있었는데 네 좀 약간 2차선 다 차지하고 있어서. o/ 선생님 혹시 제가 이 부분을 (()) 께서 관리하고 있어서 전달은 할 텐데요 혹시 연락처 하나만 남겨 주시겠습니까?
VITO API마산에서 진해 방향으로 가는 쪽이었고요. 다리 한가운데 갔다가 이 차선에 있어서 위험해서 연락드렸어요. 마천대교 위에 이 차선에 뭐 떨어져 있다는 말씀이십니까? 자라 물체 네네네, 천막으로 이렇게 쌓여있었는데 예, 좀 약간 차선 차지하고 있어서 선생님. 혹시 제가 이 부분은 마창기서 관리하고 있어서 전달은 할텐데요. 혹시 연락처 하나만 남겨주시겠습니까?
Clova Speech나 산에서 지내고 방향으로 가는 쪽이었구요. 다리 한가운데 가다가 이 차선에 있어서 마천대교 위에 2차선에 떨어져 있다는 말씀이십니까 따라 물체 네네네 편막으로 이렇게 쌓여 있었는데 이게 좀 약간 좌선 다 차지하고 있어서 선생님 혹시 제가 이 부분은 마차리에서 관리하고 있어서 전달은 할 텐데요. 혹시 연락처 하나만 남겨 주시겠습니까
CRS(Clova Speach Recognition) API나사렛대중에 방향으로 가는 게 몇 개야 알람 가운데에 탁자가 있어서 네이버 위험에서 가천대 교 위해 사전에 떨어져 있다는 사실에 따라 물체의 내레이션으로 계속 말썽 대장까지였던 아버지하고 있어 봐서는 혹시 제가 집에서 관리하고 있었다 전 다른 학생들 여기 몰랐던 몇시 됐습니까
Google STT Demo김해 방향으로 가면 적이 없어요. 근데 아빠가 2차선 위험해서 위에 2차선을 떨어질 때는 말씀이십니까? 네네네 천막으로 알고 있었는데 다 차지하고 있어서 혹시 제가 이번에 막창집에서 가려고 있어서 전달은 할 텐데요 주시겠습니까?

데이터 4

Ground Truth창원시 그/ 전기차에 대해서 좀 여쭤보려고 전화드렸는데. 확인할 수 있도록 구매 보조금 담당하는 시청에 있는 교통 물류과로 한번 연결을 해드릴 텐데요 잠시만 기다려 주시겠습니까? 현재 부서 연결이 좀 지연되고 있어서 직통 번호 안내해 드릴 텐데 메모 가능하실까요?
VITO API창원시 그 전기차에 대해서 좀 여쭤볼려고 전화드 확인할 수 있도록 금매 보조금 담당하는 시청에 있는 교통물류과로 한번 연결을 해드릴텐데요. 잠시만 기다려주시겠습니까? 네, 현재 부서 연결이 좀 지연되고 있어서 직통 번호 안내드릴 텐데 메모 가능하실까요?
Clova Speech 창원시 전기차 대해서 좀 여쭤보려고 전화드 확인할 수 있도록 구매 보조금 담당하는 시청에 있는 교통 물류과로 한번 연결을 해드릴 텐데요. 잠시만 기다려 주시겠습니까 현재 부서 연결이 좀 지연되고 있어서 직통 번호 안내해 드릴 텐데 메모 가능하실까요.
CRS(Clova Speach Recognition) API강원 시대 전기 철 하게 될 수 있도록 간단한 해석에는 교통 물류과가 언제부터 연결이 좀 전에 걸쳐서 터번 안해도 되는데 가능할까요
Google STT Demo정은 씨, 그 전기차 보조금 단단한 2차로 한번 양자리는 드릴텐데 잠시만 기다려 주시겠습니까? 언제부터 연결 장치 언제 근처에서 집 좀 더 나아질 텐데 메모 가능하실까요?

7. 각 API 전사 결과와 GT 사이의 CER 측정 결과

각 API의 전사 결과와 GT 사이의 CER 측정 결과입니다.

  • CER(글자 에러율) 값은 0에 가까울 수록 성능이 좋음을 의미합니다.
  • API 마다 문장부호 규칙이 달라 CER 측정 시에는 문장부호를 제거하고 측정하였습니다.
VITO API CER(%)Clova Speech CER(%)CSR(Clova Speech Recognition) API CER(%)Google STT Demo CER(%)
데이터 16.64.8462.9959.47
데이터 23.936.2937.4034.64
데이터 38.2121.2366.4351.36
데이터 46.545.6072.8962.61
평균6.329.4959.9252.02

8. 결과 분석

종합 분석

  • VITO API 와 Clova Speech 의 전사 결과가 Clova Speech Recognition API, Google STT 데모 보다 월등히 뛰어난 성능을 보입니다.
  • VITO API 와 Clova Speech 의 전사 성능은 우열을 가리기 힘듭니다. 샘플 데이터로 사용한 4개의 데이터에 대한 결과는 다음과 같습니다.
    • 글자 오류율 평균은 VITO API 가 3.17% 더 낮습니다
  • 전사 결과를 살펴보면 Clova, Google 의 전사 결과는 문맥을 이해하기 힘들 정도로 전사가 되었습니다.

개별 분석

  • VITO의 전사 결과
    • GT와 거의 비슷합니다. 음성을 직접 들어보면 GT 보다 더 정확한 것 같습니다. GT는 완벽한 문장으로 만들려고 간투어 등을 생략하는 경향이 있었는데, VITO의 전사 결과는 간투어도 적절히 전사합니다.
    • 화자가 바뀌면 새로운 문장으로 전사 결과를 보여줍니다.
    • 사투리도 정상적으로 전사합니다.
  • Clova Speach Recognition API 는 요청 후 전사 결과를 받기까지 시간이 비교적 오래 걸리는 경향이 있습니다.
  • Google STT Demo 는 발화를 인식하기 어려우면(특정 confidence값 이하면) 전사를 포기하는 경향이 있는 것 같습니다. 그 이유로는 Recall 보다는 Precision의 중요도를 높게 평가하기 때문이지 않을까 싶습니다.

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to 기업을 위한 음성 AI - 리턴제로 blog.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.