【OpenAI APIアップデート紹介】新しいテキスト埋め込みモデルが公開、APIキーのより細かい管理が可能に、その他

2024.01.29

こんちには。

データアナリティクス事業本部 機械学習チームの中村(nokomoro3)です。

先日2024年1月25日にOpenAI APIのアップデートがありました。

今回はこちらのアップデートについてご紹介します。

概要

以下がアップデートの概要です。

  • 新しいテキスト埋め込みモデルがリリース
    • smallは性能がより良く安価に、largeはさらに性能が良い
    • 次元数を削減する設定がネイティブにサポート
  • GPT-3.5 Turboの新モデルが近日中にリリース予定
  • GPT-4 Turbo Previewの新モデルがリリース
  • テキストモデレーションの新モデルがリリース
  • APIの利用状況や管理方法が新しくなりました
    • APIキー単位の利用状況確認が可能に
    • APIキー単位にエンドポイント毎の権限設定が可能に

それでは詳細を見ていきましょう。

新しいテキスト埋め込みモデルがリリース

新しいテキスト埋め込みモデルとして、小さくて高効率なモデルtext-embedding-3-smallと、大きくて強力なモデルtext-embedding-3-largeがリリースされました。

text-embedding-3-smallは既存のテキスト埋め込みモデルtext-embedding-ada-002の後継という位置づけです。

既存のモデルよりもMIRACL、MTEBという2種類のベンチマークでスコアが大きく改善しており、text-embedding-3-largeはそれらのベンチマークで更に良い結果を残しています。

Model MIRACL average MTEB average
text-embedding-ada-002 31.4 61.0
text-embedding-3-small 44.0 62.3
text-embedding-3-large 54.9 64.6

また料金面でもメリットがあり、text-embedding-3-smallの価格はtext-embedding-ada-002に比べて5倍引き下げられています。 text-embedding-3-largeについては既存のものより少し高い設定となっています。

Model Usage
text-embedding-ada-002 $0.00010 / 1K tokens
text-embedding-3-small $0.00002 / 1K tokens
text-embedding-3-large $0.00013 / 1K tokens

また、機能面としては埋め込み次元を小さくする処理がネイティブサポートされました。これにより埋め込みベクトルがその概念を表現する特性を失うことなく、埋め込みを短くすることが可能となっています。

Model Embedding size MTEB average
text-embedding-ada-002 1536 61.0
text-embedding-3-small 512 61.6
text-embedding-3-small 1536 62.3
text-embedding-3-large 256 62.0
text-embedding-3-large 1024 64.1
text-embedding-3-large 3072 64.6

MAX INPUT TOKENSについては8192のままとなっており、既存のモデルとの差は無いようです。

使ってみる

Pythonのライブラリから使ってみます。

openaiライブラリのバージョンは1.10.0です。Pythonのバージョンは3.11.5で実行しています。

.envファイルに以下のようにAPIキーを保存しておきます。

OPENAI_API_KEY="APIキー"

Pythonコードとしては以下のように使います。

from dotenv import load_dotenv
load_dotenv()

from openai import OpenAI
client = OpenAI()

embedding_response = client.embeddings.create(
    model = "text-embedding-3-large",
    input = ["こんにちは。"]
)

print(embedding_response.data[0].embedding)

# OUT:
# [-0.02740495651960373, 0.00228616944514215, -0.005382856819778681, 0.016850050538778305, ...

デフォルトではsmallは1536次元、largeは3072次元の埋め込みベクトルが得られます。デフォルトは圧縮しない最大の状態となっているようです。

次に埋め込みベクトルの次元数を設定してみます。

from dotenv import load_dotenv
load_dotenv()

from openai import OpenAI
client = OpenAI()

embedding_response = client.embeddings.create(
    model = "text-embedding-3-large",
    input = ["こんにちは。"],
    dimensions=2
)

print(embedding_response.data[0].embedding)

# OUT:
# [-0.996538519859314, 0.08313298225402832]

小さすぎると難しいかなと思いましたが、2次元に圧縮することも可能でした。t-SNEなど世の中の次元圧縮処理と比較が気になるところです。

なお、最大の次元数を超えた設定はBad Requestエラーとなりました。

ユースケース

公式ドキュメントは、テキスト埋め込みモデルについて様々なユースケースが紹介されていました。

質問応答、テキスト検索は良く知られていますが、2次元でのデータ可視化やレコメンデーションについても記載されており、サンプルのノートブックも公開されているようです。

興味があればこちらもご覧ください。

GPT-3.5 Turboの新モデルが来週リリース予定

GPT-3.5 Turboの新モデルgpt-3.5-turbo-0125が来週リリースされるとアナウンスがありました。

さらなる価格引き下げを行い、新モデルgpt-3.5-turbo-0125の入力トークン価格は50%に、出力トークン価格は25%に値下げされるようです。

Model Input Output
gpt-3.5-turbo-1106 $0.0010 / 1K tokens $0.0020 / 1K tokens
gpt-3.5-turbo-0125 $0.0005 / 1K tokens $0.0015 / 1K tokens
gpt-3.5-turbo-instruct $0.0015 / 1K tokens $0.0020 / 1K tokens

価格引き下げ以外としては、指定フォーマットに沿った応答精度の向上や、英語以外の言語におけるFunction callingでテキストのエンコーディングの問題を引き起こしていたバグの修正などが行われたようです。

model名にgpt-3.5-turboを指定している場合は、このモデルの発売の2週間後にgpt-3.5-turbo-0125に自動的にアップグレードされるとのことです。

こちらは近日中に公開されるかと思いますが、扱えるようになったらまた触ってみたいと思います。

GPT-4 Turbo Previewの新モデルがリリース

GPT-4 Turbo Previewの新モデルとして、gpt-4-0125-previewがリリースされました。

以下のモデル一覧でも確認することができます。

このモデルは、モデルがタスクを完了しない「怠慢」のケースを削減し、その他バグの修正が含まれる版のようです。

また、モデルが自動更新されるための指定名としてgpt-4-turbo-previewが使えるようになりました。 このgpt-4-turbo-previewはリリースされたgpt-4-0125-previewを指すようになります。

また、GPT-4 Turboの一般提供を開始は今後数か月のうちに行う予定とのことでした。

使ってみる

Pythonのライブラリから使ってみます。先ほどと準備は同じなのでその部分は省略します。

from dotenv import load_dotenv
load_dotenv()

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4-turbo-preview",
    messages=[
        {"role": "system", "content": "あなたは家庭料理に関するアドバイザーです。"},
        {"role": "user", "content": "お肉を使った料理のメニュー案を一つ考えて名前を教えてください。"},
    ],
)

print(response.choices[0].message.content)

# OUT:
# 「和風柚子胡椒チキン」を提案します。柔らかくジューシーな鶏肉をベースに、日本の柚子胡椒と醤油、みりんで味付けした、香り高い一品です。柚子の爽やかさと胡椒のピリッとした刺激が絶妙なバランスで、様々なお野菜とも相性が良いため、お好みで添え物を変えることができます。

テキストモデレーションの新モデルがリリース

これまでで最も堅牢なモデレーションモデルであるtext-moderation-007がリリースされました。

モデレーションとは、テキストが不適切かどうかを分析する処理となっています。

text-moderation-latesttext-moderation-stableが指すモデルもこの新しいモデルに更新されています。

使ってみる

Pythonのライブラリから使ってみます。先ほどと準備は同じなのでその部分は省略します。

from dotenv import load_dotenv
load_dotenv()

from openai import OpenAI

client = OpenAI()

response = client.moderations.create(
    model="text-moderation-latest",
    input=[
        "お肉を使った料理のメニュー案を一つ考えて名前を教えてください。"
    ]
)

print(response.results[0].model_dump_json(indent=4))

# OUT:
# {
#     "categories": {
#         "harassment": false,
#         "harassment_threatening": false,
#         "hate": false,
#         "hate_threatening": false,
#         "self_harm": false,
#         "self_harm_instructions": false,
#         "self_harm_intent": false,
#         "sexual": false,
#         "sexual_minors": false,
#         "violence": false,
#         "violence_graphic": false,
#         "self-harm": false,
#         "sexual/minors": false,
#         "hate/threatening": false,
#         "violence/graphic": false,
#         "self-harm/intent": false,
#         "self-harm/instructions": false,
#         "harassment/threatening": false
#     },
#     "category_scores": {
#         "harassment": 0.00002515870437491685,
#         "harassment_threatening": 7.332218956435099e-6,
#         "hate": 3.3020006640072097e-7,
#         "hate_threatening": 3.92868230392196e-7,
#         "self_harm": 1.1863494364661165e-6,
#         "self_harm_instructions": 1.209587168204962e-7,
#         "self_harm_intent": 3.9538579699183174e-7,
#         "sexual": 0.00004182777411187999,
#         "sexual_minors": 0.000010210968866886105,
#         "violence": 0.0000918547812034376,
#         "violence_graphic": 0.0005876440554857254,
#         "self-harm": 1.1863494364661165e-6,
#         "sexual/minors": 0.000010210968866886105,
#         "hate/threatening": 3.92868230392196e-7,
#         "violence/graphic": 0.0005876440554857254,
#         "self-harm/intent": 3.9538579699183174e-7,
#         "self-harm/instructions": 1.209587168204962e-7,
#         "harassment/threatening": 7.332218956435099e-6
#     },
#     "flagged": false
# }

このようにモデレーションの観点別にスコアを表示することができます。

APIの利用状況や管理方法が新しくなりました

最後にAPIの利用状況の確認画面や、APIキーの管理について新しい管理が可能になりました。

具体的には以下のようなことが可能となっています。

  • 開発者はAPIキーのページからAPIキーに権限を割り当てることが可能に
    • 読み取り専用アクセスを割り当てたり、特定のエンドポイントにのみアクセスできるように制限が可能
  • APIキーレベルでメトリクスを確認することが可能に
    • トラッキングをオンにすることでAPIキー単位で確認が可能

これにより、機能ごと、チームごと、製品ごと、プロジェクトごとに、それぞれ別のAPIキーを持つだけで、簡単に利用状況を見ることが可能となっています。

トラッキングの有効化

APIキーを登録済みであれば、以下の画面にアクセスすることでトラッキングを有効化することができます。

トラッキングを有効化するには、以下のEnableをクリックします。

トラッキングを有効化すると、以下のUsage画面でAPIキーごとの使用率を確認することができます。

  • [https://platform.openai.com/usage]

APIキーの権限設定

先ほどと同じですがAPIキーを登録済みであれば、以下の画面にアクセスすることで権限の割り当てをすることができます。

権限を設定するには以下の部分をクリックします。

権限変更の画面が表示されますので、制限するには「Restricted」や「Read Only」を選択します。

すると、以下のようにエンドポイント単位で権限を設定することが可能となります。

まとめ

いかがでしたでしょうか。

OpenAIのAPIアップデートについて整理しました。どんどん進化していきますね!

これからも追い続けたいと思います。