소프트웨어가 억양을 들을 수 있을까?
요약
사용자가 외국어 학습 시 겪는 억양 문제를 해결하기 위해 소프트웨어가 음소와 운율을 얼마나 정확히 포착할 수 있는지 검증합니다. Azure의 발음 평가 엔진을 활용하여 개별 음소의 정확도와 문장의 멜로디인 운율을 기계가 구분할 수 있는지 테스트합니다.
핵심 포인트
- 억양은 개별 음소(phonemes)와 운율(prosody)의 두 요소로 구성됨
- 운율은 문장의 리듬, 강세, 멜로디를 포함하며 언어 이해에 핵심적임
- 기계가 시간 흐름에 따른 운율의 전체 윤곽을 판단하는 것은 매우 어려운 과제임
- Azure의 발음 평가 서비스를 통해 러시아어 음소 정확도를 테스트함
저는 러시아어를 배우고 있습니다. 어휘는 꾸준히 외울 수 있고, 문법은 공부할 수 있습니다. 하지만 매주 저를 겸손하게 만드는 부분은 바로 억양(accent)입니다. 단어를 천천히 말하며 완벽하게 해냈다고 느끼지만, 튜터는 미소를 지으며 "비슷해요"라고 말합니다. 비슷하다니 어디가요? 어떤 발음이요? 얼마나 차이가 나나요? 인간의 귀는 즉각적으로 알아차리지만, 항상 이를 설명할 수 있는 것은 아닙니다. 그래서 저는 소프트웨어가 대신 알려줄 수 있을지 궁금해지기 시작했습니다. 기계가 제 튜터처럼 제 억양을 들을 수 있을까요?
그것이 제가 테스트하고 싶었던 질문이었고, 저는 이를 검증 가능한 가설로 작성했습니다.
가설: 일반적인 음성 엔진은 훈련된 귀만큼 신뢰도 높게 단 하나의 잘못 발음된 소리를 잡아낼 수 있다.
"억양을 듣는다"는 것은 무엇을 의미하는가
테스트를 하기 전에, 우리가 기계에게 무엇을 듣게 할 것인지 명확히 하는 것이 도움이 됩니다. 왜냐하면 억양(accent)은 단 한 가지가 아니기 때문입니다. 적어도 두 가지 요소가 있습니다.
첫 번째는 개별적인 소리인 음소(phonemes)입니다. 러시아어에는 영어에 없는 모음 'ы'가 있는데, 영어 사용자들은 자신이 아는 가장 가까운 소리인 'и'('see'의 'ee' 발음)를 대신 사용하곤 합니다. 하나를 다른 하나로 바꾸면 다른 단어를 말하게 됩니다.
두 번째이자 사람들이 과소평가하는 요소는 **운율(prosody)**입니다. 즉, 말의 멜로디, 강세, 그리고 리듬입니다. 운율은 가사를 잊어버렸을 때 흥얼거리는 곡조와 같습니다. 똑같은 세 음절로도 "really"라는 단어가 동의가 될 수도 있고 비꼼이 될 수도 있는 이유가 바로 이것입니다. 모든 개별 소리가 정확하더라도 문장의 높낮이가 잘못된 위치에 놓이면 여전히 외국인처럼 들리는 이유이기도 합니다.
인간에게 있어 운율은 조용히 많은 역할을 수행합니다. 단 한 단어도 바꾸지 않고 질문임을 나타내기도 합니다. 문장의 어느 부분이 중요한지 알려주는 강조를 부여합니다. 감정을 전달하고, 대화의 주고받음을 조절합니다. 제2외국어 말하기에 관한 연구들은 계속해서 동일한 결과에 도달하고 있습니다. 모든 개별 소리를 완벽하게 하는 것보다 멜로디와 리듬을 맞추는 것이 이해를 돕는 데 더 효과적이라는 것입니다. 우리는 외국어 모음은 용서하지만, 강세가 잘못된 음절에 놓이면 당황하게 됩니다.
이것이 바로 운율(prosody)을 소프트웨어에게 흥미로운 문제로 만드는 지점입니다. 단일 소리는 참조와 비교하여 점수를 매길 수 있는 짧고 국지적인 사건입니다. 반면, 운율은 전체 구절에 걸쳐 퍼져 있는 형태입니다. 음높이가 오르내리고, 음절이 늘어나거나 압축되는 것이죠. 기계가 이를 평가하려면 시간의 흐름에 따라 목소리의 멜로디를 따라가면서 스냅샷 하나가 아닌 전체 윤곽을 판단해야 합니다. 이러한 형태를 기계가 듣게 하고, 그것에 대해 유용한 무언가를 말하게 하는 것은 정말 어렵습니다.
그래서 이 테스트는 두 부분으로 나뉩니다. 기계가 단일 잘못된 소리를 들을 수 있는지, 그리고 그 주변의 멜로디까지 들을 수 있는지를 확인하는 것입니다.
기계가 소리를 듣는지 테스트하는 방법
첫 번째 절에 사용되는 도구는 발음 평가(pronunciation assessment)입니다. 엔진에게 녹음 파일과 말하려고 했던 단어를 제공하면, 각 음소(phoneme)까지 얼마나 근접하게 소리가 일치하는지 점수를 매깁니다. 저는 Azure의 발음 평가를 사용했는데, 이는 영어뿐만 아니라 러시아어도 지원한다고 주장하는 몇 안 되는 서비스 중 하나이기 때문입니다.
어떤 채점기에도 함정이 있는 것은 그것이 단순히 관대할 수 있다는 것입니다. 아무거나 넣어주면
올바른 모음은 100점을 받습니다. 모음 하나만 틀려도 점수는 5점 미만으로 떨어집니다. быть (be)와 бить (hit)의 경우도 마찬가지인데, 이 두 단어 역시 그 모음 하나로 인해 갈라집니다.
reference="быть" note="to be, and the vowel is ы"
aWord="быть" aIpa="/bɨtʲ/" aTag="correct ы" aScore="100" aTone="good" aSrc="ru-byt"
bWord="бить" bIpa="/bʲitʲ/" bNote="the ы → и slip" bTag="error caught" bScore="0" bTone="bad" bSrc="ru-bit"
/>
모든 것을 실패로 처리하는 것일까?
오류를 표시하는 채점기는 좋은 발음은 통과시키고 무의미한 발음은 거부할 때만 유용합니다. 따라서 두 가지 대조군이 필요합니다. 일반적인 단어의 깨끗한 원어민 녹음은 모두 100점 근처를 기록하므로, 상한선(ceiling)은 적절한 위치에 있습니다. 그리고 오디오가 주장하는 단어와 전혀 일치하지 않을 때, 점수는 80점대에서 머무는 것이 아니라 0점으로 떨어집니다. 이는 단순히 가혹한 것이 아니라 변별력이 있는 것입니다.
단 하나의 잘못된 모음이 점수를 100점에서 5점 미만으로 떨어뜨렸습니다. 엔진이 거의 지원하지 않는 언어임에도 불구하고, 엔진은 억양을 포착해냈습니다.
영어, 그리고 멜로디
영어는 이 엔진의 홈그라운드이며, 그곳에서는 조금 다르게 동작합니다. 모음 하나로 구분되는 sheep과 ship, 그리고 많은 언어에 결여된 영어의 "th" 소리로 구분되는 think와 sink를 예로 들어보겠습니다.
reference="sheep" note="the long FLEECE vowel"
aWord="sheep" aIpa="/ʃiːp/" aTag="correct vowel" aScore="100" aTone="good" aSrc="en-sheep"
bWord="ship" bIpa="/ʃɪp/" bNote="the ee → i slip" bTag="vowel flagged" bScore="88" bTone="warn" bSrc="en-ship"
/>
reference="think" note="the first sound is the English th"
aWord="think" aIpa="/θɪŋk/" aTag="correct th" aScore="94" aTone="good" aSrc="en-think"
bWord="sink" bIpa="/sɪŋk/" bNote="the θ → s slip" bTag="th flagged" bScore="68" bTone="warn" bSrc="en-sink"
/>
여기서는 오류가 포착되지만 더 부드럽게 점수가 매겨집니다. 엔진은 점수를 0점으로 무너뜨리는 대신 부분 점수를 부여하고 문제가 되는 소리를 지목합니다. 이는 논쟁의 여지가 있겠지만 더 정직한 동작이라고 할 수 있습니다.
영어는 가설의 나머지 절반인 운율 (prosody)을 가능하게 합니다. 영어의 경우, 엔진은 억양 (intonation)과 리듬 (rhythm), 즉 앞서 언급한 멜로디 (melody)에 대해 별도의 점수를 반환합니다. 다음 클립은 전체 문장이며, 이 숫자는 개별 소리에 관한 것이 전혀 아닙니다. 이것은 기계가 선율 (tune)을 판단하는 것입니다.
heading="bonus" note="운율 (prosody), 억양 (intonation) 및 리듬 (rhythm)"
word="I would like a cup of tea, please."
sub="개별 소리가 아닌 멜로디 (melody)를 기준으로 점수 부여"
score="91" tone="good" tag="운율 (prosody) 점수 부여" src="en-sentence"
/>
저 점수는 엔진이 전체 구 (phrase)에 걸친 목소리의 형태를 추적하고 평가하는 것이며, 이는 바로 가르치기 어렵고 측정하기 어려운 부분입니다.
한계점
데모는 실제보다 더 깔끔해 보일 수 있으므로, 세 가지 솔직한 주의 사항을 밝힙니다.
여기 사용된 목소리는 인간이 아닌 합성된 것입니다. 실제 학습자들은 0점이 아닌 척도의 중간쯤에 위치해야 하는 단계적이고 중간적인 오류를 범합니다. 엔진은 분명히 그 민감성을 가지고 있습니다. 지저분한 인간의 음성에서 어떻게 작동할지는 다음 실험 과제입니다.
엔진은 단어가 틀렸다고 말해주겠지만, 어떤 소리가 얼마나 틀렸는지에 대해서는 거칠게(coarse) 표현하며, 일부 언어의 경우 소리를 전혀 라벨링하지 않습니다. "이 단어의 점수가 낮습니다"를 "당신의 ы 소리가 구체적으로 и 쪽으로 치우쳤습니다"로 바꾸는 작업은 그 위에 재구성되어야 합니다.
그리고 운율 (prosody) 점수 부여는 일부 악센트 (accent)에 대해서만 제공됩니다. 멜로디 (melody)는 듣기 가장 어려운 부분이며, 악센트가 차지하는 비중이 매우 크다는 점을 고려하면 가장 불균형하게 지원된다는 사실은 다소 아이러니합니다.
그렇다면, 소프트웨어가 악센트를 들을 수 있을까?
이 증거들에 따르면, 예상보다 더 잘 할 수 있습니다. 엔진은 거의 학습되지 않은 언어에서도 단 하나의 잘못된 모음을 찾아냅니다. 실제 소리와 의미 없는 소음 사이의 차이를 구별합니다. 그리고 영어에서는 악센트를 외국어처럼 들리게 만드는 핵심 요소인 운율 (prosody), 즉 멜로디 (melody)와 리듬 (rhythm)을 듣습니다.
아직 하지 못하고 있는 것은 코칭 (coaching)입니다. 오류를 듣는 것은 쉬운 절반에 불과합니다. 학습자에게 혀를 어떻게 움직여야 하는지 친절하게 알려주는 것은 더 어렵고 인간적인 절반의 영역입니다. 하지만 제가 공상 과학 (science fiction)일 것이라고 가정했던 부분, 즉 기계가 제가 틀린 정확한 소리를 듣는 기능은 이미 오늘날 작동하고 있습니다. 그것은 시작하기에 좋은 지점입니다.
이곳의 모든 것과 마찬가지로, 처음부터 직접 구축되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기