如何将Jina Embeddings V5 Omni Small集成到现有AI应用:实战案例分享

【免费下载链接】jina-embeddings-v5-omni-small 【免费下载链接】jina-embeddings-v5-omni-small 项目地址: https://ai.gitcode.com/hf_mirrors/jinaai/jina-embeddings-v5-omni-small

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 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进行高性能生产部署,都能轻松实现多模态嵌入功能。

接下来,您可以:

  1. 探索模型在特定任务上的性能,如adapters/retrieval/目录中的检索适配器
  2. 尝试不同的模态融合策略,优化应用性能
  3. 参考config_sentence_transformers.json配置文件,自定义模型参数

Jina Embeddings V5 Omni Small为您的AI应用打开了多模态处理的大门,赶快尝试将其集成到您的项目中,体验强大的多模态嵌入能力吧!

【免费下载链接】jina-embeddings-v5-omni-small 【免费下载链接】jina-embeddings-v5-omni-small 项目地址: https://ai.gitcode.com/hf_mirrors/jinaai/jina-embeddings-v5-omni-small

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐