OpenAIのAPI関連メモ
fine-tuningについて
promptを長くして色々指示を入れ込めば大抵のことはできるけれど、トークン消費激しい。ファインチューニングするとトークン消費を押さえつつ、ねらった回答を生成できる。(あと多分時間パフォーマンスも向上する)
prompt, completionのペアを含むデータセットをCLI(※1)でなげると、ファインチューニングJOBのIDがもらえる。
終わったらファインチューニングされた新しいモデルの名前を取得できる。
以降はそれを指定してcompletions-APIを呼び出せば良い。
※1 : pip install openai
すると、CLIのコマンドopenai
もインストールされる。
fine-tuningに関連する費用
- トレーニング費用
(トレーニング ファイル内のトークン * トレーニング エポックの数) = 合計トレーニング トークン
- 上記 1kトレーニングトークンに対して、davinciなら0.03USDかかる。
- fine-tuningモデルの使用費用
- 通常モデルと同じ計算方式で使用トークンが決まる
- 上記 1k使用トークンに対して、davinciなら 0.12USDかかる。
※素のdavinci使用料は、0.02USD / kToken
fine-tuning可能なモデル
残念ながら、text-davinci-003
をfine-tuningすることはできない。
fine-tuningできるのは以下。
- ベースモデルである
davinci
- ユーザが(ベースモデルを)fine-tuningしたモデル
分類とかどうやってやるの
ファインチューニングの時に、{'prompto': '{テキスト}', 'completion': '{正解ラベル}'}
って感じのデータセットでトレーニングさせるだけ。
notebook例:
text-davinci-003 で会話させるには
promptに会話ログを含める。
promptの最後の行がAI:
になるようにすれば、続きの文を考えてくれる、という寸法。
例:
prompt = """The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.
Human: Hello, who are you?
AI: I am an AI created by OpenAI. How can I help you today?
Human: I'd like to cancel my subscription.
AI:
"""
あとは、AIが生成したもの、人間が書き送ったもの、を同様の形式で数珠つなぎにしたものを毎回promptとしてopenai.Completion.create
を実行すればよい。
Embeddingsってなに
文字列の概念を数列化したもの。
さまざまな文書/文字列について、それぞれの概念のようなものを数値化して一緒に保管しておけば、「関連性」に基づいた文書/文字列検索システムを構築できる。
OpenAIは、text-embedding-ada-002
モデルをEmbedings
APIとして提供している。
Completion
には最大トークン数という"限界"があるが、Embeddingsを上手く使うと適切(概念的に近そう)な外部データだけをその都度参照して補完させることができる。
- Embedingsを使った外部データソースから、元promptに近い文書を検索
- 得られた文書だけをpromptの先頭などに追加する
- 補完する