はじめに
faster-whisperによる文字起こしの結果をOpenAI APIを利用して文章校正を行いました。
Whisperでの文字起こし結果に対しても有効であると思います。
2023 年 07 月 12 日
苦労したこと
タイムスタンプを維持した状態で文章校正を行うこと。
なるべくトークンを消費しない形でインプットを行う。
失敗
- 改行コードや<BR>を利用して1行ずつに区切った応答を期待する
=> 改行コードは無視され全文で校正されてしまう。 - [1]を文頭に付与することで区切り文字の情報が応答に残る事を期待する
=> 数字が昇順に振られる事や無視されるケースもあった。 - タイムスタンプを文頭に付与することで区切り文字の情報が応答に残る事を期待する
=> トークンの無駄に消費してしまうため却下
成功
- [#]を文頭に付与することで区切り文字の情報が応答に残る事を期待する
=>うまくいった。タイムスタンプとのマッピングを行う。
[#]あかつきのまち 仙台[#]青年 ゆうまは古本屋でいにしえのひみつをはっけんする
API実行部分
投稿用に処理をまとめています
何処を校正したか応答されると困るため、文章校正と結果のみの応答を要求します。
api.py
import openai
import os
def text_proofreading(self, prompt: str):
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.ChatCompletion.create(
model = "gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": "Please proofread. Please return only the proofreading results.",
},
{"role": "user", "content": prompt},
],
)
return response.choices[0]["message"]["content"].strip()
校正結果
オリジナル文章
暁の町、仙台。青年、悠真は古本屋で古の秘密を発見する。
書かれていたのは「朧月夜に龍が舞う」。未知なる冒険が彼を待っていた。
その先には、真実か幻想か…時を超えて語り継がれる物語が始まる。
文字起こし結果
オリジナル文章をVOICEVOXで読み上げたものを文字起こしに利用
[00:00:01,840 --> 00:00:04,560]あかつきのまち 仙台
[00:00:04,560 --> 00:00:09,460]青年 ゆうまは古本屋でいにしえのひみつをはっけんする
[00:00:09,460 --> 00:00:13,020]かかれていたのは おぼろずきよにりゅうがまう
[00:00:13,020 --> 00:00:15,720]みちなるぼうけんがかれをまっていた
[00:00:15,720 --> 00:00:18,800]そのさきには しんじつかげんそうか
[00:00:18,800 --> 00:00:22,260]ちをこえてかたりつがれるものがたりがはじまる
OpenAI API(GPT-3.5-turbo)による校正
[00:00:01,840 --> 00:00:04,560]あかつきのまち 仙台
[00:00:04,560 --> 00:00:09,460]青年 ゆうまは古本屋でいにしえのひみつを発見する
[00:00:09,460 --> 00:00:13,020]書かれていたのは おぼろづき夜に龍が舞う
[00:00:13,020 --> 00:00:15,720]未知なる冒険が彼を待っていた
[00:00:15,720 --> 00:00:18,800]その先には真実が隠された
[00:00:18,800 --> 00:00:22,260]地を超えて語り継がれる物語が始まる
一部書き換わっている部分もありますが、いい感じに校正できたのではないでしょうか。
GPT-4を利用すれば精度が上がると思いますが、実行に時間がかかるのとAPIの利用コストが跳ね上がる点が悩ましいです。
サンプル
本投稿の内容は下記に組み込んでいます。
https://github.com/reriiasu/speech-to-text