このトピックでは、マルチモーダルデータをベクトル化するオープンソースのマルチモーダルベクトル化モデルModelScopeを使用して のし、ベクトル検索のために DashVector にインポートする方法について説明します。
ModelScope は、次世代のオープンソースモデル・アズ・ア・サービス(MaaS)プラットフォームを構築し、汎用 AI 開発者に柔軟で使いやすく、費用対効果の高いワンストップモデルを提供することを目指しています。
ModelScope は、業界をリードする事前学習済みモデルをまとめることで、反復的な研究開発コストを削減し、環境に優しく、よりオープンな AI 開発環境とモデルサービスを提供することを目指しています。このように、ModelScope はデジタル経済の発展に貢献できます。 ModelScope は、さまざまな種類の高品質モデルをオープンソースで提供しています。開発者は ModelScope から無料でモデルをダウンロードして体験できます。
ModelScope では、次のことができます。
事前学習済みモデルを無料で使用およびダウンロードする。
コマンドラインベースのモデル予測を実行して、モデルの効果を簡単かつ迅速に検証する。
独自のデータでモデルを微調整してカスタマイズする。
理論と実践のトレーニングに参加して、研究開発能力を効果的に向上させる。
コミュニティ全体とアイデアを共有する。
前提条件
DashVector:
クラスタが作成されていること。 詳細については、「クラスタの作成」をご参照ください。
API キーが取得されていること。 詳細については、「API キーの管理」をご参照ください。
最新バージョンの SDK がインストールされていること。詳細については、「DashVector SDK のインストール」をご参照ください。
ModelScope:
最新バージョンの SDK がインストールされます。
pip install -U modelscopeコマンドを実行します。
CLIP モデル
概要
このプロジェクトでは、中国語の大規模データ(最大 2 億のテキストとグラフィックのペア)を使用してトレーニングされた、CLIP モデルの中国語バージョンを使用します。このモデルは、画像とテキストのグラフィック検索および特徴抽出に使用できます。このモデルは、検索やレコメンデーションなどのシナリオに適用できます。
モデル ID | ベクトル次元 | 距離メトリック | ベクトルデータ型 | 備考 |
damo/multi-modal_clip-vit-base-patch16_zh | 512 | コサイン | Float32 |
|
damo/multi-modal_clip-vit-large-patch14_zh | 768 | コサイン | Float32 |
|
damo/multi-modal_clip-vit-enormous-patch14_zh | 1,024 | コサイン | Float32 |
|
damo/multi-modal_clip-vit-large-patch14_336_zh | 768 | コサイン | Float32 |
|
CLIP モデルの詳細については、ModelScope 公式 Web サイトをご覧ください。
例
コードを正しく実行するには、次の操作を実行する必要があります。
サンプルコードの {your-dashvector-api-key} を DashVector API キーに置き換えます。
サンプルコードの {your-dashvector-cluster-endpoint} を DashVector クラスタのエンドポイントに置き換えます。
サンプルコードの {model_id} を、前の表のモデル ID 列のいずれかの値に置き換えます。
サンプルコードの {model_dim} を、前の表のベクトル次元列のいずれかの値に置き換えます。
from modelscope.utils.constant import Tasks
from modelscope.pipelines import pipeline
from modelscope.preprocessors.image import load_image
from typing import List
from dashvector import Client
pipeline = pipeline(task=Tasks.multi_modal_embedding, model='{model_id}')
# テキスト埋め込みを生成します。
def generate_text_embeddings(texts: List[str]):
inputs = {'text': texts}
result = pipeline.forward(input=inputs)
return result['text_embedding'].numpy()
# 画像埋め込みを生成します。
def generate_img_embeddings(img: str):
input_img = load_image(img)
inputs = {'img': input_img}
result = pipeline.forward(input=inputs)
return result['img_embedding'].numpy()[0]
# DashVector クライアントを作成します。
client = Client(
api_key='{your-dashvector-api-key}',
endpoint='{your-dashvector-cluster-endpoint}'
)
# DashVector コレクションを作成します。
rsp = client.create('CLIP-embedding', dimension={model_dim})
assert rsp
collection = client.get('CLIP-embedding')
assert collection
# テキストをベクトルに変換し、DashVector に保存します。
collection.insert(
[
('ID1', generate_text_embeddings(['DashVector developed by Alibaba Cloud is one of the most high-performance and cost-effective vector database services.'])[0]),
('ID2', generate_img_embeddings('https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/pokemon.jpeg'))
]
)
# ベクトル検索を実行します。
docs = collection.query(
generate_text_embeddings(['The best vector database'])[0]
)
print(docs)