modelscope中,有没有直接把MsDataset加到Dashvector的collection的方法?
在ModelScope和DashVector的结合使用中,目前没有直接将MsDataset对象一次性添加到DashVector的collection中的方法。根据现有资料,您需要通过以下步骤手动完成数据的加载、Embedding生成以及向量入库操作。
加载数据集
使用MsDataset.load方法加载目标数据集(如多模态牧歌数据集)。例如:
from modelscope.msdatasets import MsDataset
dataset = MsDataset.load("muge", split="validation")
初始化DashVector客户端并创建集合
初始化DashVector客户端,并创建一个用于存储向量的集合(Collection)。例如:
from dashvector import Client, DashVectorException
client = Client(api_key='{your-dashvector-api-key}', endpoint='{your-dashvector-cluster-endpoint}')
rsp = client.create('muge_embedding', dimension=1024) # 假设向量维度为1024
if not rsp:
raise DashVectorException(rsp.code, reason=rsp.message)
collection = client.get('muge_embedding')
批量生成Embedding并入库
遍历数据集中的图片数据,使用ModelScope的Pipeline提取Embedding,并将其插入到DashVector的集合中。例如:
from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline
from PIL import Image
import base64
import io
def image2str(image):
image_byte_arr = io.BytesIO()
image.save(image_byte_arr, format='PNG')
image_bytes = image_byte_arr.getvalue()
return base64.b64encode(image_bytes).decode()
pipe = pipeline(task=Tasks.multi_modal_embedding, model='damo/multi-modal_clip-vit-huge-patch14_zh', model_revision='v1.0.0')
BATCH_COUNT = 10
TOTAL_DATA_NUM = len(dataset)
idx = 0
while idx < TOTAL_DATA_NUM:
batch_range = range(idx, idx + BATCH_COUNT) if idx + BATCH_COUNT <= TOTAL_DATA_NUM else range(idx, TOTAL_DATA_NUM)
images = [dataset[i]['image'] for i in batch_range]
image_embeddings = pipe.forward({'img': images})['img_embedding']
image_vectors = image_embeddings.detach().cpu().numpy()
collection.insert([
Doc(id=str(img_id), vector=img_vec, fields={'png_img': image2str(img)})
for img_id, img_vec, img in zip(batch_range, image_vectors, images)
])
idx += BATCH_COUNT
print("Finish indexing muge validation data")
{your-dashvector-api-key}和{your-dashvector-cluster-endpoint}为您实际的API密钥和集群端点。damo/multi-modal_clip-vit-huge-patch14_zh)。BATCH_COUNT)以提高效率,避免单条数据频繁调用接口。虽然ModelScope和DashVector之间没有直接的方法将MsDataset一键添加到collection中,但通过上述步骤,您可以高效地完成数据加载、Embedding生成和向量入库的操作。
ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352