モチベーション

満を持して登場した 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

Safety best practices を読む。

Production Best Practice

Production Best Practices を読む。

所感

Hugging Face をいじっているときも思ったが、OpenAI が API を開放したことでいろいろなプロダクトにかんたんに機械学習を導入できる時代になったんだなと感じる。多くの人にとって Linux server を買って自分で Model を構築するより、プロが構築したモデルに乗ったほうがいいだろう。

読んでいる書籍

以下の本の”3.1 scikit-learn活用へのファーストステップ:パーセプトロンの訓練”まで読んだ。

Python機械学習プログラミング PyTorch&scikit-learn編 impress top gearシリーズ
  • Author: Sebastian Raschka
  • Manufacturer: インプレス
  • Publish date: 2022-12-15T00:00:00.000Z
  • 現在地

    参考