버디버드라는 앵무새에게 말을 가르치는 서비스를 개발중입니다. 아래는 그 과정에 대한 기록입니다.

앵무새의 단어 발음 성공여부를 반환하는 기술 개발

GOAL:

‘안녕’(ex) 학습을 진행하는 세션에서, 앵무새가 ‘안녕’(ex)을 제대로 발음했는지 성공/실패 여부를 반환하는 모델을 개발한다.

고려한 방안은 총 3가지이다.

  1. MFCC + DTW
  2. Whisper STT
  3. Facebook wav2vec2

테스트를 위해 아래와 같이 raw에 3가지 종류의 preprocessed를 적용한 데이터를 사용해 테스트했다.

  • raw : 원본. 생활소음수준의 노이즈 포함
  • rn_processed : raw에 Noise Reduced 적용
  • rn_vad_processed : nr_processed에 VAD 처리한 음원
  • vtln_processed : nr_vad_processed에 포먼트 보정 처리한 음원

1. MFCC + DTW

알고리즘 기반의 연산으로 유사도를 판별한다.

  • raw : 노이즈에 따라 편차가 커 부적합.
  • rn_vad_processed : rn, vad 파라미터를 적절하게 맞추면 최고 성능을 보임.

인사이트

(1).사람 음성앵무새 발음 성공/실패 판단 기준으로 사용할 수 없다.

파형 기준으로 수학적 유사도를 계산하므로, 사람 음성과 앵무새 음성 사이에 차이가 크게 잡힌다.

(2) Noise Reduction(NR), VAD 파라미터의 영향을 매우 크게 받는다.

오픈소스 NR의 경우 사람 목소리를 기준으로 노이즈를 제거한다. 따라서 파라미터를 잘못 조정하면 앵무새 음성이 노이즈로 제거된다.

사람 목소리 기준으로 되어있기에, 음원에 따라 파라미터 조정이 정밀하게 필요하다.

결론 -> 기각

단어 확장성이 떨어진다. 예를들어 ‘코코야’라는 발음의 성공여부를 판별하려면, 해당 종류 앵무새의 ‘코코야’라는 발음이 존재해야 한다. 새로운 단어를 추가하기 어렵다..

RN, VAD 파라미터에 크게 영향을 받는다.


2. OpenAI Whisper

whisper + g2p + Panphon Distance

  • whisper: 오디오 음성 인식 모델 (오디오 -> 문자)
  • g2p: 문자를 실제 발음되는 소리인 음소(ipa문자열)로 변환 (문자 -> ipa문자열)
  • panphon distance: 음소간의 발음 유사도로, 서로 다른 두 음소를 발음할때 발음기관이 얼마나 변화가 생겨야 하는지를 기준으로 유사도를 수치화

인사이트

(1) 앵무새 음성을 text로 변환하지 못한다.

whisper은 인간 음성으로 학습된 모델이다. 따라서 앵무새 음성을 text로 변환할 때 오차가 크고, 무엇보다 앵무새 '안녕' 발음 음성을 text로 변환한 데이터 간에 유사성이 관찰되지 않는다.

#### (2) 앵무새 음성을 인간과 유사하게 전처리해 사용해보았지만, 성능은 개선되지 않았다.

피치 변환, 포먼트 조절 전처리를 통해 앵무새 음성을 사람 음성과 유사하게 전처리하고, whisper에 전달하는 방안이다.

앵무새 '안녕' 발음 데이터들 -> 피치변환/포먼트조절 -> whisper의 whisper의 결과물

결과물에서 연관성이 관찰되지 않았다.

또한 이 경우, NR, VAD, Pitch 변환값, 포먼트 조절값까지 오차 영향을 연쇄적으로 받는다.

결론 -> 기각

whisper로 앵무새 음성을 텍스트로 변환하는데 한계가 존재한다.


3. Facebook wav2vec2

wav2vec2 + Panphon Distance

wav2vec2: 사람 음성 데이터를 음소(ipa문자열)로 나타내는 모델

인사이트

(1) 앵무새 음성을 인간과 유사하게 전처리해 사용해보았지만, 성능은 개선되지 않았다.

whisper과 같은 결과이다.

(2). wav2vec2 Embedding

인사이트 (1)을 보고,

앵무새 음성을 제대로 고려하지 못하는ipa문자열에 끼워맞추면서 필요한 특징이 필터링되어 생기는 문제라고 판단.

ipa를 버린다.

wav2vec2는 기본적으로 마지막 24번째 layer로 향하면서, 사람 발음 기준으로 음성을 점점 단순화시킨다. 그 결과 마지막 layer에서는 ipa문자열로 최종 결과가 나온다.

여기 24개 layer 중 앵무새 발음 데이터를 기준으로, 공통점이 보이는 결과가 도출된 layer의 결과값을 사져온다.

즉, 24개 layer 중 앵무새 발음 판단에 가장 적합한 layer를 고르고 가중치를 두고 평균을 낸다(2, 3, 4, 20), 해당 layer의 hidden state에서 코사인 유사도로 발음 성공 여부를 판단한다.

결론 -> 긍정적. 추가 검토 필요.

이 방법을 사용했을 때, 현재 데이터 기준으로 약 67%의 판별 성공률을 보인다.

<추가 조사="" 필요=""> - 어떻게 정답 벡터를 도출할 것인가. - 정답 벡터를 '인간 음성'으로부터 도출하는 방법은 없을까. - 정답 벡터와의 거리 몇을 성공/실패 임계값으로 설정할 것인가. - 더 많은 데이터에 적용했을 때도 효과가 관찰되는가. - 코뉴어, 퀘이커 이외 다른 종에서도 효과가 관찰되는가. --- ## 정리 wav2vec2를 사용하는 방안이 적합하다. 여기에서 잠시 멈추고, 나중에 데이터를 충분히 확보한 다음에 추가 고도화 및 검증이 필요하다.