マルチモダリティ API

人間は、複数のデータ入力モードを同時に使用して知識を処理します。私たちの学習方法、経験はすべてマルチモーダルです。視覚だけ、音声だけ、テキストだけというわけではありません。

これらの学習の基本原則は、近代教育の父ジョンエイモスコメニウス [Wikipedia] (英語) が 1658 年に著した "Orbis Sensualium Pictus" の中で明確に述べられています。

Orbis Sensualium Pictus

「自然とつながっているものはすべて組み合わせて教えるべきだ」

これらの原則に反して、これまで私たちの機械学習へのアプローチは、単一のモダリティを処理するためにカスタマイズされた特殊なモデルに重点が置かれることが多かったのです。たとえば、テキスト読み上げや音声テキスト変換などのタスク用のオーディオモデルや、物体検出や分類などのタスク用のコンピュータービジョンモデルを開発しました。

しかし、マルチモーダル大規模言語モデルの新たな波が生まれ始めています。例としては、OpenAI の GPT-4 Vision、Google の Vertex AI、Gemini Pro Vision、Anthropic の Claude3 などが挙げられます。また、オープンソース製品の LLaVA と balklava は、テキスト、イメージ、音声、ビデオなどの複数の入力を受け入れ、これらの入力を統合してテキストレスポンスを生成できます。

マルチモーダル大規模言語モデル (LLM) 機能により、モデルはイメージ、オーディオ、ビデオなどの他のモダリティと組み合わせてテキストを処理および生成できるようになります。

Spring AI マルチモダリティ

マルチモーダル性とは、テキスト、イメージ、音声、その他のデータ形式を含むさまざまなソースからの情報を同時に理解して処理するモデルの機能を指します。

Spring AI メッセージ API は、マルチモーダル LLM をサポートするために必要なすべての抽象化を提供します。

Spring AI Message API

メッセージの content フィールドは主にテキスト入力として使用されますが、オプションの media フィールドでは、イメージ、オーディオ、ビデオなどのさまざまなモダリティの 1 つ以上の追加コンテンツを追加できます。MimeType はモダリティ型を指定します。使用される LLM に応じて、メディアのデータフィールドは、エンコードされた生のメディアコンテンツまたはコンテンツへの URI のいずれかになります。

メディアフィールドは現在、ユーザー入力メッセージ (例: UserMessage) にのみ適用されます。システムメッセージには意味を持ちません。LLM レスポンスを含む AssistantMessage は、テキストコンテンツのみを提供します。テキスト以外のメディア出力を生成するには、専用の単一モダリティモデルのいずれかを使用する必要があります。*

たとえば、次のイメージ ( multimodal.test.png ) を入力として取り、LLM にイメージに何が写っているかを説明するように依頼することができます。

Multimodal Test Image

ほとんどのマルチモーダル LLM では、Spring AI コードは次のようになります。

byte[] imageData = new ClassPathResource("/multimodal.test.png").getContentAsByteArray();

var userMessage = new UserMessage(
	"Explain what do you see in this picture?", // content
	List.of(new Media(MimeTypeUtils.IMAGE_PNG, imageData))); // media

ChatResponse response = chatModel.call(new Prompt(List.of(userMessage)));

または、Fluent ChatClient API を使用します。

String response = ChatClient.create(chatModel).prompt()
		.user(u -> u.text("Explain what do you see on this picture?")
				.media(MimeTypeUtils.IMAGE_PNG, new ClassPathResource("/multimodal.test.png")))
		.call()
		.content();

次のようなレスポンスが生成されます。

これはシンプルなデザインのフルートボウルのイメージです。ボウルは金属製で、湾曲したワイヤーの縁が開いた構造になっており、山括弧 のどこからでもフルートが見えます。ボウルの中には、赤いリンゴと思われるものの上に黄色いバナナが 2 本乗っています。バナナは皮に茶色い斑点があることから、少し熟しすぎていることがわかります。ボウルの上部には金属製のリングがあり、持ち運び用のハンドルとして使われていると思われます。ボウルは平らな面に置かれ、背景は中間色で、中のフルートがはっきりと見えます。

Spring AI の最新バージョンは、次のチャットクライアントに対してマルチモーダルサポートを提供します。