OpenAI platform : ガイド : 埋め込み (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/24/2023
* 本ページは、以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
OpenAI platform : ガイド : 埋め込み
埋め込みとは何か?
OpenAI のテキスト埋め込みはテキスト文字列の関連性を測定します。埋め込みは一般に以下の目的のために使用されます :
- 検索 (結果はクエリー文字列への関連性によりランク付けされます)
- クラスタリング (テキスト文字列は類似性によりグループ化されます)
- リコメンデーション (関連するテキスト文字列を含む項目が推奨されます)
- 異常検出 (関連性の低い外れ値が識別されます)
- 多様性測定 (類似性分布が分析されます)
- 分類 (テキスト文字列は最も類似しているラベルにより分類されます)
埋め込みは浮動小数点数値のベクトル (リスト) です。2 つのベクトル間の距離は関連性を測定します。小さい距離は高い関連性を示し、大きい距離は低い関連性を示します。
Visit our pricing page to learn about Embeddings pricing. Requests are billed based on the number of tokens in the input sent.
埋め込みの取得方法
埋め込みを取得するには、埋め込みモデル ID (e.g., text-embedding-ada-002) の選択とともに 埋め込み API エンドポイント へテキスト文字列を送信します。レスポンスは埋め込みを含み、これを抽出、セーブ、そして使用することができます。
リクエスト例 :
response = openai.Embedding.create(
input="Your text string goes here",
model="text-embedding-ada-002"
)
embeddings = response['data'][0]['embedding']
レスポンス例 :
{
"data": [
{
"embedding": [
-0.006929283495992422,
-0.005336422007530928,
...
-4.547132266452536e-05,
-0.024047505110502243
],
"index": 0,
"object": "embedding"
}
],
"model": "text-embedding-ada-002",
"object": "list",
"usage": {
"prompt_tokens": 5,
"total_tokens": 5
}
}
See more Python code examples in the OpenAI Cookbook.
When using OpenAI embeddings, please keep in mind their limitations and risks.
埋め込みモデル
OpenAI は 1 つの第2世代埋め込みモデル (モデル ID 内の -002 で示される) と 16 個の第1世代モデル (モデル ID 内の -001 で示される) を提供しています。
殆どすべてのユースケースに対して text-embedding-ada-002 を使用することを勧めます。それはより良く、より安く、そして簡単に利用できます。Read the blog post announcement.
モデル世代 | トークナイザー | 最大入力トークン | KNOWLEDGE CUTOFF |
---|---|---|---|
V2 | cl100k_base | 8191 | Sep 2021 |
V1 | GPT-2/GPT-3 | 2046 | Aug 2020 |
使用は入力トークン毎に価格付けされ、1000 トークン毎に $0.0004、あるいは 1 米ドル毎に約 ~3,000 ページ (ページ毎に ~800 と仮定) のレートです。
モデル | ドル毎のおよそのページ | BEIR 検索評価のパフォーマンス例 |
---|---|---|
text-embedding-ada-002 | 3000 | 53.9 |
*-davinci-*-001 | 6 | 52.8 |
*-curie-*-001 | 60 | 50.9 |
*-babbage-*-001 | 240 | 50.4 |
*-ada-*-001 | 300 | 49.0 |
第2世代モデル
モデル名 | トークナイザー | 最大入力トークン | 出力次元 |
---|---|---|---|
text-embedding-ada-002 | cl100k_base | 8191 | 1536 |
制限 & リスク
私たちの埋め込みはある場合には信頼性が低いか、社会的リスクを引き起こす可能性があり、緩和 (の手段) がないと損害を引き起こすかもしれません。
社会的バイアス (偏見)
制限: モデルは社会的バイアスをエンコードします、例えば、特定のグループに対するステレオタイプあるいはネガティブな感情を通して。
SEAT (May et al, 2019) と Winogender (Rudinger et al, 2018) のベンチマークの実行により私たちのモデルにバイアスの証拠を見つけました。これらのベンチマークは、gendered names (性差のある名前)、地域名と何某かのステレオタイプに適用されたときモデルが暗黙的なバイアスを含むかどうかを測定する 7 つのテストから構成されます。
例えば、私たちのモデルは (a) アフリカ系アメリカ人の名前と比較するとき、ヨーロッパ系アメリカ人の名前を肯定的な感情と強く関連付け、(b) 否定的なステレオタイプを黒人女性と強く関連付けることを発見しました。
これらのベンチマークは幾つかの点で制限されています : (a) それらは貴方の特定のユースケースに一般化できないかもしれません、そして (b) それらは可能性のある社会的バイアスの非常に小さい部分に対してだけテストしています。
これらのテストは予備的なもので、貴方の特定のユースケースに対してテストを実行することを勧めます。これらの結果は、貴方のユースケースに対する最終的な特質ではなく、その現象の存在の証拠として捉えられるべきです。Please see our usage policies for more details and guidance.
Please contact our support team via chat if you have any questions; we are happy to advise on this.
最近のイベントへの無知 (blindness)
制限: モデルは 2020年8月以後に発生したイベントの知識は欠落しています。
私たちのモデルは 2020年8月までの実世界のイベントについての幾つかの情報を含むデータセットで訓練されています。もし最近のイベントを表すモデルに依存するならば、それらは上手く遂行できない可能性があります。
Frequently asked questions
文字列が幾つのトークンを持つかをそれを埋め込む前にどのように知ることができますか?
Python では、OpenAI のトークナイザー tiktoken で文字列をトークンに分割できます。
コード例 :
import tiktoken
def num_tokens_from_string(string: str, encoding_name: str) -> int:
"""Returns the number of tokens in a text string."""
encoding = tiktoken.get_encoding(encoding_name)
num_tokens = len(encoding.encode(string))
return num_tokens
num_tokens_from_string("tiktoken is great!", "cl100k_base")
text-embedding-ada-002 のような第2世代埋め込みについては、cl100k_base エンコーディングを使用してください。
More details and example code are in the OpenAI Cookbook guide how to count tokens with tiktoken.
K nearest (最も近い) 埋め込みベクトルをどのように素早く取得できますか?
多くのベクトルに対して素早く検索するには、ベクトルデータベースの使用を勧めます。ベクトルデータベースと OpenAI API を扱うサンプルを Cookbook on GitHub で見つけることができます。
ベクトルデータベースのオプションは以下を含みます :
- Chroma, オープンソースの埋め込みストア
- Milvus, スケーラブルな類似性検索用に構築されたベクトルデータベース
- Pinecone, fully マネージド・ベクトルデータベース
- Qdrant, ベクトル検索エンジン
- Redis ベクトルデータベースとして
- Typesense, 高速なオープンソースのベクトル検索
- Weaviate, オープンソースのベクトル検索エンジン
- Zilliz, Milvus により支援されたデータインフラ
どの距離関数を使用するべきしょう?
コサイン類似度 を勧めます。距離関数の選択は通常はそれほど重要ではありません。
OpenAI 埋め込みは長さ 1 に正規化されています、これは以下を意味します :
- コサイン類似度はドット積だけを使用して僅かに高速に計算できます。
- コサイン類似度とユークリッド距離は同一のランキングという結果になります。
私の埋め込みをオンラインで共有できますか?
埋め込みの場合を含めて、カスタマーはモデルからの入出力を所有します。貴方は、API に入力するコンテンツが applicable law (準拠法) や私たちの 利用規約 に違反していないことを確認する責任があります。
以上