litagin02 / Style-Bert-VITS2

Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles.
GNU Affero General Public License v3.0
735 stars 91 forks source link

読みとかの返還 #48

Closed OzoneAsai closed 8 months ago

OzoneAsai commented 8 months ago

image OpenJTalkのエラーをexceptしてMecabで読みに変換していい感じに...? https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md

litagin02 commented 8 months ago

アクセントも取得する必要があるので、Mecabの外部辞書を使って直接読みを取得する方法がうまくいくかはすぐに方法が分かりません。また単純なpythonライブラリとしても使えないようなので、インストールが複雑になりそうな気がしています。 現状ありうるのはpyopenjtalkのユーザー辞書機能を用いるものだと思いますが、pyopenjtalkのビルド版では対応していないのもあり、すぐには良い方法がありません。

OzoneAsai commented 8 months ago

エラー発生箇所だけひらがなにしてもう一度openjtalkに渡す、というのは?

litagin02 commented 8 months ago

どのように平仮名へ変換しますか?またエラー箇所と言っても声高々に喚く等はでエラーがでますが単体では読みが存在しません。エラー箇所が出た文章全体を平仮名にするのはBERT部分やアクセントへの悪影響が大きくあまり現実的ではないと思われます。

OzoneAsai commented 8 months ago

https://mitsuba-studio.com/vt_v3/DemoKeyPhrases/demo_mecab image

image

このサイトでは上記のような回答が得られました。 文章をいちどmecab に渡してカラーオープン中トークのエラー発生文字を検索にかけて、それが含まれるトークンをその読み方で置き換えたらいい...かなと思います

OzoneAsai commented 8 months ago

でも、声高々は...切り方が 声高/々 になってしまったので、々の前の文字を参照する形で...?

OzoneAsai commented 8 months ago

ChatGPTによるまとめ

以下のポイントをまとめます:

  1. OpenJTalkのエラーをexceptして、Mecabで読みに変換する方法を検討している。
  2. アクセント情報も取得する必要があるため、Mecabの外部辞書を利用して直接読みを取得する方法が考えられるが、複雑なインストール手順が必要であると感じている。
  3. 現状、pyopenjtalkのユーザー辞書機能を利用することが可能だが、ビルド版では対応していないため、適切な方法が見つかっていない。
  4. image提供された例の中では、[hyouki]、[hinshi]、[katsuyoukei]などのトークンが含まれており、これらをMecabで解析して、エラーが発生したトークンをその読み方で置き換える方法を検討している。
litagin02 commented 8 months ago

基本的にはpyopenjtalkはデフォルトの(辞書追加のない)mecabが使われているため、くださったような形態素解析・読み取得は内部で行われています(pyopenjtalk.run_frontend()で同様のmecabからの返答が帰ってきます)。 なのでmecabを使うとしても、要するに新しい辞書を追加する以外の解決法は今のところ無い気がしています。

OzoneAsai commented 8 months ago

んー...openJtalkに渡す前にmecabで独立した々を検出して、2文字前が漢字であれば、1文字前と2文字前の間に区切り記号を挿入....? という処理。 が欲しいと思ったがそれは関係なくて... そういえば、アクセント調整ってOpenJTalkが関与してくるんですか?

litagin02 commented 8 months ago

https://www.negi.moe/negitalk/openjtalk.html OpenJTalkはmecabの読みや形態素情報に加えてアクセントを加えた独自の解析結果が使えるので、アクセント高低はそこから取得されています。

OzoneAsai commented 8 months ago

不可能を感じたので最後に要求だけ書き留めようと思います。というか、初期の主張は...無かったことにしましょう。 1、"々"を読めない、というエラーならばその1文字前と2文字前の間に区切りを入れるようにexceptできるなら...

litagin02 commented 8 months ago

提案ありがとうございます。「々」が読めないときの処理はそれでよさそうではありますが、すぐに実装できるかは分からないのと、これで解決できるかのチェック等や、他に影響が出る可能性もありそうなので、少し考えてみたいと思います。

litagin02 commented 8 months ago

https://github.com/litagin02/Style-Bert-VITS2/issues/60 読み等の問題はこのIssueへ統合します。