ML day 5: OpanAIのChatGPT/Whisper APIを使ってみる
モチベーション
満を持して登場した OpenAI の ChatGPT API と Whisper API について調べて使ってみる。
ChatGPT API
とりあえず使ってみる
Create chat completion (Beta) を curl で叩いてみる。
$ curl https://api.openai.com/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer TOKEN' \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# Output:
{
"id": "chatcmpl-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"object": "chat.completion",
"created": 1677759352,
"model": "gpt-3.5-turbo-0301",
"usage": { "prompt_tokens": 9, "completion_tokens": 12, "total_tokens": 21 },
"choices": [
{
"message": {
"role": "assistant",
"content": "\n\nHello there! How can I assist you today?"
},
"finish_reason": "stop",
"index": 0
}
]
}
とても簡単につかえる。
Pricing
多くのソフトウェアエンジニアが気になるのは価格だろう。gpt-3.5-turbo
が $0.002 / 1K tokens
とのこと、gpt-3.5-turbo
は現在 ChatGPT で使われている Language Model のこと。 GPT-3.5 のモデル一覧はここにある。
token の計算方法は “What are tokens and how to count them? | OpenAI Help Center”にくわしく書かれている。おおよその目安として、
- 1 token ~= 4 chars in English
- 1 token ~= ¾ words
- 100 tokens ~= 75 words
となるらしく、これをある程度のまとまりにすると
- 1-2 sentence ~= 30 tokens
- 1 paragraph ~= 100 tokens
- 1,500 words ~= 2048 tokens
くらいになるらしい。$0.002 / 1K tokens
なので 1,500 words はおおよそ $0.004
となる。
Pricing 計算例: 入力トークン
入力で使うトークンは prompt_token
、出力で使われるトークンは completion_token
と呼ばれる。ここでは prompt_token
の費用を具体例で計算してみる。How Many Words Per Page in Google Docs & MS Word? - Suite Guides によると、Google Docs が 1 ページ約 500 words なので、500 words / (3/4) ≒ 667 tokens
なので 1 ページ処理するのに約$0.0015
程度かかることがわかる。自前でモデルをホストする手間もないので、安定して使えるならとても安いように感じる。
出力トークンの調整
出力はこちらで完全にコントロールできないがMax トークンを設定したり、Prompt で指示することは可能。
Whisper (Speech to text) API
とりあえず使ってみる (音声の文字起こし)
音声の文字起こしをする Create transcription (Beta) を curl で叩いてみる。
curl https://api.openai.com/v1/audio/transcriptions \
-X POST \
-H 'Authorization: Bearer TOKEN' \
-H 'Content-Type: multipart/form-data' \
-F file=@/tmp/voice-test.m4a \
-F model=whisper-1
/tmp/voice-test.m4a
は自分が録音した英語の音声ファイル。
# Output:
{
"text": "How many people are there in your family? There are five people in my family. My father, mother, brother, sister, and me. Does your family live in a house or an apartment? We live in a house in the countryside."
}
一言一句間違わないで文字起こしされた。
とりあえず使ってみる (日本語音声を英語テキストに変換)
今度は日本語の音声を英語テキストに変換する Create translation を使ってみる。
curl https://api.openai.com/v1/audio/translations \
-X POST \
-H 'Authorization: Bearer TOKEN' \
-H 'Content-Type: multipart/form-data' \
-F file=@/tmp/japanese-voice.m4a \
-F model=whisper-1
とくに、日本語を使っていることは入力として入れていないのだが、勝手に判断されて英語に変換されている。
# Output:
{
"text":"Hello, my name is Watanabe. I work as a software engineer. Today, I will be speaking in Whisper."
}
すごい。
Pricing
Whisper
は $0.006/minute (rounded to the nearest second)
。プレゼンやミーティングの時間を1時間として、それを文字起こししたり、日本語音声を英語に翻訳すると $0.006 * 60 = $0.36
かかる。通訳とか、翻訳を依頼することと比べるとはるかに安い。
API 共通事項
Rate limit
Rate limits を読む。
API data usage policies
API data usage policies に細かく書いてあるけど、個人的に理解すべきだと思うのは
- API 経由で送られたデータはモデルの学習や改善に使われることはない。Opt-in を明示的にした場合はその限りではない
- API 経由で送られたデータは運用(abuse/misuse monitoring)のために最大 30 日保持するけど、その後は削除される(ただし、法律でデータをそれ以上保持する必要があるばあいはその限りではない)
ということ。2023 年 3 月にポリシーが更新されてこうなったみたい。
Safety best practices
Production Best Practice
Production Best Practices を読む。
所感
Hugging Face をいじっているときも思ったが、OpenAI が API を開放したことでいろいろなプロダクトにかんたんに機械学習を導入できる時代になったんだなと感じる。多くの人にとって Linux server を買って自分で Model を構築するより、プロが構築したモデルに乗ったほうがいいだろう。
読んでいる書籍
以下の本の”3.1 scikit-learn活用へのファーストステップ:パーセプトロンの訓練”まで読んだ。