전체 글

· Casimiro Ferreira· 4 분 읽기

제대로 말하기: TTS를 위한 포르투갈어 이음동철어 중의성 해소

  • Datasets
  • Portuguese
  • TTS
  • Grapheme-to-Phoneme
  • NLP
  • Accessibility
  • FOSS

제대로 말하기: TTS를 위한 포르투갈어 이음동철어 중의성 해소

텍스트 음성 변환 음성이 “Tenho sede”를 읽을 때, 포르투갈어 청자는 갈증을 듣기를 기대합니다. 하지만 바로 같은 철자 sede본사를 뜻할 수도 있으며 — 그 둘은 서로 다른 모음으로 발음됩니다. 틀린 모음으로 말하면 음성은 단지 이상하게 들리는 데 그치지 않습니다. 다른 단어를 소리 내어 말하는 것입니다. 화면을 대신 읽어주는 데 TTS에 의존하는 사람에게, 그것은 알아들을 수 있음과 혼란스러움을 가르는 경계선입니다.

이것은 프런트엔드 문제입니다 — 어떤 신경 보코더가 그 소리를 오디오로 바꾸기 훨씬 전에, 단어가 어떤 소리로 매핑되는지 결정하는 자소-음소 단계입니다. 어떤 수준의 보코더 품질도 이것을 고치지 못합니다. 프런트엔드가 틀린 발음을 고르면, 음성은 틀린 단어를 또렷하게 발음합니다.

이음동철 동철이의어: 같은 철자, 다른 소리, 다른 의미

유럽 포르투갈어에는 동일하게 철자되지만 다른 모음 품질 — 열린 모음 대 닫힌 모음 — 으로 발음되는 단어가 가득하며, 그 올바른 선택은 문법이 아니라 의미에 달려 있습니다. 몇 가지 예:

  • sede갈증(닫힌 e, ˈsedɨ) 대 본사/소재지(열린 e, ˈsɛdɨ). 둘 다 명사입니다.
  • forma틀 / 제빵 틀(닫힌 o, ˈfoɾmɐ, fôrma로 표기) 대 형태 / 방식(열린 o, ˈfɔɾmɐ).
  • molho소스(닫힌 o) 대 묶음(열린 o).
  • corte왕궁(닫힌 o) 대 절단(열린 o).

순진한 TTS 시스템은 철자당 하나의 발음에 전념합니다. 그래서 갈증본사의 모음으로 읽으며 — 매번 — 청자는 틀린 단어를 듣게 됩니다.

“그냥 품사를 태깅하면” 되지 않는 이유

명백한 해결책은 문장에 품사(POS) 태거를 돌려 POS로 발음을 고르는 것입니다. 그것은 일부 쌍에는 도움이 되지만, 두 의미가 품사를 공유할 때마다 구조적으로 실패합니다.

다시 sede를 봅시다. 갈증본사둘 다 명사입니다. POS 태거는 이들을 동일하게 라벨링합니다 — 이들을 구별할 문법적 신호가 없기 때문에 — 그래서 언제나 더 흔한 해석만을 추측할 수 있을 뿐입니다. 우리는 정확히 이것을 측정했습니다: 우리의 테스트 세트에서 spaCy와 Stanza 모두 sede갈증 의미에서 **0%**를 기록합니다. 그들은 항상 본사를 고릅니다. 같은 구조적 천장이 corte(절단 대 왕궁), forma(틀 대 형태), molho(소스 대 묶음)에서도 나타납니다: 의미가 하나의 품사 안에서 갈릴 때, 문법은 그것을 볼 수 없습니다.

데이터셋: 문법이 아니라 의미를 라벨링하기

그래서 우리는 실제로 중요한 것 — 의미 — 을 라벨링하는 개방형 데이터셋을 만들었습니다. **bifonia-pt-homographs**는 27개의 이음동철 동철이의어를 다루는 56,891개의 유럽 포르투갈어 문장입니다. 모든 문장은 단어, 그 의미(뜻), 품사, IPA 발음, 그리고 의도한 해석을 지면에서 명확하게 만드는 발음 구별 부호 복원 형태(예: sêdeséde)로 라벨링되어 있습니다.

버킷 키는 의미입니다 — 그것이 전부의 핵심입니다. 단일 레코드는 다음과 같습니다:

{
  "word": "sede",
  "sense": "thirst",
  "pos": "NOUN",
  "ipa": "ˈsedɨ",
  "sentence": "Depois da corrida tinha tanta sede que bebi um litro de água."
}

발음은 추측이 아니라 infopédia 사전(Porto Editora)에 대조하여 검증되었으며, train/test 분할은 (word, meaning)별로 계층화되어 다운스트림 모델 — 예컨대 BiLSTM — 이 양쪽 절반에서 모든 의미를 보게 됩니다. 이것은 TigreGotico/bifonia-pt-homographs로 Hugging Face에 게시되어 있습니다.

얼마나 잘 풀 수 있는가?

의미가 라벨링된 데이터로, 우리는 서로 다른 접근법이 올바른 의미 — 따라서 올바른 발음 — 를 고르는 데 얼마나 잘하는지 측정할 수 있었습니다:

접근법정확도
항상 가장 흔한 의미를 추측약 53%
spaCy POS → 의미약 66%
Stanza POS → 의미약 75%
bifonia 규칙 + 의미 해석기약 94%

POS 기반 접근법은 예상되는 바로 그 지점에서 정체됩니다: 문법으로는 경로를 정할 수 있지만 결코 의미로는 정할 수 없어서, 명사 내부의 분할은 손이 닿지 않습니다. 우리의 해석기 — 가볍고 완전히 의존성 없는 bifonia 라이브러리 — 는 **약 94%**에 도달하며, 결정적으로 POS 태거가 **0%**를 기록하는 sede/갈증 사례에서 **100%**를 달성합니다.

핵심은 단지 그 숫자가 아닙니다. 작고 빠르며 완전히 개방적인 컴포넌트가 이 작업에서 무거운 신경망 POS 태거를 이긴다는 것 — 단지 문법이 아니라 의미를 해석하기 때문입니다. GPU도, 모델 다운로드도, 네트워크 호출도 없습니다.

왜 중요한가

올바른 발음은 화장품이 아니라 기초입니다. 스크린 리더와 음성 비서는 시각장애인과 음성 전용 사용자가 세상을 읽는 방식이며, 흔한 단어를 잘못 발음하는 프런트엔드는 자신이 건드리는 모든 문장을 조용히 저하시킵니다. 이음동철어 중의성 해소를 원천에서 고친다는 것은 음성이 텍스트가 뜻하는 바를 말한다는 뜻입니다.

데이터셋이 개방적이고 해석기가 작고 포크할 수 있기 때문에, 포르투갈어 TTS 프런트엔드를 만드는 누구든 거대한 모델 없이 이것을 제대로 할 수 있습니다 — 그리고 같은 접근법은 열림/닫힘 모음 구별이 같은 함정을 만드는 갈리시아어 같은 관련 언어로 깔끔하게 이식됩니다. 라벨링된 데이터는 이중 역할도 합니다: 코퍼스를 갖추고 규칙 기반 해석기와 나란히 학습된 해석기를 원하는 팀에게, 단어별 분류기 같은 소형 통계 모델을 훈련하는 데 필요한 바로 그것입니다.

사용해 보기

데이터셋은 TigreGotico/bifonia-pt-homographs로 Hugging Face에 있으며, 해석기는 bifonia에 있습니다. 이것은 **포르투갈어를 위한 고전 NLP**와 350개 이상 언어를 위한 자소-IPA 스택 뒤에 있는 더 넓은 포르투갈어 음성학 작업에 끼워 맞춰집니다 — 언어를 그 화자들이 실제로 하는 방식대로 음성이 발음하게 만드는, 작고 결정론적인 조각들입니다.