はじめに
講演や会議など長大な音声記録の書き起こしは読むのに手間がかかるため、要約が必要と感じることがあります。しかし、これまでの自動要約は満足いく結果が得られるものがありませんでしたが、GPT-3の登場によりついにこの問題に対する新しい解決策が現れました。本記事では、Whisper音声認識とGPT-3の要約機能を組み合わせた例を説明します。
使用する機能
OpenAIから提供が開始された以下機能を使います(発表記事:2023/3/1)。
Audio API(モデル: whisper-1):音声ファイルをテキスト化
Completions API (モデル: text-davinci-003):指示内容(prompt)に応じたテキスト結果を生成。今回は、音声から文字起こししたテキストに「要約してください」と指示を加えて実行
作成したスクリプト(bash)
作成したスクリプトは以下の通りです(注意:APIキーとファイル名は架空のものです)
#!/bin/bash
#APIキーをパラメータに代入
API_KEY="ab-CdEfGhIjKlMnOpQrStUvWxYz0"
#変換する音声ファイル名
AUDIO_FILE="ABC.wav"
#Whisperで音声ファイルをテキストに変換
RESULT=$(curl -s https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: multipart/form-data" \
-F file="@${AUDIO_FILE}" \
-F model="whisper-1" | \
jq -r '.text')
echo "書き起こし:"$RESULT
#要約指示のプロンプト
PROMPT="この文を要約してください。\n\n${RESULT}"
#echo $PROMPT
#text-davinci-003で要約処理を行い、結果を出力
SUM_RESULT=$(curl -s https://api.openai.com/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d '{
"model": "text-davinci-003",
"prompt": "'"${PROMPT}"'",
"max_tokens": 1024,
"temperature": 0,
"top_p": 1,
"frequency_penalty": 0,
"presence_penalty": 0
}' | \
jq -r '.choices[0].text')
echo "要約:"$SUM_RESULT
簡単に解説します。
・WhisperのAPI(audio/transcriptions)でファイルの音声認識を実行
・音声認識結果はJSON形式なためjqコマンドでテキストを取り出しRESULTに格納
・「この文を要約してください」とRESULTを結合してPROMPTに格納
・GPT-3にPROMPTの内容を指示し、結果のJSONをjqコマンドでテキストを取り出しSUM_RESULTに格納して表示
・curlコマンドに-sオプションを付けて経過表示をしないようにしている
実行例
以下は実行例です。216文字の書き起こし文章から98文字の要約文を生成することができました。
要約文はツギハギでなく自然な文章が生成されており、元の長文を理解するのに役立てることができそうです。
書き起こし:本日は行政管理局及び自治財政局 関係の二区議案の審査総合通信 基盤局政策統括官・・・
***省略***
・・・第 122号議案を議題といたしますすでに 説明を聴取しておりますので直ち に質疑を行います発言を願います
要約: 本日は、二区議案の審査、質疑請願の審査、請願陳情、特定事件の閉会中の継続審査及び調査の申し出の決定を行い、サイバーセキュリティ統括官関係に入り、第122号議案を議題として質疑を行うことを行います。
まとめ
技術的に難しいと考えられていた自動要約を満足いくレベルで利用できることが確認できました。GPT-3の進化には感嘆せざるを得ません。これからも弊社は技術向上に尽力し、お客様に価値あるサービスを提供できるよう努めてまいります。
※当記事はChatGPTの生成文を利用/参照しています。