9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WhisperとGPT-3のAPIを用いて会議音声とアジェンダから議事録を自動生成する

Last updated at Posted at 2023-03-18

概要

以前から議事録を自動で生成できないかと考えていたところ、@sakasegawa さんがOpenAIのWhisperとGPT-3を用いて記事を投稿されていたため、業務にも適用できそうだと考え試してみた記事です。

元の記事との違いは、文字起こし(Whisper)に関してローカルでモデルをキャッシュせず、OpenAIのAPIを利用している点です。そのため、ローカルに十分なストレージや推論実行環境(GPU等)がなくとも高速に結果が得られます。

実装したコードはGitHubに公開しています。ご自由にお使いください。

実行環境

  • Macbook Pro M2 Max
  • macOS Ventura 13.2.1
  • Python 3.9.12

コード解説

モジュールのインストール

まず、pipでopenaiのパッケージをインストールします

!pip3 install openai

パラメータの指定

次に、OpenAIのAPIを利用するためのAPIキーとWhisperに与える音声ファイルのパスをセットします。
APIキーはこちらから取得することができます。
音声ファイルはmp3, mp4, mpeg, mpga, m4a, wav, webmに対応しています。

api_key = "" # OpenAIのAPIキー
audio_file_path = "" # 音声ファイルのパス

モジュールのインポート&APIキーのセット

次にopenaiのモジュールをインポートし、api_keyをセットします。

import openai
openai.api_key = api_key

Whisperで文字起こし

次に音声ファイルを読み込み、WhisperのAPIに文字起こしのリクエストを送信します。
そして結果をtranscriptに格納しています。

with open(audio_file_path, "rb") as f:
    transcribe = openai.Audio.transcribe("whisper-1", f)
transcript = transcribe['text']

同時に、結果をJSONファイルに保存します。

import json
with open(f'transcribe.json', 'w') as f:
    json.dump(transcribe, f, indent=4)

プロンプトの準備

次に議事録作成の準備をします。
ここでは、出力させたい議事録のフォーマットを指定しています。
このフォーマットの指定の仕方によって生成される議事録が大きく変わるので、色々と試してみると面白いです。(いわゆるプロンプト芸)

agenda_format = f"""
売上
- 先月
- 今月

アクション
- 今月
- 来月
"""

次にプロンプトのテンプレートを作成します。{transcript}には文字起こしが、{agenda_format}には上記の議事録フォーマットが入ります。

prompt = f"""以下は、ある会議の文字起こしです。

{transcript}

この会議の議事録を作成してください。
フォーマットは以下の通りです。

{agenda_format}
"""

GPTで議事録の生成

最後に上記で作成したプロンプトをOpenAIのGPTのAPIに送信します。
モデルは現在Completion提供されているなかでもっとも精度が高いとされているtext-davinci-003を利用しています。

response = openai.Completion.create(model="text-davinci-003", prompt=prompt, max_tokens=1024, temperature=1.0, top_p=1.0, frequency_penalty=0.02)
summary = response['choices'][0]['text']

gpt-3.5-turboを用いたバージョン

response = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[ {"role": "user", "content": prompt}])
summary = response["choices"][0]["message"]["content"]

そして結果をテキストに保存します。

# 結果を保存
with open(f'summary.txt', 'w') as f:
    f.write(summary)

使用したデータ

音声ファイルは、長さが5分ほどのスクラム朝会の音声データを利用しました。

結果

WhisperのAPIに上記の音声データを投げたところ、20秒ほどで文字起こしが完了しました。(参考として、ローカルのCPUでの推論には20分かかりました。)
また、GPT-3にプロンプトを投げたところ、10秒ほどで議事録の作成が完了しました。
※上記の結果はネットワーク環境等に影響されます

評価

主観的な評価になってしまいますが、文字起こしの精度はほぼ完璧、議事録の作成は下書きや補助として使えるなというレベルでした

今後

OpenAIはさらに大規模な言語モデルであるGPT-4をChatGPTを介して提供しており、Waitlistも設置されていることから、APIでの提供も間近ではないかと筆者は考えています。提供され次第、筆者もぜひとも利用し、精度を見てみたいと考えています。

※ChatGPTの機密情報の取り扱いについて

公式のデータ利用ポリシーやクラスメソッドさんがまとめられた記事にあるようにChatGPTは入力したプロンプトを学習データとして使用する可能性があります。対してAPIに関しては2023年03月に更新され、基本的に学習には利用されないとされています。
そのため、所属企業等で機密情報等の取り扱いに関して十分に留意する必要があります。
Panasonicさんはその点を踏まえAzure上のOpenAIを使って自前でチャット環境を用意しているようです。記事

9
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?