会議の文字起こしデータから、OpenAIのAPIを使用して議事録を作成する機能を実装するにあたり、色々と苦労があったため、その記録をざっくりとですが記事として残します。どなたかの参考になれば幸いです。
課題
会議の文字起こしは1時間で1万5千文字程度、OpenAIのAPI「gpt-3.5-turbo」で読み込める文字数は2700文字程度、「gpt-3.5-turbo-16k」でも1万1千文字程度とされている。そのため、文字起こしデータを分割して読み込ませる必要があった。しかし、Open AIのAPIには、前回の内容を記録していないため、一回一回のAPIでやり取りを完結させる必要があった。
※会話形式にすることもできるが、それはプロンプトの中に前回までの会話内容を含むように設定している。
実装を試みたこと
- 不要な文字、意味を持たない文字を削除しながら文章を要約し、読みやすくすること
- 要約内容を読み込み制限(1万1千文字)内にして、最終的な議事録として出力すること
プロンプトの作成
ChatGPTに指示するプロンプトで使用する言葉は、その言葉をChatGPT自体がどのように認識しているかを考慮して作成する必要があると考えた。例えば、議事録に含まれる要素をChatGPTに質問すると、議事録の要素「1) タイトル・ヘッダー、2) 日時と場所、3) 出席者・不出席者、4) 議題、5) 各議題に関する議論の概要、6) 決定事項・決議、7) 行動計画や次のステップ、8) その他の情報、9) 作成者・確認者」の様に、9つの要素があると返答される。そのため、「議事録を作成してください。」と指示をすると、この9つの要素を作成しようとChatGPTは試みると考えられる。そのため、プロンプト自体をChatGPTに作成してもらうことにした。しかし、議事録の要素も質問するたびに変わるように、ChatGPTに作成してもらったプロンプトを使用しても、出力結果に差が多くあり、一定の品質で結果を得ることが難しかった。また、ChatGPTで安定した議事録を作成するプロンプトが分かっても、APIによって作成すると、また違った結果になることが多く混乱してしまった。そのため、最終的にAPIを使用する場合は、APIでプロンプトを作成した方が良いかもしれない。
最終的に、APIでは以下のように出力形式を設定することが、出力結果を安定させることが分かった(それでも違う時はある)。
タイトルと出力内容を「{}」で記載する.
##出力内容
以下の内容のみを出力してください。○対話記録
{以下の工程によって作成された対話形式の要約}
ChatGPT-3.5とChatGPT-4の要約精度の違い
今回使用した文字起こしは以下のような会話形式のデータである。このデータを会話形式のまま要約を試みた。
- ChatGPT-3.5:各発言内容のみを要約。そのため、行数が減ることが無く、文章量がほとんど減らなかった。
-
ChatGPT-4:前後の発言者ごとの内容を要約(私自身が気づかなかった内容も繋ぎ合わせて、まとめてくれていた)。しかし、毎回そのように精度の高い要約をしてくれるわけでは無かった。
temperature
を下げると、想像以上の要約はしてくれないと思われた。
今回、APIでは「gpt-4」が私たちのアカウントでは、まだ使用できないため、「実装を試みたこと」の1は断念することとした。
文字起こし
Aさん: 今日、ChatGPTを使ってみた?
Bさん: うん、ちょっと試してたよ。
Aさん: 感じはどうだった?
Bさん: いいと思うけど、ちょっと誤解もあるかな。
Cさん: 誤解って?
Bさん: ああ、例えば、簡単な質問は大丈夫だけど、複雑なのはちょっと変な答えがくる時がある。
Aさん: あー、それはちょっと困るかも。
Cさん: でも、サポートやFAQ作成には役立ちそうだよね。
Bさん: うん、そこは本当に便利だと思う。簡単な質問には即答してくれるし。
ChatGPTによるtemperatureの設定
APIでは「temperature」の値を設定することで、回答ランダム性をコントロールできる。ChatGPTでも「temperature=0.4
にして実行してください。」と記入することで、擬似的に値を変更できる。そのため、出力結果を安定させたかったため、「temperature=0.2
」で議事録作成を試みると、「temperature=0.2
だと何も変わりません。」と返された。
このように、temperatureが低いとあまり要約されないことが分かり、逆に上げると出力して欲しくない内容まで出力されるため、「temperature=0.5~0.6
」などの丁度よい値を探す必要があった。
補足) ChatGPT-4に「ChatGPTインターフェース」でtemperatureの設定が可能かと質問したら、以下の回答だった。
- ChatGPTインターフェース(例:OpenAI Playground)では、"temperature"のようなパラメータをユーザーが変更する機能は提供されていない。直接APIを使う場合のみ変更が可能で、インターフェース上の指示は擬似的に扱われる。
API 「gpt-3.5-turbo」と「gpt-3.5-turbo-16k」の違い
OpenAIのAPI modelには種類があり、「gpt-3.5-turbo」や「gpt-3.5-turbo-16k」などがある。違いは一度に読み込み、処理できる文章量が異なり、日本語で「gpt-3.5:2700文字程度」「gpt-3.5-16k:1万1千字程度」一度に読み込める様になる。しかし、両方を使用した感想として、16kは一度に処理できる分、要約の精度が落ちると感じた。
そのため「実装を試みたこと」の2は、16kの精度が低いことも合わせて、2重に処理をするので元々の意味から遠ざかり、断念することとした。
まとめ
最終的には、文字起こしデータを2700文字以内に分割して「gpt-3.5-turbo」に読み込み、話された内容のポイントを要約して箇条書きにしてもらうことにしました。その方が、出力結果が安定して良かったと思いました。
上記の様に色々と試行錯誤をしましたが、最終的にこれで良かったのか、実はまだ不安があります!でも、これからOpenAIのAPIを使用してみようと思う方の参考になれば幸いです。
今後、APIのgpt-4が使えるようになれば、また作成の仕方も変わって精度も変わるかも知れませんので、gpt-4を使える日が待ち遠しいですね。