nikkie-ftnextの日記

イベントレポートや読書メモを発信

英語ピッチ準備、OpenAIのWhisper APIとGPT-4に助けてもらったよ(ありがとう!)

はじめに

俺を、見ろ!!1 nikkieです。

英語で3分のピッチをするにあたり、どのように準備したかのログを残します。
生成AIに大変助けられました。みんな みんな 未来だよ2📣

目次

英語ピッチの準備をする

以下の2つを準備する必要がありました。

  • 英語の発表スライド
  • 英語のスピーカーノート

私は英語だけで考えられるほど習熟していないので、最初は日本語で作っていきます。
つまり日本語で作ったスライドを英語に翻訳し、英語のスピーカーノートも用意する必要があります。

作戦:日本語の発表練習録音を書き起こして、英語のスピーカーノートにしよう!

私は発表スライドを作った後に1回は練習するようにしており、その練習は録音します3

今回は日本語スライドの時点で粗削りの発表を録音し、それを英語にして、英語スピーカーノートとしました。

  1. 日本語の録音を書き起こして日本語のスピーカーノートを作る
  2. 日本語のスピーカーノートを英語に翻訳する

また英語スピーカーノートを参考に、日本語と対応を見ながらキーワードを抽出する形でスライドを英訳しました(ここは今回人力でした)。

録音の書き起こし

iPhoneのボイスメモアプリ

録音はボイスメモアプリ内に保存されるようです。
練習の日本語録音のメニュー(3点リーダー)を操作し"ファイル"に保存

方法②ファイルアプリで共有する

今回は録音(のコピー)をファイルアプリでiCloud Driveに保存し、スマホとPCで同期させました(他にもやり方はあると思います)

OpenAI Whisper API

ボイスメモアプリで録音したファイルは.m4aという拡張子でした。

OpenAI Whisperはm4aもサポートしている4ので、Quickstartに沿ってリクエストを送るだけです5
https://platform.openai.com/docs/guides/speech-to-text/transcriptions

>>> from openai import OpenAI
>>> client = OpenAI()
>>> audio_file = open("/...iCloud Drive.../日本語練習録音.m4a", "rb")
>>> transcript = client.audio.transcriptions.create(model="whisper-1", file=audio_file)

3分の日本語の音声を送ったところ、そんなに待たずに書き起こしが返ってきました(計測してないですが、30秒も待ってないんじゃないかな)。
transcript.textに書き起こしがあります

英語スピーカーノートのもとになるので読み返して手を入れていきましたが、全然直すところはなかったです。
自分の言い回しをブラッシュアップしていく感じでした。
例えば、sphinx-new-tab-linkって語をWhisperは初めて聞いたと思うんですが、「スフィンクスニュータブリンク」と書き起こせているんですよ! すごすぎる

送ったのはリクエスト1回だけで、費用は0.02ドルみたいでした(投資に対して十分ペイしている)

動作環境(openaiは1.2.3です)

annotated-types==0.6.0
anyio==3.7.1
certifi==2023.7.22
distro==1.8.0
h11==0.14.0
httpcore==1.0.2
httpx==0.25.1
idna==3.4
openai==1.2.3
pydantic==2.4.2
pydantic_core==2.10.1
sniffio==1.3.0
tqdm==4.66.1
typing_extensions==4.8.0

宿題:transformersのWhisper

最初はtransformersのWhisperも試したのですが、音声ファイルの最初しか翻訳できず、今回はそこで手を止めました。

  • m4aからwavにffmpegで変換
  • wavファイルをautomatic-speech-recognition pipelineに渡すと、最初の一文しか書き起こされなかった
    • 私の実装が足りないんだと思うのですが、すぐに解決できそうになかったのでWhisper APIに切り替えました
transcriber = pipeline(
    "automatic-speech-recognition", model="openai/whisper-medium"
)
forced_decoder_ids = transcriber.tokenizer.get_decoder_prompt_ids(
    language="japanese", task="transcribe"
)
print(
    transcriber(
        "recording.wav", generate_kwargs={"forced_decoder_ids": forced_decoder_ids},
    )
)
# {'text': 'それではプレゼンしていきます'}

日本語から英語への翻訳

PyCon APACでGPT-4にお世話になったのと同様です!

こんなプロンプトでした

私が自作したSphinx拡張についてPythonユーザに英語で発表します。
日本語のスピーカーノートを英語に翻訳するのを手伝ってください。

聴衆に自作Sphinx拡張を知ってもらいたいです。
また、カジュアルなトーンでいきたいです。

終わりに

日本語の発表練習録音から英語のスピーカーノートを作るにあたり、OpenAIのWhisper APIとGPT-4を使いました。
Whisper APIとGPT-4が英語ピッチ準備を爆速にしてくれました。

十分に発達した科学技術は、魔法と見分けがつかない。(アーサー・C・クラーク

ただ、もっと魔法になる、未来になる(=便利になる)と思うんですよね。
最初GPT-4にスマホアプリから録音ファイルをアップロードして「これを書き起こして」と伝えています。
するとGPT-4はCode Interpreterで書き起こそうとし、外部APIとの通信が必要でしたができなかったので「できません」とのことでした。

MyGPTsのActionを触った経験6から、Whisper APIをActionに追加してGPT-4がそれを使って書き起こしを得られそうに思います。
OpenAIが近々アップデートしてぶつけてくるんじゃないでしょうか。
なので、ここに書いた内容は少し時間が経ったら、もはや再現する必要すらなくなっているかもしれませんね


  1. あのはなのじんたんのセリフです。そう、同じ書き出しのこちらとつながっているのです!
  2. 披露したLTのコツの1つです
  3. サポートしているファイル形式 mp3, mp4, mpeg, mpga, m4a, wav, and webm ref: https://platform.openai.com/docs/guides/speech-to-text/introduction
  4. ライブラリopenai-pythonがv1にバージョンアップし以前とは使い方が変わっていますが、それでも簡単に使えることは変わりません!
  5. APIを自作して、それをMyGPTsに叩いてもらうことができました。