modelscope中,有没有直接把MsDataset加到collection的方法?

modelscope中,有没有直接把MsDataset加到Dashvector的collection的方法?

展开
收起
小小爱吃香菜 2024-03-19 16:18:43 85 分享 版权
阿里云 AI 助理回答

在ModelScope和DashVector的结合使用中,目前没有直接将MsDataset对象一次性添加到DashVector的collection中的方法。根据现有资料,您需要通过以下步骤手动完成数据的加载、Embedding生成以及向量入库操作。

具体实现步骤

  1. 加载数据集
    使用MsDataset.load方法加载目标数据集(如多模态牧歌数据集)。例如:

    from modelscope.msdatasets import MsDataset
    
    dataset = MsDataset.load("muge", split="validation")
    
  2. 初始化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')
    
  3. 批量生成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")
    

注意事项

  • API密钥与集群端点:确保替换代码中的{your-dashvector-api-key}{your-dashvector-cluster-endpoint}为您实际的API密钥和集群端点。
  • 模型选择:根据具体任务选择合适的ModelScope模型(如damo/multi-modal_clip-vit-huge-patch14_zh)。
  • 性能优化:建议使用批量处理(如上述代码中的BATCH_COUNT)以提高效率,避免单条数据频繁调用接口。

总结

虽然ModelScope和DashVector之间没有直接的方法将MsDataset一键添加到collection中,但通过上述步骤,您可以高效地完成数据加载、Embedding生成和向量入库的操作。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352

还有其他疑问?
咨询AI助理