2023年5月20日 (土)ChatGPT研究会 第7弾 @オンライン豊田陽介( )@youtoyOpenAI社のWhisper APIを使ってみた!
View Slide
自己紹介豊田陽介( )@youtoy・IT系イベント主催、登壇や運営なども・共著・単著の本を出していたり・ Microsoft MVP(2021/10 から)プライベートでの活動・ガジェット大好き・ChatGPTは昨年の12月2日から利用開始※ アドベントカレンダーで、12月2日 やその他の日で ChatGPTネタの 記事を書いたりも好きなこと、他
OpenAI社の「Whisper API」の話
「Whisper API」の概要説明(公式)https://openai.com/blog/introducing-chatgpt-and-whisper-apis より▼「Whisper」は 2022年9月に オープンソース化された 「Speech to Textモデル」▼「Whisper API」は API経由で それを利用可能(※ large-v2 モデル)▼ API の料金は「$0.006/分」
「Whisper API」の概要説明(公式)https://openai.com/blog/introducing-chatgpt-and-whisper-apis より▼ API でできること・いろいろな言語の書き起こし・書き起こし+英語への翻訳▼ 対応フォーマット ⇒ m4a, mp3, mp4, mpeg, mpga, wav, webm
現在ベータ版(2023年5月20日時点)https://platform.openai.com/docs/guides/speech-to-text
とりあえず日本語音声で「Whisper API」を試す
Whisper API の使う方法https://openai.com/blog/introducing-chatgpt-and-whisper-apis よりPythoncurl
オプションの1つ:言語指定言語指定をすることで「精度と遅延」が改善される
curlを使って実際に試してみる■手順 1)処理対象の音声ファイルの内容を確認 2)curlコマンドで API を利用してみる ※ APIキーは環境変数「$OPENAI_API_KEY」に設定
curlを使って実際に試してみる■手順 1)処理対象の音声ファイルの内容を確認 2)curlコマンドで API を利用してみる ※ APIキーは環境変数「$OPENAI_API_KEY」で設定curl https://api.openai.com/v1/audio/transcriptions \-H "Authorization: Bearer $OPENAI_API_KEY" \-H "Content-Type: multipart/form-data" \-F model="whisper-1" \-F file="@【ファイルのパス+ファイル名】" \-F language="ja"言語指定:「ja」
ライブデモ
ちょっとした処理なら簡単に実行できてしまう
今度は「Node.js」で
Whisper API の使う方法https://platform.openai.com/docs/api-reference/audio/create?lang=node よりNode.js
ちょっと修正が必要
Node.jsからAPIを使う※ APIキーは環境変数「$OPENAI_API_KEY」で設定
Node.jsでの処理結果を確認
音声データに関する注意25MBまでPyDub を使った対応例(部分的な取り出し)■ファイルサイズの制限
少し余談:先ほど使った音声ファイルは?
Mozillaが公開しているデータセット■Common Voice https://commonvoice.mozilla.org/ja
オープンなデータセットのクラウドソーシング
日本語の音声データもある今回は「Common Voice Delta Segment 13.0」を利用試したもの
ダウンロードしたデータの中身たくさんのmp3ファイル音声ファイルに関する情報のリスト
テスト用のファイルを手軽にゲットできる!
ここで「API」ではないほうの話
オープンソース化されていた「Whisper」
「Whisper」のオープンソース化とAPI■ 提供開始は以下 ※ 以下の年月日は、OpenAIの公式記事のタイムスタンプベース ● 2022年9月21日: オープンソース化 ⇒ https://github.com/openai/whisper にて ● 2023年3月1日: Whisper API の一般公開 ※ ChatGPT API の一般公開と同時
モデルデータや対応言語・・・複数のモデルがある(ファイルサイズ、精度、 処理速度などの違いあり) 様々な言語に対応(グラフは精度に 関する内容)
このあたりを読んでみると良さそうhttps://qiita.com/diesekiefer/items/00d8c1507829b58a62ab日本語で概要が説明されている記事
活用の幅を拡げるために
長時間の音声ファイルの書き起こしへの対応
【再掲】音声データに関する注意25MBまで■ファイルサイズの制限
25MBより大きいファイルを扱う場合
対応方法の例■ ファイルサイズを小さくする ● ファイルを分割する ● ファイルの圧縮をする/圧縮率を上げる ※ 場合によっては、精度に影響する可能性が?
OpenAIのドキュメントに書かれている例PyDub で冒頭10分を取り出す処理
PydubについてPython で音声ファイルを処理できる
(Whisper API自体の話では ない方向になりますが...)
黒い画面が苦手でなければ
ffmpegを使って特定の部分の取り出し■コマンドの例: 切り出しの始点と終点を指定ffmpeg -ss 【開始部分(秒数指定)】 -to 【終了部分(hh:mm:ssなど)】 -i 【入力ファイル名】 -c copy 【出力ファイル名】
少し補足
ffmpegについてhttps://ffmpeg.org/クロスプラットフォームで様々な種類の映像・音声ファイル等の処理が可能
ファイル分割の処理もコマンド1つで
ffmpegを使ってファイル分割■コマンドの例: 特定の時間の長さ毎に分割するffmpeg -i 【入力ファイル】 -f segment -segment_time 【時間】-c copy -reset_timestamps 1 【出力ファイル名】※ 出力ファイルでの連番の指定例: output_%03d.m4a
ちょうどよい区切りを見つける
■コマンドの例: 無音区間を見つけるffmpeg -i 【入力ファイル(音声)】 -af silencedetect=n=【許容するノイズのレベル】:d=【検出する区間の長さの閾値】 -vn -f null -再びffmpegを使った例
■ silencedetect=n=0.001:d=1.0■ silencedetect=n=0.001:d=1.5ffmpegの「silencedetect」の出力例
■ silencedetect=n=0.001:d=0.5ffmpegの「silencedetect」の出力例
他のツールなどを使った例を探す■ 関連するキーワード ・ Voice Activity Detection ・ 音声区間検出 ・ 発話区間検出 ・ Silence detection ・ 無音区間検出
探してみるとGUIツールを使う方法も
ちょうどよい区切りを見つける+ファイルサイズも考慮して分割
Pydubを使った事例■【Google Colab】音声ファイルを無音区間で 25MB以下に分割する | agusblog https://agusblog.net/colab-file-split/無音区間を検出して区切りとする+指定サイズを超えないようにファイル結合
動画ファイルから音声ファイルを抽出
■コマンドの例: 動画ファイルから音声をファイルで抽出ffmpeg -i 【入力ファイル(動画)】 -vn -acodec copy 【出力ファイル(音声)】ffmpegを使った例
その他の様々な活用
・リアルタイムな入力に対する音声認識・話者判別の仕組みとの組み合わせ・認識結果をChatGPTで要約様々なことを試された事例(一部のみ)Whisper API活用していきましょう!
終わり!