图文embedding-CLIP模型
更新时间:2026-05-18
图文 embedding(CLIP 模型)
简介
ClipEmbedding 是基于 Daft + Ray 分布式框架的多模态嵌入向量提取组件,利用 CLIP 模型同时支持文本和图像的 embedding 提取,适用于跨模态检索、图文匹配、内容相似度计算等场景。
功能
- 支持文本/图像嵌入向量提取,多模态统一编码
- 支持中文 CLIP 模型
- 支持跨模态相似度计算
输入
| 输入列名 | 说明 |
|---|---|
| content | 包含输入数据的数组,支持以下元素类型:文本模式: UTF-8字符串图像模式: Base64字符串/二进制数据/图像URL |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| content_type | str | image_url | 输入图像的格式类型,支持:文本(text)bos/http 地址(image_url)base64 编码(image_base64)二进制流(image_binary)可选值:["text", "image_url", "image_base64", "image_binary"]默认值:"image_url" |
| batch_size | int | 16 | 批量计算数据量,默认:16 |
| model_path | str | /opt/aihc/models | 模型存储路径,默认:'/opt/aihc/models'(内部参数) |
| model_name | str | iic/multi-modal_clip-vit-base-patch16_zh | 模型名称,可选:'iic/multi-modal_clip-vit-base-patch16_zh''iic/multi-modal_clip-vit-huge-patch14_zh''iic/multi-modal_clip-vit-large-patch14_zh''iic/multi-modal_clip-vit-large-patch14_336_zh'默认:'iic/multi-modal_clip-vit-base-patch16_zh' |
| model_version | str | v1.0.1 | 模型版本,当前仅支持'v1.0.1' |
| rank | int | 0 | 指定GPU设备编号(多卡环境有效),默认:0(内部参数) |
输出
包含浮点数嵌入向量的数组,每个元素为List[float]。
使用示例
Plain Text
1from __future__ import annotations
2
3import os
4import daft
5from daft import col
6from daft.aihc.common.udf import aihc_udf
7from daft.aihc.functions.multimodal.embedding.clip_embedding import ClipEmbedding
8
9if __name__ == "__main__":
10 if os.getenv("DAFT_RUNNER", "native") == "ray":
11 import ray
12 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
13 daft.set_runner_ray()
14 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
15
16 model_path = os.getenv("MODEL_PATH", "/opt/aihc/models")
17 model_name = "iic/multi-modal_clip-vit-base-patch16_zh"
18 model_version = "v1.0.1"
19 batch_size = 2
20 rank = 0
21 num_gpus = 1
22
23 samples = {"text": ["树苗", "蜻蜓", "鸽子", "雪人", None]}
24 ds = daft.from_pydict(samples)
25 ds = ds.with_column(
26 "embedding",
27 aihc_udf(
28 ClipEmbedding,
29 construct_args={
30 "content_type": "text",
31 "model_path": model_path,
32 "model_name": model_name,
33 "model_version": model_version,
34 "batch_size": batch_size,
35 "rank": rank,
36 },
37 num_gpus=num_gpus,
38 batch_size=1,
39 concurrency=1,
40 )(col("text")),
41 )
42
43 ds.show()
44#╭────────┬────────────────────────────────╮
45#│ text ┆ embedding │
46#│ --- ┆ --- │
47#│ String ┆ List[Float32] │
48#╞════════╪════════════════════════════════╡
49#│ 树苗 ┆ [0.089660645, -0.022903442, 0… │
50#├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
51#│ 蜻蜓 ┆ [0.09259033, -0.037902832, 0.… │
52#├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
53#│ 鸽子 ┆ [0.14916992, -0.032196045, 0.… │
54#├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
55#│ 雪人 ┆ [0.13623047, -0.0008497238, 0… │
56#├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
57#│ None ┆ None │
58#╰────────┴────────────────────────────────╯
59
60 samples = {
61 "image_path": ["https://{bucket}.bj.bcebos.com/rgb.jpg"]
62 }
63 ds = daft.from_pydict(samples)
64 ds = ds.with_column(
65 "embedding",
66 aihc_udf(
67 ClipEmbedding,
68 construct_args={
69 "content_type": "image_url",
70 "model_path": model_path,
71 "model_name": model_name,
72 "model_version": model_version,
73 "batch_size": batch_size,
74 "rank": rank,
75 },
76 num_gpus=num_gpus,
77 batch_size=1,
78 )(col("image_path")),
79 )
80
81 ds.show()
82#╭────────────────────────────────┬────────────────────────────────╮
83#│ image_path ┆ embedding │
84#│ --- ┆ --- │
85#│ String ┆ List[Float32] │
86#╞════════════════════════════════╪════════════════════════════════╡
87#│ https://{bucket}.bj.bcebos.com/┆ [-0.021224976, -0.078063965, … │
88#╰────────────────────────────────┴────────────────────────────────╯
评价此篇文章
