Closed Moon-sung-woo closed 2 years ago
안녕하세요 @Moon-sung-woo 님, 제 프로젝트에 관심 가져주셔서 감사드립니다. 저의 답변은 아래와 같습니다.
sp
라는 미리 지정된 특수 토큰에만 mapping하도록 제한되어있습니다. 현재 제 프로젝트에서는 MFA를 사용하기 때문에 이러한 한계점을 그대로 갖게 됩니다. 이러한 한계를 없애고 싶으시다면, unsupervised duration modeling을 적용한 저의 또다른 프로젝트를 참고해보시기 바랍니다.도움이 되시길 바랍니다. 감사합니다.
안녕하세요 @keonlee9420 님, 친절한 답변 정말 감사합니다. 조금만 더 질문을 드려도 괜찮을까요??
제 목표는 적은 데이터(약 1시간 정도 단일화자 음성 데이터)로 감정표현이 가능한 합성음을 만드는 것을 목표로 하고 있습니다. 이 때 학습하는 방법에 대한 질문이 이있습니다.
notion을 보면 취업하신 것 같은데 바쁘신데도 답변 달아주셔서 정말 감사합니다. 감사합니다.
목표로 하시는 것은 충분히 가능할 것으로 보입니다. 그러나 질문주신 내용에 제가 직접 실험해보지 않은 것들이 많아서 개괄적인 답변만 드릴 수 있는 점 미리 양해 바랍니다.
이어지는 1~3번 질문에 대하여, fine-tuning은 기존의 다른 task에서의 학습 결과를 활용해 현재 task의 성능을 올리는 가장 간결하고 좋은 방법 중 하나입니다. 하지만 서로 다른 두 데이터를 사용하여 한 데이터셋에 먼저 pre-train 후 나머지 데이터셋에 fine-tuning을 하는 것과 두 데이터셋을 함께 학습하는 근본적으로 다른데요, 가장 큰 차이를 꼽자면 overfitting(robustness)입니다. fine-tuning은 단일 데이터셋을 사용했을 때와 동일하므로 현재 task의 데이터셋에 적합한 학습 결과를 보여주지만 overfitting 가능성이 높습니다. 그러나 여러 데이터셋을 한번에 학습한다면 현재 task에서 가장 적합한 결과만을 내놓지는 않겠지만 overfitting 가능성이 훨씬 낮(==새로운 데이터에 대해 robust한 정도가 높)겠습니다. 정도는 데이터셋의 특성에 따라서 매우 상이하므로, 고려중이신 모든 task에 대해 두 학습 방법 - 1. fine-tuning 2. 한번에 학습 - 을 모두 적용해보시는 것을 추천드립니다.
저도 직접 비교한 경우가 흔치 않아 결과가 궁금하네요. 만약 직접 실험하시게 되면 그 결과들을 공유 주신다면 저 포함 비슷한 고민을 하시는 많은 분들께 큰 도움이 될 것입니다.
감사합니다.
안녕하세요. @keonlee9420 님 답변 정말 감사합니다. 많은 도움이 되었습니다. 말씀해주신대로 다 실험을 진행 해 본 후 결과 공유드리도록 하겠습니다. 답변 주셔서 정말 감사합니다.
이슈는 닫도록 하겠습니다.
안녕하세요 @keonlee9420 님 Hi-Fi GAN Fine tuning 방법에 대한 실험 결과 공유드립니다.
영어로 학습된 모델에 한국어를 fine tuning시킬 때 어떤 방법이 더 좋은지에 대해 질문을 남겼었습니다. 결론부터 말씀드리자면 원하는 화자의 목소리만을 이용하여 fine-tuning시키는 것이 더 좋은 결과를 얻을 수 있었습니다.
한국어의 발음에 대해 더욱 뚜렷하게 학습하기 위해 다른 화자의 음성을 함께 학습시켜봤으나 원하는 화자의 목소리만을 사용하여 fine-tuning 시켰을 때 듣기에 더 좋은 성능을 낼 수 있었습니다.
감사합니다.
안녕하세요 @keonlee9420 님 음성합성 기법에 대한 질문이 있어 issue 남기게 되었습니다. fastspeech2를 보면 duration에 일정 값을 곱해 전체 문장의 duration을 조절하는 것으로 알고있습니다.
제 질문은 구글과 같은 음성합성 서비스를 이용할 때 SSML(Speech Synthesis Markup Language)을 이용하여 하나의 문장에서 각 단어를 제어할 수 있는 음성합성 기법이 있는지 궁금합니다.
예를 들어 '안녕하세요? 오늘은 날씨가 정말 좋습니다' 라는 문장이 있을 때 '안녕하세요'는 pitch를 1.2배를 해주고, '날씨가 정말 좋습니다'는 duration을 0.8배 해주는 것과 같이 따로따로 제어할 수 있는 방법이 있는지 여쭤보고 싶습니다.
딥러닝을 사용하지 않은 고전적인 방법으로는 가능한 것으로 알고 있는데 딥러닝을 사용해서는 어떻게 해야할지 정보가 없어 질문 남깁니다.
항상 친절히 답변 달아주셔서 감사합니다. 많은 도움 받고 있습니다. 감사합니다.
안녕하세요 @Moon-sung-woo 님, 우선 답변이 늦어져 죄송합니다. 실험에 대한 자세한 공유 감사드립니다. 저 포함 많은 분들께 큰 도움이 되리라 생각합니다. 이어진 질문에 대해 답변 드리자면, 현재 제 프로젝트에서도 문장 전체의 duration, pitch, energy 값은 문장 전체 단위로 변경이 가능합니다(이곳 그리고 이곳을 참고하세요). 조금 번거롭지만 이 방식을 이용한다면 문장 단위 뿐 아니라 예시로 들어주신 것 처럼 단어 단위 (더 나아가 phoneme 단위) control도 가능해 질 텐데요, 예를들어 합성 시 각 단어에 해당하는 위치의 variance 값에 원하는 배수를 곱해주면 됩니다. 예를들어 '안녕하세요'의 pitch를 1.2배를 해주고자 할 때 이곳을 다음과 같이 수정해 주면 됩니다: 안녕하세요에 해당하는 phoneme의 위치(범위)를 duration target 값(mfa로 뽑아낸 duration 값) 을 통해 알아내고 그 부분만 control 값을 곱해줍니다. 이런 방식으로 duration도 0.8배를 해주면 원하시는 결과를 얻을 수 있을 것입니다.
안녕하세요 @keonlee9420 님. 큰 도움이 되었으면 좋겠네요! 친절한 답변 정말 감사합니다.
정말 죄송한데 한가지 더 질문드리고 싶은게 있어 다시 글 남깁니다. tacotron2 기반의 모델을 사용하고, 입력 text에 g2pk를 사용하였습니다. 결과를 확인해보니 음성에서 된소리 발음이 잘 나오지 않는것을 확인했습니다. 이런 된소리의 경우 딥러닝 모델의 한계인지 아님 입력 전처리 단계에서의 문제인지를 모르겠어서 질문 남깁니다.
항상 자세하게 답변 달아주셔 큰 도움 되고 있습니다. 감사합니다.
안녕하세요, 제 답변이 도움이 되어 다행입니다. 아마 g2pk는 https://github.com/Kyubyong/g2pK을 사용하셨을 것으로 보이는데요, 말씀주신 문제는 이 phonemizer의 문제 중 하나라고 저도 알고만 있습니다. 즉, 모델의 한계라기 보다는 input과 output의 mapping을 결정짓는 전처리 단계의 문제라고 이해하시면 좋을 것 같네요. phonemizer는 언어에 따라 다르고, 한국어 버전도 찾아보시면 몇가지 대안이 있으니 한번 issue등을 잘 확인해보시고 적절한 phonemizer로 변경해 전처리 하여 학습하면 도움이 될 것으로 판단됩니다. 여유가 되신다면 실험을 통해 얻게된 insight나 월등했던 phonemizer를 공유해 주신다면 역시 저 포함 여러 분들께 큰 도움이 될 것 같네요.
안녕하세요, 답변 감사합니다. 알려주신대로 적절한 phonemizer를 사용하여 실행해보고 공유 드리도록 하겠습니다.
항상 친절한 답변 감사합니다. 이슈는 닫도록 하겠습니다. 감사합니다.
안녕하세요. 먼저 FastSpeech관련 코드와 내용 올려주셔서 감사합니다.
한국어에 MFA를 하여 align을 얻는 과정에대해서 여쭤보고 싶은게 있어 이슈를 남기게 되었습니다.
감사합니다.