プログラムでテキスト埋め込みを生成する
watsonx.ai の埋め込みモデルとテキスト埋め込みAPIを使用して、生成AIアプリケーションで使用するための、文や段落の意味を捉えたベクトル形式の数値表現を作成します。
開発の方法
テキストをベクトル化する、つまりテキストをエンベッディングと呼ばれるテキストの数値表現に変換するには、以下のプログラミング方法を使用します:
あるいは、 watsonx.ai UIのグラフィカルツールを使用して、チャットワークフローの一環として文書をベクトル化したり、ベクトルインデックスを作成したりすることもできます。 参照 文書や画像との対話 および 基盤モデルグラウンディング用プロンプトにベクトル化された文書を追加する。
また、以下のサードパーティプラットフォームの IBM 埋め込みモデルを使用することもできます:
アーキテクチャーの概要
Converting text into text embeddings, or ベクトル化 text, helps with document comparison, question-answering, and in retrieval-augmented generation (RAG) tasks, where you need to retrieve relevant content quickly.
テキスト埋め込みとは、文や文章を実数値のベクトルとして数値的に表現したものである。 文を数値ベクトルに変換することで、文に対する操作は数学の方程式に似たものとなり、これはコンピュータが迅速かつ正確に処理できるものである。
埋め込みモデルが文のベクトル表現を生成する際、埋め込みモデルは文の意味的意味を捉えた値を割り当てます。 埋め込みモデルはまた、割り当てられた値に基づいてベクトルを多次元空間内に配置する。 次元空間のサイズはモデルによって異なるため、正確なベクトル値も同様に変化する。 ただし、すべてのモデルは、類似した意味を持つ文が互いに近くなるようにベクトルを配置する。
ほとんどの埋め込みモデルは、数百から数千もの次元数を持つベクトルを生成するため、可視化することは不可能である。 埋め込みモデルが3次元ベクトルを生成する場合、以下のような形になるかもしれない。 画像に示されているベクトル値は架空のものであるが、この仮説的なシナリオを説明するために含まれていることに留意されたい。
この図は、共通のキーワードと共通の主語を持つ文が、ベクトルの値が類似していることを示しており、それにより三次元空間内で互いに近い位置に配置されることを示している。 以下の文は、そのベクトル値に基づいて位置付けられています:
- デガの複製画が書斎に掛かっている
- ジャンは犬がトランプをしている絵を買った
- 私は犬を散歩に連れて行った
最初の2文(美術作品に関する)と最後の2文(キーワード「 犬」 を共有する)は、共通する単語や意味を持たない最初の文と3番目の文よりも互いに近い。
生成されたベクトルはベクトルデータベースに保存できます。 データベース内の全文を同一の埋め込みモデルで変換する場合、ベクトルストアは文のベクトル値に基づく固有のグループ化と関連性を活用し、関連性の高い検索結果を迅速に返すことができる。
従来のインデックスはテキストを保存し、情報検索にキーワード検索に依存するのとは異なり、ベクトルストアは意味的に類似した情報を検索する意味検索をサポートする。 例えば、キーワード検索がキーワードの存在のみをチェックするのに対し、意味検索はキーワードが使用される文脈を考慮するため、通常より優れた検索結果を生成する。
サポートされている基盤モデル
watsonx.ai で利用可能なエンベッディングモデルの詳細については 、「サポートされているエンコーダモデル 」を参照してください。
プログラムで使用可能な埋め込みモデルを調べるには、 watsonx.ai API の 利用可能な基盤モデルリスト メソッドを使用します。 filters=function_embedding パラメータを指定すると、利用可能な埋め込みモデルのみが返されます。
curl -X GET \
'https://{region}.ml.cloud.ibm.com/ml/v1/foundation_model_specs?version=2024-07-25&filters=function_embedding'
REST API
watsonx.ai REST APIのテキスト埋め込みメソッドを使用して、テキストをベクトル化します。 詳細は、 watsonx.ai API リファレンスドキュメントを参照してください。
次のコードスニペットでは、 slate-30m-english-rtrvr モデルを使用して、次の2行のテキストをテキスト埋め込みに変換しています
- 基盤モデル、幅広い下流タスクに適応できる大規模な生成AIモデルである。
- 生成型AI テキスト、ソースコード、画像、音声、合成データなど、さまざまな種類のコンテンツを生成できるAIアルゴリズムの一種。
この例では2行のテキストしか送信されていないが、1,000行まで指定できる。 送信する各行は、埋め込みモデルで定義されている最大入力トークン制限に従う必要があります。
行が長くなる可能性がある場合に対処するため、 truncate_input_tokens パラメータを指定して行を強制的に切り詰めるようにします。 そうでないと、リクエストが失敗する可能性があります。 この例では、 input_text パラメーターが含まれているので、元のテキストがレスポンスに追加され、元のテキストと各埋め込み値のセットとのペアが簡単になります。
埋め込み方法のペイロードで model_id として使用する埋め込みモデルを指定します。
curl -X POST \
'https://{region}.cloud.ibm.com/ml/v1/text/embeddings?version=2024-05-02' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJraWQiOi...' \
--data-raw '{
"inputs": [
"A foundation model is a large-scale generative AI model that can be adapted to a wide range of downstream tasks.",
"Generative AI a class of AI algorithms that can produce various types of content including text, source code, imagery, audio, and synthetic data."
],
"parameters":{
"truncate_input_tokens": 128,
"return_options":{
"input_text":true
}
},
"model_id": "ibm/slate-30m-english-rtrvr",
"project_id": "81966e98-c691-48a2-9bcc-e637a84db410"
}'
レスポンスは次のようになる。ただし、このレスポンスのサンプルでは、例の可読性を向上させるために、各埋め込みの384個の値を6個に減らしている:
{
"model_id": "ibm/slate-30m-english-rtrvr",
"created_at": "2024-05-02T16:21:56.771Z",
"results": [
{
"embedding": [
-0.023104044,
0.05364946,
0.062400896,
...
0.008527246,
-0.08910927,
0.048190728
],
"input": "A foundation model is a large-scale generative AI model that can be adapted to a wide range of downstream tasks."
},
{
"embedding": [
-0.024285838,
0.03582272,
0.008893765,
...
0.0148864435,
-0.051656704,
0.012944954
],
"input": "Generative AI a class of AI algorithms that can produce various types of content including text, source code, imagery, audio, and synthetic data."
}
],
"input_token_count": 57
}
Python
watsonx.ai Python ライブラリの Embeddings クラスを参照。
以下のコードスニペットは、 slate-30m-english-rtrvr モデルを使用して以下の2行のテキストをテキスト埋め込みに変換する方法を示しています:
- 基盤モデル、幅広い下流タスクに適応できる大規模な生成AIモデルである。
- 生成型AI テキスト、ソースコード、画像、音声、合成データなど、さまざまな種類のコンテンツを生成できるAIアルゴリズムの一種。
from ibm_watsonx_ai.foundation_models import Embeddings
from ibm_watsonx_ai.metanames import EmbedTextParamsMetaNames as EmbedParams
my_credentials = {
"url": "https://<region>.ml.cloud.ibm.com",
"apikey": <my-IBM-Cloud-API-key>,
}
client = APIClient(my_credentials)
model_id = client.foundation_models.EmbeddingModels.SLATE_30M_ENGLISH_RTRVR
gen_parms = None
project_id = <my-project-ID>
space_id = None
verify = False
# Set the truncate_input_tokens to a value that is equal to or less than the maximum allowed tokens for the embedding model that you are using. If you don't specify this value and the input has more tokens than the model can process, an error is generated.
embed_params = {
EmbedParams.TRUNCATE_INPUT_TOKENS: 128,
EmbedParams.RETURN_OPTIONS: {
'input_text': True
}
}
embedding = Embeddings(
model_id=model_id,
credentials=my_credentials,
params=embed_params,
project_id=project_id,
space_id=space_id,
verify=verify
)
q = [
"A foundation model is a large-scale generative AI model that can be adapted to a wide range of downstream tasks.",
"Generative AI a class of AI algorithms that can produce various types of content including text, source code, imagery, audio, and synthetic data."
]
embedding_vectors = embedding.embed_documents(texts=q)
print(embedding_vectors)
環境に応じて、, {my-IBM-Cloud-API-key}, および {my-project-ID} を {region}有効な値で置き換えてください。
出力例
[
[-0.0053823674,-0.018807093,0.009131943, ...-0.010469643,0.0010533642,0.020114796],
[-0.04075534,-0.041552857,0.04326911, ...0.017616473,-0.010064489,0.020788372]
]
コスト
テキスト埋め込みを生成するコストは、リソース単位で測定されます。 料金はモデルの課金クラスによって異なります。 詳細は、を参照してください 資産 AIアセットの請求明細。