埋め込みモデル API
埋め込みは、入力間の関連性を捉えるテキスト、イメージ、ビデオの数値表現です。
埋め込みは、テキスト、イメージ、ビデオをベクトルと呼ばれる浮動小数点数の配列に変換することによって機能します。これらのベクトルは、テキスト、イメージ、ビデオの意味を捉えるように設計されています。埋め込み配列の長さは、ベクトルの次元と呼ばれます。
2 つのテキストのベクトル表現間の数値距離を計算することにより、アプリケーションは埋め込みベクトルの生成に使用されるオブジェクト間の類似性を判断できます。
EmbeddingModel
インターフェースは、AI および機械学習の埋め込みモデルと簡単に統合できるように設計されています。その主な機能は、テキストを一般に埋め込みと呼ばれる数値ベクトルに変換することです。これらの埋め込みは、意味分析やテキスト分類などのさまざまなタスクにとって重要です。
EmbeddingModel インターフェースの設計は、次の 2 つの主なゴールを中心にしています。
ポータビリティ : このインターフェースにより、さまざまな埋め込みモデルに簡単に適応できます。これにより、開発者は最小限のコード変更で、さまざまな埋め込み手法やモデルを切り替えることができます。この設計は、Spring のモジュール性と互換性の哲学に沿っています。
シンプルさ: EmbeddingModel は、テキストを埋め込みに変換するプロセスを簡素化します。
embed(String text)
やembed(Document document)
のような簡単なメソッドを提供することで、生のテキストデータや埋め込みアルゴリズムの処理の複雑さが軽減されます。この設計の選択により、開発者、特に AI を初めて使用する開発者は、基礎となる仕組みを深く掘り下げることなく、アプリケーションで埋め込みを利用することが容易になります。
API の概要
埋め込みモデル API は、Spring AI ライブラリの一部である汎用 Spring AI モデル API [GitHub] (英語) 上に構築されています。そのため、EmbeddingModel インターフェースは、AI モデルと対話するための標準的なメソッドセットを提供する Model
インターフェースを継承します。EmbeddingRequest
クラスと EmbeddingResponse
クラスは、それぞれ ModelRequest
と ModelResponse
から拡張され、埋め込みモデルの入力と出力をカプセル化するために使用されます。
Embedding API は、OpenAI、Titan、Azure、OpenAI、Ollie などの特定の埋め込みモデルの埋め込みモデルを実装するために、上位レベルのコンポーネントによって使用されます。
次の図は、Embedding API と Spring AI モデル API および埋め込みモデルとの関連を示しています。
EmbeddingModel
このセクションでは、EmbeddingModel
インターフェースと関連クラスのガイドを提供します。
public interface EmbeddingModel extends Model<EmbeddingRequest, EmbeddingResponse> {
@Override
EmbeddingResponse call(EmbeddingRequest request);
/**
* Embeds the given document's content into a vector.
* @param document the document to embed.
* @return the embedded vector.
*/
float[] embed(Document document);
/**
* Embeds the given text into a vector.
* @param text the text to embed.
* @return the embedded vector.
*/
default float[] embed(String text) {
Assert.notNull(text, "Text must not be null");
return this.embed(List.of(text)).iterator().next();
}
/**
* Embeds a batch of texts into vectors.
* @param texts list of texts to embed.
* @return list of list of embedded vectors.
*/
default List<float[]> embed(List<String> texts) {
Assert.notNull(texts, "Texts must not be null");
return this.call(new EmbeddingRequest(texts, EmbeddingOptions.EMPTY))
.getResults()
.stream()
.map(Embedding::getOutput)
.toList();
}
/**
* Embeds a batch of texts into vectors and returns the {@link EmbeddingResponse}.
* @param texts list of texts to embed.
* @return the embedding response.
*/
default EmbeddingResponse embedForResponse(List<String> texts) {
Assert.notNull(texts, "Texts must not be null");
return this.call(new EmbeddingRequest(texts, EmbeddingOptions.EMPTY));
}
/**
* @return the number of dimensions of the embedded vectors. It is generative
* specific.
*/
default int dimensions() {
return embed("Test String").size();
}
}
埋め込みメソッドは、テキストを埋め込みに変換し、単一の文字列、構造化された Document
オブジェクト、またはテキストのバッチに対応するためのさまざまなオプションを提供します。
単一の文字列を受け取り、対応する埋め込みベクトルを返す embed(String text)
メソッドなど、テキストを埋め込むための複数のショートカットメソッドが提供されています。すべてのショートカットは、埋め込みモデルを呼び出すための主要なメソッドである call
メソッドを中心に実装されます。
通常、埋め込みは、数値ベクトル形式で埋め込みを表す浮動小数点数のリストを返します。
embedForResponse
メソッドは、埋め込みに関する追加情報を含む可能性のある、より包括的な出力を提供します。
ディメンション法は、開発者が埋め込みベクトルのサイズを迅速に確認するための便利なツールです。これは、埋め込み空間を理解し、その後の処理ステップに重要です。
EmbeddingRequest
EmbeddingRequest
は、テキストオブジェクトのリストとオプションの埋め込みリクエストオプションを受け取る ModelRequest
です。次のリストは、コンストラクターとその他のユーティリティメソッドを除いた、EmbeddingRequest クラスの切り捨てられたバージョンを示しています。
public class EmbeddingRequest implements ModelRequest<List<String>> {
private final List<String> inputs;
private final EmbeddingOptions options;
// other methods omitted
}
EmbeddingResponse
EmbeddingResponse
クラスの構造は次のとおりです。
public class EmbeddingResponse implements ModelResponse<Embedding> {
private List<Embedding> embeddings;
private EmbeddingResponseMetadata metadata = new EmbeddingResponseMetadata();
// other methods omitted
}
EmbeddingResponse
クラスは AI モデルの出力を保持し、各 Embedding
インスタンスには単一のテキスト入力からの結果ベクトルデータが含まれます。
EmbeddingResponse
クラスは、AI モデルのレスポンスに関する EmbeddingResponseMetadata
メタデータも保持します。