Closed OzoneAsai closed 8 months ago
アクセントも取得する必要があるので、Mecabの外部辞書を使って直接読みを取得する方法がうまくいくかはすぐに方法が分かりません。また単純なpythonライブラリとしても使えないようなので、インストールが複雑になりそうな気がしています。 現状ありうるのはpyopenjtalkのユーザー辞書機能を用いるものだと思いますが、pyopenjtalkのビルド版では対応していないのもあり、すぐには良い方法がありません。
エラー発生箇所だけひらがなにしてもう一度openjtalkに渡す、というのは?
どのように平仮名へ変換しますか?またエラー箇所と言っても声高々に喚く
等は々
でエラーがでますが単体では読みが存在しません。エラー箇所が出た文章全体を平仮名にするのはBERT部分やアクセントへの悪影響が大きくあまり現実的ではないと思われます。
https://mitsuba-studio.com/vt_v3/DemoKeyPhrases/demo_mecab
このサイトでは上記のような回答が得られました。 文章をいちどmecab に渡してカラーオープン中トークのエラー発生文字を検索にかけて、それが含まれるトークンをその読み方で置き換えたらいい...かなと思います
でも、声高々は...切り方が 声高/々 になってしまったので、々の前の文字を参照する形で...?
ChatGPTによるまとめ
以下のポイントをまとめます:
基本的にはpyopenjtalkはデフォルトの(辞書追加のない)mecabが使われているため、くださったような形態素解析・読み取得は内部で行われています(pyopenjtalk.run_frontend()
で同様のmecabからの返答が帰ってきます)。
なのでmecabを使うとしても、要するに新しい辞書を追加する以外の解決法は今のところ無い気がしています。
んー...openJtalkに渡す前にmecabで独立した々を検出して、2文字前が漢字であれば、1文字前と2文字前の間に区切り記号を挿入....? という処理。 が欲しいと思ったがそれは関係なくて... そういえば、アクセント調整ってOpenJTalkが関与してくるんですか?
https://www.negi.moe/negitalk/openjtalk.html OpenJTalkはmecabの読みや形態素情報に加えてアクセントを加えた独自の解析結果が使えるので、アクセント高低はそこから取得されています。
不可能を感じたので最後に要求だけ書き留めようと思います。というか、初期の主張は...無かったことにしましょう。 1、"々"を読めない、というエラーならばその1文字前と2文字前の間に区切りを入れるようにexceptできるなら...
提案ありがとうございます。「々」が読めないときの処理はそれでよさそうではありますが、すぐに実装できるかは分からないのと、これで解決できるかのチェック等や、他に影響が出る可能性もありそうなので、少し考えてみたいと思います。
https://github.com/litagin02/Style-Bert-VITS2/issues/60 読み等の問題はこのIssueへ統合します。
OpenJTalkのエラーをexceptしてMecabで読みに変換していい感じに...? https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md