Slide 1

Slide 1 text

2023年5月20日 (土) ChatGPT研究会 第7弾 @オンライン 豊田陽介( ) @youtoy OpenAI社のWhisper APIを 使ってみた!

Slide 2

Slide 2 text

自己紹介 豊田陽介( ) @youtoy ・IT系イベント主催、登壇や運営なども ・共著・単著の本を出していたり ・ Microsoft MVP(2021/10 から) プライベートでの活動 ・ガジェット大好き ・ChatGPTは昨年の12月2日から利用開始 ※ アドベントカレンダーで、12月2日   やその他の日で ChatGPTネタの   記事を書いたりも 好きなこと、他

Slide 3

Slide 3 text

OpenAI社の 「Whisper API」の話

Slide 4

Slide 4 text

「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/分」

Slide 5

Slide 5 text

「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/分」

Slide 6

Slide 6 text

「Whisper API」の概要説明(公式) https://openai.com/blog/introducing-chatgpt-and-whisper-apis より ▼ API でできること ・いろいろな言語の書き起こし ・書き起こし+英語への翻訳 ▼ 対応フォーマット  ⇒ m4a, mp3, mp4, mpeg,    mpga, wav, webm

Slide 7

Slide 7 text

現在ベータ版(2023年5月20日時点) https://platform.openai.com/docs/guides/speech-to-text

Slide 8

Slide 8 text

とりあえず日本語音声で 「Whisper API」を試す

Slide 9

Slide 9 text

Whisper API の使う方法 https://openai.com/blog/introducing-chatgpt-and-whisper-apis より Python curl

Slide 10

Slide 10 text

オプションの1つ:言語指定 言語指定をすることで 「精度と遅延」が改善される

Slide 11

Slide 11 text

curlを使って実際に試してみる ■手順  1)処理対象の音声ファイルの内容を確認  2)curlコマンドで API を利用してみる   ※ APIキーは環境変数「$OPENAI_API_KEY」に設定

Slide 12

Slide 12 text

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」

Slide 13

Slide 13 text

ライブデモ

Slide 14

Slide 14 text

ちょっとした処理なら 簡単に実行できてしまう

Slide 15

Slide 15 text

今度は「Node.js」で

Slide 16

Slide 16 text

Whisper API の使う方法 https://platform.openai.com/docs/api-reference/audio/create?lang=node より Node.js

Slide 17

Slide 17 text

ちょっと修正が必要

Slide 18

Slide 18 text

Node.jsからAPIを使う ※ APIキーは環境変数「$OPENAI_API_KEY」で設定

Slide 19

Slide 19 text

Node.jsでの 処理結果を確認

Slide 20

Slide 20 text

ライブデモ

Slide 21

Slide 21 text

音声データに関する注意 25MBまで PyDub を使った対応例 (部分的な取り出し) ■ファイルサイズの制限

Slide 22

Slide 22 text

少し余談: 先ほど使った音声ファイルは?

Slide 23

Slide 23 text

Mozillaが公開しているデータセット ■Common Voice   https://commonvoice.mozilla.org/ja

Slide 24

Slide 24 text

オープンなデータセットのクラウドソーシング

Slide 25

Slide 25 text

日本語の音声データもある 今回は「Common Voice Delta Segment 13.0」を利用 試したもの

Slide 26

Slide 26 text

ダウンロードしたデータの中身 たくさんの mp3ファイル 音声ファイルに 関する情報のリスト

Slide 27

Slide 27 text

テスト用のファイルを 手軽にゲットできる!

Slide 28

Slide 28 text

ここで 「API」ではないほうの話

Slide 29

Slide 29 text

オープンソース化されていた 「Whisper」

Slide 30

Slide 30 text

「Whisper」のオープンソース化とAPI ■ 提供開始は以下   ※ 以下の年月日は、OpenAIの公式記事のタイムスタンプベース  ● 2022年9月21日: オープンソース化   ⇒ https://github.com/openai/whisper にて  ● 2023年3月1日: Whisper API の一般公開   ※ ChatGPT API の一般公開と同時

Slide 31

Slide 31 text

モデルデータや対応言語 ・・・ 複数のモデルがある (ファイルサイズ、精度、  処理速度などの違いあり) 様々な言語に対応 (グラフは精度に  関する内容)

Slide 32

Slide 32 text

このあたりを読んでみると良さそう https://qiita.com/diesekiefer/items/00d8c1507829b58a62ab 日本語で概要が 説明されている記事

Slide 33

Slide 33 text

活用の幅を拡げるために

Slide 34

Slide 34 text

長時間の音声ファイルの 書き起こしへの対応

Slide 35

Slide 35 text

【再掲】音声データに関する注意 25MBまで ■ファイルサイズの制限

Slide 36

Slide 36 text

25MBより大きい ファイルを扱う場合

Slide 37

Slide 37 text

対応方法の例 ■ ファイルサイズを小さくする  ● ファイルを分割する  ● ファイルの圧縮をする/圧縮率を上げる    ※ 場合によっては、精度に影響する可能性が?

Slide 38

Slide 38 text

OpenAIのドキュメントに書かれている例 PyDub で冒頭10分を 取り出す処理

Slide 39

Slide 39 text

Pydubについて Python で音声ファイル を処理できる

Slide 40

Slide 40 text

(Whisper API自体の話では  ない方向になりますが...)

Slide 41

Slide 41 text

黒い画面が 苦手でなければ

Slide 42

Slide 42 text

ffmpegを使って特定の部分の取り出し ■コマンドの例:  切り出しの始点と終点を指定 ffmpeg -ss 【開始部分(秒数指定)】 -to 【終了部分(hh:mm:ss など)】 -i 【入力ファイル名】 -c copy 【出力ファイル名】

Slide 43

Slide 43 text

少し補足

Slide 44

Slide 44 text

ffmpegについて https://ffmpeg.org/ クロスプラットフォームで 様々な種類の映像・音声 ファイル等の処理が可能

Slide 45

Slide 45 text

ファイル分割の処理も コマンド1つで

Slide 46

Slide 46 text

ffmpegを使ってファイル分割 ■コマンドの例:  特定の時間の長さ毎に分割する ffmpeg -i 【入力ファイル】 -f segment -segment_time 【時間】 -c copy -reset_timestamps 1 【出力ファイル名】 ※ 出力ファイルでの連番の指定例: output_%03d.m4a

Slide 47

Slide 47 text

ちょうどよい 区切りを見つける

Slide 48

Slide 48 text

■コマンドの例:  無音区間を見つける ffmpeg -i 【入力ファイル(音声)】 -af silencedetect=n=【許容する ノイズのレベル】:d=【検出する区間の長さの閾値】 -vn -f null - 再びffmpegを使った例

Slide 49

Slide 49 text

ライブデモ

Slide 50

Slide 50 text

■ silencedetect=n=0.001:d=1.0 ■ silencedetect=n=0.001:d=1.5 ffmpegの「silencedetect」の出力例

Slide 51

Slide 51 text

■ silencedetect=n=0.001:d=0.5 ffmpegの「silencedetect」の出力例

Slide 52

Slide 52 text

他のツールなどを使った例を探す ■ 関連するキーワード  ・ Voice Activity Detection  ・ 音声区間検出  ・ 発話区間検出  ・ Silence detection  ・ 無音区間検出

Slide 53

Slide 53 text

探してみると GUIツールを使う方法も

Slide 54

Slide 54 text

ちょうどよい区切りを 見つける + ファイルサイズも考慮して分割

Slide 55

Slide 55 text

Pydubを使った事例 ■【Google Colab】音声ファイルを無音区間で   25MB以下に分割する | agusblog   https://agusblog.net/colab-file-split/ 無音区間を検出して区切りとする + 指定サイズを超えないようにファイル結合

Slide 56

Slide 56 text

動画ファイルから 音声ファイルを抽出

Slide 57

Slide 57 text

■コマンドの例:  動画ファイルから音声をファイルで抽出 ffmpeg -i 【入力ファイル(動画)】 -vn -acodec copy 【出力ファイル (音声)】 ffmpegを使った例

Slide 58

Slide 58 text

その他の 様々な活用

Slide 59

Slide 59 text

・リアルタイムな入力に対する音声認識 ・話者判別の仕組みとの組み合わせ ・認識結果をChatGPTで要約 様々なことを試された事例(一部のみ) Whisper API 活用していきましょう!

Slide 60

Slide 60 text

終わり!