keonlee9420 / Expressive-FastSpeech2

PyTorch Implementation of Non-autoregressive Expressive (emotional, conversational) TTS based on FastSpeech2, supporting English, Korean, and your own languages.
Other
287 stars 47 forks source link

how to make korean dictionary for mfa #12

Closed KinamSalad closed 2 years ago

KinamSalad commented 2 years ago

안녕하세요. TTS에 관심있는 사람으로서 해당 내용에 관련해 많은 정보를 제공해 주셔서 감사합니다.

fastspeech2를 한국어에 적용함에 있어 궁금한 점이 있는데요.

mfa를 돌리기 위해서는 한국어와 한국어 자모 쌍으로 사용하는 dictionary가 필요하다는 것을 알고 있습니다.

그래서

안녕 ㅇ ㅏ ㄴ ㄴ ㅕ ㅇ

이런 쌍을 글자마다 다 만들어 줘야 한다고 알고 있습니다.

저는 여기서 추가적으로 단어 간의 띄어쓰기 또한 반영하고 싶은데 dictionary 특성상 띄어쓰기에 대한 내용을 추가하는 방법을 모르겠습니다.

만약 이게 반영 안된다면 textgrid에서도 띄어쓰기관련된 문자가 포함되어있지 않을테고, 이는 나중에 트레이닝할 때도 띄어쓰기는 반영이 안될거라고 생각됩니다. 그러면 나중에 띄어쓰기와 관련된 embedding을 넣어도 띄어쓰기에 대한 훈련이 안 된 상태이니 제대로 안나오겠죠.

그러면 아래와 같은 문제가 생기지 않을까 싶습니다.

아메리카노 라고 이어 읽으면 될 것을 아메~리카노 와 같이 뜬금없는 곳에서 억양을 길게 넣어 읽게 되는 문제요.

이를 해결하려면 어떤식으로 dictionary를 만들어야 할까요?

안녕 ㅇ ㅏ ㄴ ㄴ ㅕ ㅇ (띄어쓰기) 이런식으로 쌍을 구성하는게 맞을까요?

혹시 알고있는 올바른 예시가 있거나, 이미 이런 것들에 대한 처리가 되어있으시다면 알려주시면 감사하겠습니다.

같은 패턴으로 . ? 같은 punctuation 또한 dictionary상에서 어떻게 반영해야 textgrid에서 만들어 질 수 있을지 궁금합니다.

감사합니다.

keonlee9420 commented 2 years ago

안녕하세요. 말씀 감사드립니다.

이해하고 계신 부분이 MFA의 한계가 맞습니다. 오직 띄어쓰기로만 구분을 해야 하고, 이는 sp등의 미리 지정된(할당된) special token으로만 매핑을 할 수 있습니다. 적어주신 예시를 빌리자면 '안녕 ㅇ ㅏ ㄴ ㄴ ㅕ ㅇ (띄어쓰기)'에서 '(띄어쓰기)'가 sp에 해당된다고 보시면 됩니다. 자세한 사항은 MFA 공식 document를 참고해보시기 바랍니다.