Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

README.md

Pronounce_Evaluation

한글 발음 분석 방법

  • Etri의 발음 평가 모델과 올바르미 발음 분석 알고리즘을 각각 0.7, 0.3의 가중치를 두어 합산한 후 최종 accuracy를 계산
  • Etri 발음 평가 모델의 경우 오디오 자체가 가지는 특성을 통해 발음을 분석하고, 올바르미 발음 분석 알고리즘의 경우 오디오로부터 텍스트를 추출하여 발음을 분석
  • 즉, 최종 accuray = (오디오 기반의 발음 분석 결과 * 0.7) + (텍스트 기반의 발음 분석 결과 * 0.3)
  • 최종 accuray는 0~5 사이의 float 값을 가지도록 scaling

1. Etri 발음 평가 모델

  1. 평가 전문가가 학습 데이터에 대해 발음 점수 채점
  2. 음성 신호 입력받아 전문가 점수 출력하도록 모델 학습
    • 음성 신호를 40여개의 특징으로 분석하여 예측 모델의 성능 높임
    • 주요 특징으로 음소, pause(멈춤), chunk(한 번에 말하는 묶음) 등의 길이, 속도 등에 대한 분석 정보, native, non-native 음향 모델 점수, 강세/억양 등의 운율 특징이 있음

2. 올바르미 발음 분석 알고리즘

  1. 녹음된 사용자의 음성을 google STT 기술을 통해 text로 변환
  2. target 문장(이하 script)의 글자 수를 letter_total에 저장
  3. script와 1.의 문장(이하 voice)를 어절 단위로 분해한 후 어절 단위로 1:1 비교
    1. 어절이 일치하면: letter_correct에 어절의 글자 수를 더함
    2. 어절이 일치하지 않으면: 두 가지 경우로 나눠 정확도를 계산하고, 그 중 더 높은 값을 적용
      • 가령 voice가 "안냐세요"라면 CASE 1, "구지" 라면 CASE 2에 해당됨
      • CASE 1: 어절을 각각의 글자로 분해하여 한 글자씩 비교
        • 분해된 voice와 voice를 일치하는 것과 일치하지 않는 것을 찾아 거리가 3 이내인 것과 비교하여 매핑(대응 쌍 만들기)
          • {0: {'안': ['안']}, 1: {'냐': ['녕']}, 2: {'세': ['세']}, 3: {'요': ['요']}}
        • 일치하는 글자는 그대로 letter_correct에 반영
          • ex) 위에서 0, 2, 3의 경우
        • 일치하지 않는 글자는 발음이 틀린 것
          • ex) 위에서 1의 경우
      • CASE 2: 어절 자체를 비교
        • 초성, 중성, 종성으로 나누어 판단하는데 초성이 같은 지점부터 구개음화, ㅔ와 ㅐ 발음, 연음을 고려하여 발음 판단
        • 구개음화
          • 정의: ㄷ이나 ㅌ이 모음 ㅣ를 만나 ㅈ, ㅊ으로 바뀌는 것
          • script에서 첫 글자의 종성이 ㅌ이고 그 다음 글자의 초성이 ㅇ, 중성이 ㅣ인 경우에 voice의 초성이 ㅊ인 경우 correct
          • script에서 첫 글자의 종성이 ㄷ이고 그 다음 글자의 초성이 ㅇ, 중성이 ㅣ인 경우에 voice의 초성이 ㅈ인 경우 correct
          • ex) '굳이' -> '구지'
        • 모음 ㅔ와 ㅐ 발음
          • 중성이 ㅔ 또는 ㅐ이면 둘 중 무엇으로 발음되든 correct
          • ex) '애호박' -> '에호박'
        • 연음
          • 정의: 받침 뒤에 모음으로 시작하는 음절이 올 경우 받침이 다음 음절로 옮겨 발음되는 것
          • script의 두 번째 글자의 초성이 ㅇ이라면 voice의 초성이 script 첫 글자의 종성과 일치하는 경우 correct
          • ex) '무릎이' -> '무르피' ('무'는 맞았으므로 ㄹ 이후부터 비교의 대상)
    3. 1.과 2.의 결과를 통해 accuracy 반환

Installation

pip install scipy
pip install librosa
pip install hangul-utils
pip install jamo
python -m pip install speechrecognition