如何将Jina Embeddings V5 Omni Small集成到现有AI应用:实战案例分享
Jina Embeddings V5 Omni Small是一款功能强大的多模态嵌入模型,能够处理文本、图像、视频和音频等多种输入类型,并生成统一向量空间中的嵌入。本指南将为您提供简单快速的集成步骤,帮助您将这一先进模型无缝融入现有AI应用,开启多模态智能处理的新篇章。## 为什么选择Jina Embeddings V5 Omni Small?Jina Embeddings V5 Omni
如何将Jina Embeddings V5 Omni Small集成到现有AI应用:实战案例分享
Jina Embeddings V5 Omni Small是一款功能强大的多模态嵌入模型,能够处理文本、图像、视频和音频等多种输入类型,并生成统一向量空间中的嵌入。本指南将为您提供简单快速的集成步骤,帮助您将这一先进模型无缝融入现有AI应用,开启多模态智能处理的新篇章。
为什么选择Jina Embeddings V5 Omni Small?
Jina Embeddings V5 Omni Small凭借其卓越的性能和多模态处理能力,成为AI应用开发的理想选择。该模型拥有约1.74B参数,生成1024维嵌入,支持检索、分类、聚类和文本匹配等多种任务,最大序列长度可达32768,满足各类应用场景需求。
Jina Embeddings V5 Omni Small在参数效率方面表现卓越,图中展示了不同模型在平均分数与参数数量上的对比,Jina V5 Omni系列模型在保持高性能的同时具有更优的参数效率
快速安装步骤
要开始使用Jina Embeddings V5 Omni Small,首先需要安装必要的依赖包。以下是核心安装命令:
# 核心依赖
pip install transformers torch pillow numpy
# 可选依赖 - 根据需要的模态安装
pip install librosa soundfile # 音频解码
pip install av imageio # 视频解码
pip install pdf2image pypdfium2 # PDF渲染
pip install "vllm==0.20.1" # 高吞吐量服务
pip install sentence-transformers # 一站式多模态API
通过Transformers库集成
使用Transformers库是集成Jina Embeddings V5 Omni Small的基础方法。以下是处理不同模态输入的示例代码:
from PIL import Image
import librosa, torch
from transformers import AutoModel, AutoProcessor, WhisperFeatureExtractor
# 加载模型和处理器
repo = "jinaai/jina-embeddings-v5-omni-small"
model = AutoModel.from_pretrained(repo, trust_remote_code=True, default_task="retrieval").eval()
processor = AutoProcessor.from_pretrained(repo, trust_remote_code=True)
# 文本嵌入
text_embedding = model.embed(**processor(text="Query: 这是一段示例文本", return_tensors="pt").to(model.device))
# 图像嵌入
image_embedding = model.embed(**processor(images=Image.open("image.jpg"), text="<|vision_start|><|image_pad|><|vision_end|>", return_tensors="pt").to(model.device))
# 视频嵌入
video_embedding = model.embed(**processor(videos="video.mp4", text="<|vision_start|><|video_pad|><|vision_end|>", return_tensors="pt").to(model.device))
# 音频嵌入
audio, _ = librosa.load("audio.wav", sr=16000)
feature_extractor = WhisperFeatureExtractor(feature_size=128)
features = feature_extractor(audio, sampling_rate=16000, return_tensors="pt")["input_features"]
n = features.shape[-1] // 4
ids = torch.tensor([[model.config.audio_start_token_id, *[model.config.audio_token_id]*n, model.config.audio_end_token_id]])
audio_embedding = model.embed(
input_ids=ids.to(model.device),
attention_mask=torch.ones_like(ids).to(model.device),
input_features=features.to(model.device, dtype=next(model.parameters()).dtype),
)
使用Sentence-Transformers简化集成
对于希望更简单API的开发者,Sentence-Transformers提供了一站式解决方案:
from sentence_transformers import SentenceTransformer
# 加载模型,指定任务
model = SentenceTransformer(
"jinaai/jina-embeddings-v5-omni-small",
trust_remote_code=True,
model_kwargs={"default_task": "retrieval"},
)
# 文本嵌入
query_embedding = model.encode_query("查询文本")
document_embedding = model.encode_document("文档文本")
# 图像嵌入
image_embedding = model.encode("image.jpg")
# 视频嵌入
video_embedding = model.encode("video.mp4")
# 音频嵌入
audio_embedding = model.encode("audio.wav")
# 多模态融合嵌入
multimodal_embedding = model.encode(("产品描述文本", "product_image.jpg", "product_video.mp4"))
选择性模态加载优化性能
为了节省内存并提高性能,您可以根据应用需求选择性加载模态组件:
from transformers import AutoModel
# 加载所有模态(默认)
model = AutoModel.from_pretrained("jinaai/jina-embeddings-v5-omni-small", trust_remote_code=True, modality="omni")
# 仅加载视觉和文本模态
model = AutoModel.from_pretrained("jinaai/jina-embeddings-v5-omni-small", trust_remote_code=True, modality="vision")
# 仅加载音频和文本模态
model = AutoModel.from_pretrained("jinaai/jina-embeddings-v5-omni-small", trust_remote_code=True, modality="audio")
# 仅加载文本模态
model = AutoModel.from_pretrained("jinaai/jina-embeddings-v5-omni-small", trust_remote_code=True, modality="text")
生产环境部署:使用vLLM提高吞吐量
对于生产环境,推荐使用vLLM进行高性能部署:
from vllm import LLM
# 初始化vLLM
llm = LLM(
model="jinaai/jina-embeddings-v5-omni-small",
runner="pooling",
trust_remote_code=True,
hf_overrides={"task": "retrieval"}, # 指定任务
)
# 生成嵌入
outputs = llm.embed([{"prompt": "Query: 这是一个查询示例"}])
通过命令行启动服务:
vllm serve jinaai/jina-embeddings-v5-omni-small \
--trust-remote-code \
--hf-overrides '{"task": "retrieval"}'
实战案例:构建多模态搜索系统
以下是一个简单的多模态搜索系统实现,结合了文本和图像搜索功能:
from sentence_transformers import SentenceTransformer
import numpy as np
from PIL import Image
# 初始化模型
model = SentenceTransformer(
"jinaai/jina-embeddings-v5-omni-small",
trust_remote_code=True,
model_kwargs={"default_task": "retrieval"},
)
# 文档库 - 包含文本和图像路径
documents = [
{"text": "红色汽车", "image_path": "red_car.jpg"},
{"text": "蓝色自行车", "image_path": "blue_bike.jpg"},
{"text": "绿色植物", "image_path": "green_plant.jpg"},
]
# 为文档生成嵌入
document_embeddings = []
for doc in documents:
# 融合文本和图像嵌入
text_emb = model.encode_document(doc["text"])
image_emb = model.encode_document(doc["image_path"])
combined_emb = (text_emb + image_emb) / 2 # 简单平均融合
document_embeddings.append(combined_emb)
# 搜索函数
def search(query, top_k=1):
# 生成查询嵌入
query_emb = model.encode_query(query)
# 计算相似度
similarities = np.dot(document_embeddings, query_emb)
# 返回最相似的文档
top_indices = similarities.argsort()[-top_k:][::-1]
return [documents[i] for i in top_indices]
# 文本查询
text_results = search("寻找车辆")
print("文本搜索结果:", text_results[0]["text"])
# 图像查询
image_query_emb = model.encode_query("car_image.jpg")
image_similarities = np.dot(document_embeddings, image_query_emb)
top_image_index = image_similarities.argmax()
print("图像搜索结果:", documents[top_image_index]["text"])
总结与下一步
通过本指南,您已经了解了如何将Jina Embeddings V5 Omni Small集成到现有AI应用中。无论是使用Transformers库进行基础集成,还是通过Sentence-Transformers简化开发流程,亦或是利用vLLM进行高性能生产部署,都能轻松实现多模态嵌入功能。
接下来,您可以:
- 探索模型在特定任务上的性能,如adapters/retrieval/目录中的检索适配器
- 尝试不同的模态融合策略,优化应用性能
- 参考config_sentence_transformers.json配置文件,自定义模型参数
Jina Embeddings V5 Omni Small为您的AI应用打开了多模态处理的大门,赶快尝试将其集成到您的项目中,体验强大的多模态嵌入能力吧!
更多推荐

所有评论(0)