Closed2

Kokoro TTSモデル向けG2Pエンジン「misaki」を試す

kun432kun432

Kokoroモデルも後で試すけども、とりあえず。

GitHubレポジトリ

https://github.com/hexgrad/misaki

misaki

Misakiは、ココロモデル用のG2Pエンジンです。

謝辞

  • 🛠️ Misakiは、上記でリンクされている多くの優れたG2Pプロジェクトの上に構築されています。
  • 🌐 多くの言語でG2Pにアドバイスや貢献をしてくださったネイティブスピーカーの皆さま、ありがとうございました。
  • 👾 Kokoro Discordサーバー:https://discord.gg/QuGxSWBfQy
  • 🌸 Misakiは日本語の名前であり、Kokoroとともに『ターミネーター』フランチャイズの登場人物でもあります。

英語・日本語・韓国語・中国語・ベトナム語に対応しているようで、日本語は以下のライブラリが使用されている。

https://github.com/polm/cutlet

https://github.com/polm/fugashi

https://github.com/ikegami-yukino/jaconv

https://github.com/studio-ousia/mojimoji

kun432kun432

Colaboratoryで。

パッケージインストール。extrasで言語を指定する。

!pip install misaki[en,ja]
!pip freeze | grep -i misaki
出力
misaki==0.7.16

英語の場合

from misaki import en

g2p = en.G2P(
    trf=False,     # transformer使用するかどうか(?)
    british=False, # イギリス英語の発音辞書に切り替えるかどうか
    fallback=None  # 発音辞書にない場合にフォールバック関数を指定
)

text = '[Misaki](/misˈɑki/) is a G2P engine designed for [Kokoro](/kˈOkəɹO/) models.'

phonemes, tokens = g2p(text)

print(phonemes)
出力
misˈɑki ɪz ɐ ʤˈitəpˈi ˈɛnʤən dəzˈInd fɔɹ kˈOkəɹO mˈɑdᵊlz.
for token in tokens:
    print(token)
出力
MToken(text='Misaki', tag='NNP', whitespace=' ', is_head=True, alias=None, phonemes='misˈɑki', stress=None, currency=None, num_flags='', prespace=False, rating=5, start_ts=None, end_ts=None)
MToken(text='is', tag='VBZ', whitespace=' ', is_head=True, alias=None, phonemes='ɪz', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)
MToken(text='a', tag='DT', whitespace=' ', is_head=True, alias=None, phonemes='ɐ', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)
MToken(text='G', tag='NNP', whitespace='', is_head=True, alias=None, phonemes='ʤˈi', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)
MToken(text='2', tag='NNP', whitespace='', is_head=True, alias='to', phonemes='tə', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)
MToken(text='P', tag='NNP', whitespace=' ', is_head=True, alias=None, phonemes='pˈi', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)
MToken(text='engine', tag='NN', whitespace=' ', is_head=True, alias=None, phonemes='ˈɛnʤən', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)
MToken(text='designed', tag='VBN', whitespace=' ', is_head=True, alias=None, phonemes='dəzˈInd', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)
MToken(text='for', tag='IN', whitespace=' ', is_head=True, alias=None, phonemes='fɔɹ', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)
MToken(text='Kokoro', tag='NNP', whitespace=' ', is_head=True, alias=None, phonemes='kˈOkəɹO', stress=None, currency=None, num_flags='', prespace=False, rating=5, start_ts=None, end_ts=None)
MToken(text='models', tag='NNS', whitespace='', is_head=True, alias=None, phonemes='mˈɑdᵊlz', stress=None, currency=None, num_flags='', prespace=False, rating=3, start_ts=None, end_ts=None)
MToken(text='.', tag='.', whitespace='', is_head=True, alias=None, phonemes='.', stress=None, currency=None, num_flags='', prespace=False, rating=4, start_ts=None, end_ts=None)

日本語の場合。言語によって使い方が全然異なる。日本語のソースはこちら。

https://github.com/hexgrad/misaki/tree/main/misaki/ja.py

2025/05/28追記: 辞書のダウンロードが必要なのを書いてなかった。

!python -m unidic download
from misaki import ja, en

g2p = ja.JAG2P()

phonemes = g2p("ミサキは、ココロモデル向けにデザインされたG2Pエンジンです。")
print(phonemes)
出力
mʲisa kʲi βa, kokoɾo modeɾɯ mɯke ɲi deʣaiɴ saɾeta G ɲi P eɲʥiɴ desɨ.
このスクラップは2025/02/17にクローズされました