モデル別実行レシピ

文章・写真・動画・音声を1つの索引で検索する Jina v5 Omni

テキスト索引を保ち、異なる形式の質問をつなげられます。

Jina v5 Omniはテキスト・画像・動画・音声を共通の1,024次元空間に配置し、text-smallと整合します。CC BY-NC 4.0のため商用利用前に条件を確認します。

実行条件と要点
  • text-smallで索引化し、omni-smallで画像・動画・音声から検索できます。
  • 1.74Bパラメーター・1,024次元で、ライセンスはCC BY-NC 4.0です。

テキスト索引を保ち検索入力を増やします

Jina v5 Omniは写真・動画・音声も検索vectorに変換できます。例ではtext-smallで会議メモ、整合するomni-smallで写真質問を埋め込み、共通空間で順位付けします。memory内で1回検索し、索引保存・再利用はしません。

make_meeting_slide.pyを実行してmeeting-slide.jpgを作ります。検索codeをjina_search.pyとして保存し、実行すると関連する会議メモが上位に表示されます。

jina_search.py — 写真で会議メモを検索
from PIL import Image
from sentence_transformers import SentenceTransformer

text_model = SentenceTransformer(
    "jinaai/jina-embeddings-v5-text-small",
    revision="dd76d535f5447ca3897a9c893fb1e612ead98192",
    trust_remote_code=True,
    model_kwargs={"default_task": "retrieval"},
)
omni_model = SentenceTransformer(
    "jinaai/jina-embeddings-v5-omni-small",
    revision="950200abde3a3bcf3d5bdfe5d28fb5bb5e7dfbb0",
    trust_remote_code=True,
    model_kwargs={"default_task": "retrieval", "modality": "vision"},
)
minutes = [
    "title: Budget review | text: The team moved the Q4 review to Thursday at 10 a.m.",
    "title: Product launch | text: The launch checklist assigns the demo to Mina.",
]
doc_vectors = text_model.encode_document(minutes, normalize_embeddings=True)
photo = Image.open("meeting-slide.jpg").convert("RGB")
query_vector = omni_model.encode_query(photo, normalize_embeddings=True)
scores = omni_model.similarity(query_vector, doc_vectors)[0]
for index in scores.argsort(descending=True).tolist():
    print(f"{float(scores[index]):.4f}\t{minutes[index]}")
両checkpointを2026-10-16確認revisionに固定しています。
テキスト・画像検索の依存関係を入れます
python -m venv .venv
source .venv/bin/activate
python -m pip install -U 'transformers>=5.1' sentence-transformers pillow torch
make_meeting_slide.py — 入力画像を作成
from PIL import Image, ImageDraw

image = Image.new("RGB", (1000, 700), "#f4f1e8")
draw = ImageDraw.Draw(image)
draw.rounded_rectangle((70, 70, 930, 630), radius=24, fill="white", outline="#26354a", width=4)
draw.text((130, 145), "Q4 BUDGET REVIEW", fill="#26354a")
draw.text((130, 235), "Thursday | 10:00 AM", fill="#26354a")
draw.text((130, 335), "Agenda: operating costs and hiring plan", fill="#26354a")
image.save("meeting-slide.jpg", quality=92)
print("saved meeting-slide.jpg")
`make_meeting_slide.py`として保存して実行するとサンプル画像ができます。
画像を作成して検索
python make_meeting_slide.py
python jina_search.py
初回実行時にcheckpointをdownloadし、順位とscoreを出力します。
ノートと録音機材のある作業机
モデルを切り替える前にテキスト索引の検索を確認します。

同じ検索集合で索引の利点を測ります

この最小例はtext-smallとomni-smallを1processで読み込み、1回検索します。再利用索引では文書vectorをfileまたはvector DBに保存し、checkpoint1 revisionとtask設定も記録します。

カードは約1.74Bパラメーター・1,024次元・最大32Kシーケンスを示します。32Kは入力上限であり動画フレーム2が無制限という意味ではないため、クリップ長とサンプリング設定も記録します。

音声ファイルが処理段階を経て整理される様子
同じ質問をテキスト・画像・音声で比較できます。

検索タスクと利用条件を確認します

Sentence Transformers では Omni モデルを default_task='retrieval' で読み込み、encode_query() と encode_document() を使います。画像・動画・音声も、クエリまたは文書の役割を指定して入力できます。text-small のインデックスと omni-small のクエリを比較する際は、両方に同じタスクアダプターを適用します。

モデルカードには CC BY-NC 4.0 ライセンスが適用されます。組織の業務で使う前に、ライセンスで認められる利用範囲を確認します。結果の表にはファイル形式、インデックス作成日、モデル revision、タスク、インデックス容量を記録します。

商用サービスに組み込む目的なら、このモデルを先に選ばないでください。重みのライセンスが非商用条件のため、収益が発生する機能には許容範囲を確認した別のモデルを比較する必要があります。

書類の束の横で検索システムを動かす小型PC
異なるファイル形式を共通ベクトル空間で検索します。

用語の注釈

  1. チェックポイント — 学習済みモデルの重みなどを保存したファイルです。同じモデル系列でも、版や用途によって異なるチェックポイントを使うことがあります。

    本文に戻る
  2. フレーム — 動画を構成する1枚の画像です。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
Jina v5 Omniはテキスト・画像・動画・音声を共通の1,024次元空間に配置し、text-smallと整合します。CC BY-NC 4.0のため商用利用前に条件を確認します。
必要なメモリはどのくらいですか?
Jina v5 Omniは写真・動画・音声も検索vectorに変換できます。例ではtext-smallで会議メモ、整合するomni-smallで写真質問を埋め込み、共通空間で順位付けします。memory内で1回検索し、索引保存・再利用はしません。
選ばないほうがよいのはどのような場合ですか?
商用サービスに組み込む目的なら、このモデルを先に選ばないでください。重みのライセンスが非商用条件のため、収益が発生する機能には許容範囲を確認した別のモデルを比較する必要があります。
条件と出典はどこで確認できますか?
モデルカードには CC BY-NC 4.0 ライセンスが適用されます。組織の業務で使う前に、ライセンスで認められる利用範囲を確認します。結果の表にはファイル形式、インデックス作成日、モデル revision、タスク、インデックス容量を記録します。