見出し画像

生成AI x 読み上げソフト 全自動校正&ルビ振りでユーザー辞書要らず ~地声全自動読み上げ変換追加機能~

こんにちはRcatです。
今回はテキスト読み上げソフトと文章生成AIを組み合わせて全自動で正しい読みをしてくれるようにしてみようと思います。

なお、本記事は以下で紹介している、全自動吹き替えアプリの追加機能となります。
アップデート情報として見ていただくもよし。
AIの使い方の解説を見ていただくもよしとなっております。

Ver2作りました。こちらの方が高精度です



はじめに

利用規約

情報や作品の活用時は事前に利用規約をご確認ください。

https://note.com/rcat999/n/nb6a601a36ef5

コメントについて

利用規約のガイドラインを確認の上コメントしてください


概要

きっかけ

例えば「電子工作を行っています」。
これをVOICEVOXに読ませると次のようになります。
「でんしこうさくをいっています」。

正しくは「でんしこうさくをおこなっています」ですよね。
こういう時はユーザー辞書を使うことを考えるのですが、そうすると今度は「買い物に行ってきます」を「かいものにおこなってきます」。という風に読むようになるんでしょうね。

さてさて、困ったことになりました。読ませる時はひらがなで入力しないといけないのでしょうか?
めんどくさいですね。今流行りのAIにやらせましょう。

やること

今回やることは大きく分けて2つあります。

1つ目は誤字脱字の訂正。
音声認識を使っているので、当然誤字脱字があります。
この辺りは文章校正ということでやらせます。

2つ目はルビ振りです。
上で話したように読み上げソフトは漢字をどういう風に読んでくるのかわからないので、生成AIに前後の文脈からどういう読みをするのか判断して、全てひらがなで出力してもらいます。
そうすることで読み間違いを防止するという狙いです。

サンプル動画

まずは最初にサンプルを出しておきます。

自動校正前

ベースはノイズ除去をした動画になります。
一番最初のところ、そのままアルファベット読みされてるのがちょっと気になっています。

自動校正後

自動校正を挟んだのがこちらです。
一番最初のところやマインクラフトの表記などが訂正されています。

自動校正機能の使い方

まずは今作を使ってくれている方向けの設定方法から紹介します。

Difyを用意する

こちらの記事で紹介しているオリジナルAIを作れるソフトを使います。
参考に導入してください。
記事の方ではローカルコンピューターにインストールしているので少し難しいですが、オンライン版もありますので、難しい方はそちらを検討するのもいいと思います。もちろん無料です。

ワークフローをロードする

本アップデート後、配布しているデータの中身をアップデートしております。
この中に入っているymlファイルを読み込んでください。


読み込み手順はトップ画面からインポート、そしてアップロードです。

APIキーの生成

読み込みが終わったらAPIアクセスから新しいシークレットキーを作成してコピーしてください。

利用するAIの設定

デフォルトではDify紹介の記事でもを使っているようにGoogleのGeminiを使うように構成されています。
もし他のモデルを使いたい場合はワークフローを編集してもらうことになります。

詳しくは後で話しますが、ワークフローを開くと3つに分岐している部分があります。
本記事掲載時点ではGeminiは3つの中から選ぶことができるので、その全てをツールの方の設定で変更できるようになっています。
なので、この部分を直接変更するか、あるいは分岐を増やしていただいても構いません。


設定ファイルに書き込む

次は本ツールの設定ファイルを更新します。
本アップデートが追加されるのは次の設定です。

  • enable
    AIを使った文章校正の使用可否

  • limit
    1回のリクエストで投げる文字数
    モデルの入出力の上限、トークン以内に収まるように設定する必要がある。
    動画全体の読み上げ文字数が上限よりも多い場合は自動的に分割されてリクエストします。

  • dify
    上で説明しているツールの設定です。

    • apikey
      APIのアクセスキー(さっきコピーしたもの)をここに貼り付けます。
      私はローカルなので隠していませんが、オンラインでは秘匿するようにしてください。

    • server
      difyのサーバーのIPアドレス
      ローカルの場合はローカルホストやローカルIPアドレス

    • model
      上で少し説明した分岐でどのモデルを使うかをここで指定する。
      デフォルトでは0:1.5Flash、1:1.5Pro、2:1.0
      使った感じ1.5Proじゃないと求めた精度は出ない。

  • userdictionary
    ユーザー辞書を設定します。
    この内容がAIにそのまま渡されるため、固有名詞などはここで紐付けておくと考慮してくれる

よくわからなければ、有効化のところとAPIキーとサーバーだけ設定すればとりあえず動きます。

実行してみる

設定が完了したらツールを起動するだけで自動的に校正を行うようになります。
以下のような感じで、文字起こしが完了をAIによる校正が入ります。

実行結果

トップのサンプル動画をご確認ください。


自動校正機能の仕組み

次は技術的な話で見てくれている方向けの話をしようと思います。

全体のワークフロー

今回の校正のワークフローは以下のようになっています。
特徴的なのは3つのモデルを選べるようになっていることで、これのためだけにワークフローにしてあります。

最初は以下のようになっています。
入力変数は3つあり。一番最初が文章。その次がユーザー辞書。最後にモデルの選択フラグです。
このワークフローはこれらを入力して実行することになります。

ちょっとした工夫

さて、開始の直後にコードが来ていますね。
こちらの中身なのですが、以下のようになっています。
はい、プロンプトはここに書いてあります。

下の方に行くとこんな感じ
最初を見ていただければわかると思いますが、文字列はFストリングになっています。
なので、プレースホルダーのところが置換された文字列になります。
つまり、テキストジェネレーターとかで書いているプロンプト全く同じものをここで生成しているということです。

テキストジェネレーターの時はこういう感じにしますよね。
これをコードの中で実行してしまいます。

さて、これの何が工夫なのかというと、理由はこの次にあります。

次のステップは分岐と生成AIです。
見てわかるとおりAIが3つあり、最初のモードの数値に応じて分岐しています。違うところはモデルが違うだけなので、その中身は全て同じである必要があります。

プロンプトを見てみましょう。一言しか入っていませんね。
そうコードでプロンプト用のテキストを作ってしまったので、それを代入しているのです。

もう絶対変更しないのであればこんなことはしなくてもいいんですが。もし少しプロンプト変えたいなと思ったらどうしますか?
全てのAIの中身を直しますか?3つならいいですが、もっとたくさんあったらどうしますか?とても面倒くさいと思いませんか?
というわけで、工夫とはコードの中のプロンプトを直せば、自動的にその後ろのAIの中身全てが変更されるというところです。

そして最後に変数集約器で分岐を1個のエンドに戻します。便利ですねこれ。


入力形式

次に文書をどのように入力しているのか見ていきましょう。
入力は以下のように行っています。すでに分析で発音区間ごとに区切られているので、以下のような形になっています。

区間ID:テキスト
0:こんにちは
1:RCATです
2:今回は

AIからの応答形式

文章校正後の応答は次のような形をとっています。
IDは入力の区間IDのことです。statusは校正を行ったかどうかを表しています。textは修正後のテキストです。字幕にも使います。
rubytextは読み上げ用のひらがなです。
以下の例ではユーザー辞書でRcatを教えておいたので、その通りに読んでくれています。


まとめ

今回はテキスト生成AIと連携した文章の自動校正とルビ振りを行いました。正直うまくいくかどうかは使われる。AIの性能によって左右されるので、難しいところではあります。
Geminiの場合は1.5フラッシュだと全く予想外の読み方をしてくることがあったので微妙かもしれません。
1日50回しか使えませんが、1.5Proを使うか有料でチャットGPT4とかを使ってみるといいのかもしれませんね。

それではまたお会いしましょう。

ソースコードや全体のプロンプトの配布について

こちらの機種で配布しているものの中に含まれていますので、ご確認ください。

Ver2を作成しましたのでこちらの方が進化しています。


いいなと思ったら応援しよう!

Rcat999 情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。