음성인식률 높이는 방법

575 views
Skip to first unread message

bwall...@gmail.com

unread,
Jun 22, 2020, 4:06:49 PM6/22/20
to zeroth-help
안녕하십니까, Lucas Jo 선생님.

저는 지금 음성인식률을 높이려고 하고 있습니다.

1) 음성인식률을 높일수 있는 지표들에 대하여 가르쳐 주십시오,
무엇들을 참고 및 변경시켜야 음성인식률을 높일수 있는지...

2) 선생님이 권장하시는 음성인식자료의 크기에 대하여 가르쳐 주십시오
최소한의 음성자료 시간수와 발화자수에 대해서...

3) 음성자료시간수만 많으면 zeroth 오픈소스를 가지고 인식률을 높을수 있습니까?
큰 코드변경없이 시간수만 많으면 인식률이 올라갈가요?

감사합니다.

정인수

unread,
Jun 23, 2020, 2:48:12 AM6/23/20
to zeroth-help
제 경험을 말씀드립니다.

속기사를 통해 200시간 녹취를 했고, 그 녹취 파일 한개의 음성이 30~1시간짜리로 굉장히 긴 음성 이였습니다.(음성이 길수록 정확도가 낮음을 알게됨...)

그래서 언어모델+발음사전을 그대로 두고, 음향모델 학습 후 음향모델을 기반으로 git에서 찾은 웹소켓 프로그램을 통해 STT된 단어들의 시작시간 및 종료시간을 파악해서

정답지(전사된 스크립트)와 STT 디코딩 된 결과를 비교해서 음성(스크립트)을 조금더 작게 

분할하는 작업을 거친 후 재 학습을 했습니다.

이렇게하고도 wer 수치가 너무 좋지않아, 

녹취 된 스크립트를 말뭉치로 이용 bm 전용 사전 및 언어모델을 생성하였습니다.(공개된 사전 및 언어모델에서 병합하였음)


 이렇게 3번에 걸쳐서 나온 수치는 아래와 같습니다.

1. 매우 긴음성 + 공개 사전 + 공개 언어모델 = 34.79% ~ 40.56% wer, 4-gram 기준

2. 음성분할 + 공개 사전 + 공개 언어모델 = 28.74% ~ 40.53%

3. 음성분할 + bm 전용사전 + bm 전용 언어모델 = 14.25% ~ 17.22%




2020년 6월 23일 화요일 오전 5시 6분 49초 UTC+9, bwall...@gmail.com 님의 말:

정인수

unread,
Jun 23, 2020, 2:59:17 AM6/23/20
to zeroth-help
음성과 스크립트를 분리하는데 유용하게 쓴 프로그램 websocket은 다음과 같습니다.


예전과 지금 소스가 많이 달라지긴 했는데 결과 값을 보시면, word, start, end, conf 형태의 json형태로 떨궈주면

그걸 파싱하여 10 연속되는 단어의 연결을 만들고 정답지와 비교해서 해당 스크립트의 시작시간과 종료시간을 찾아내서 자르고,

음성도 그 시간만큼 trim하여 음성과 스크립트가 정확히 pair 될 수 있도록 한 후 학습 구조에 맞게 만들었습니다..

이렇게 음성/스크립트를 잘게 자른 이유는 음성길이가 길어지면 시간도 오래 걸리고, 정확도도 떨어지더라고요.
(공개음성이 30초 이내인데, 테스트 목적으로 강제적으로 5분단위, 10분단위, 30분단위로 강제로 병합해서 테스트 해보니 시간이 길어지면 길어질 수록 wer이 좋지 않더군요..)

2020년 6월 23일 화요일 오전 5시 6분 49초 UTC+9, bwall...@gmail.com 님의 말:
안녕하십니까, Lucas Jo 선생님.

bwall...@gmail.com

unread,
Jun 23, 2020, 7:17:53 AM6/23/20
to zeroth-help
정인수 선생님.
귀중한 경험 나누어 주셔서 대단히 감사합니다.

한가지 질문이 있습니다.
녹취 된 스크립트에 "사람" 이라는 단어가 제일 많이 중복되였다면 그 단어의 인식률이 제일 높을가요?

감사합니다.

정인수

unread,
Jun 23, 2020, 7:39:36 AM6/23/20
to zeroth-help
저도 초보입니다 그래서 루카스 조께서 답변을 주시겠지만

스크립트에 단어가 많다는건 음성도 그 부분이 많다는건지요?

기계에 같은 단어이지만 다양한 형태의 음성을 많이 들려 주면 잘 인식 할것 같습니다

상담원이 안녕하세요 하는거랑

낭독체로 안녕하세요 하는거랑 완전 다르잖아요?

딱히 비교는 해보지 않았는데 기계에 강조하고자 하는 음성을

다양하게 많이 넣으면 그만큼 열심히 학습하여

잘 인식 할것 같다고 추측 해봅니다

저도 그런 방법으로 잘 될지 매우 궁금하네요^^

경험으로는 해당 bm으로 학습 시키고 해당 bm과 유사한 음성이 들어오면 잘

되는데 전혀 분야가 다른 bm의 음성이 들어오면 인식율은

현저히 떨어지는것은 사실인 듯 합니다

음향모델이 기계에 인간의 언어의 말하는 특징을 학습 시키는거니까

참고로 강조하려는 단어는 꼭 발음사전 및 언어모델에 포함되어 있겠지요?

저도 특정단어가 잘 디코딩되게 언어모델에 숫자값을 임의로 높게 변경 해볼까 싶었는데 그러한 시도는 하지 않아도 잘 인식이 되어
무모한 방법은 사용하지는 않았네요

Lucas Jo

unread,
Jun 25, 2020, 9:58:13 AM6/25/20
to zeroth-help
음성인식의 정확도는 음향모델(DNN) 과 언어모델 (HCLG wFST graph) 가 얼마나 넓은 커버리지를 가지느냐 따라 결정됩니다.

당연히 음향모델과 언어모델 학습에 들어가는 데이터의 양이 방대해 질 수 밖에 없습니다. 

언어를 사용하는 개인의 입장에서는 잘 느끼지 못하지만 실제 사람이 사용하는 언어의 다양성은 어지간한 인식의 범위를 아득히 넘어섭니다. 매우 방대합니다.

저희 회사의 경우만 해도 음향모델 학습에 사용하는 순수한 데이터의 크기는 10k 시간 가까이 됩니다.

최소한의 음성자료와 시간수와 발화자 수는 의미가 없습니다. 가능한한 다양하고 많은 발화자와 시간이 필요하며 목적은 언제나 단 하나입니다.

내가 준비한 데이터가 그게 data augmentaion을 했든 안했듯 .... 음향모델의 학습에서 이 음향모델을 속이고 충분히 생소해야 한다는 것입니다.

물론 시간은 많을 수록 좋지만 computing power 에는 언제나 한계라는게 있기때문에 효과적인 학습 방법이 필요합니다.

물론 오픈소스에 그 모든 것을 담을 수는 없습니다.  차근차근 해나가시면 필요한 때 필요한 문제들을 해결하시게 될 겁니다.



2020년 6월 23일 화요일 오전 5시 6분 49초 UTC+9, bwall...@gmail.com 님의 말:
안녕하십니까, Lucas Jo 선생님.
Reply all
Reply to author
Forward
0 new messages