🚀 sentence-transformers/clip-ViT-B-32-multilingual-v1-onnx
これは、OpenAIのCLIP-ViT-B32モデルをONNX形式に変換した多言語版です。50以上の言語のテキストと画像を共通の密ベクトル空間にマッピングでき、画像と一致するテキストが近くなるようになっています。このモデルは、画像検索(ユーザーが大量の画像コレクションを検索する)や多言語ゼロショット画像分類(画像ラベルをテキストとして定義する)に使用できます。
🚀 クイックスタート
✨ 主な機能
このモデルは、OpenAIのCLIP-ViT-B32モデルをONNX形式に変換した多言語版です。50以上の言語のテキストと画像を共通の密ベクトル空間にマッピングでき、画像と一致するテキストが近くなるようになっています。
📦 インストール
sentence-transformersをインストールすると、このモデルの使用が簡単になります。
pip install -U sentence-transformers
💻 使用例
基本的な使用法
from sentence_transformers import SentenceTransformer, util
from PIL import Image, ImageFile
import requests
import torch
img_model = SentenceTransformer('clip-ViT-B-32')
text_model = SentenceTransformer('sentence-transformers/clip-ViT-B-32-multilingual-v1')
def load_image(url_or_path):
if url_or_path.startswith("http://") or url_or_path.startswith("https://"):
return Image.open(requests.get(url_or_path, stream=True).raw)
else:
return Image.open(url_or_path)
img_paths = [
"https://unsplash.com/photos/QtxgNsmJQSs/download?ixid=MnwxMjA3fDB8MXxhbGx8fHx8fHx8fHwxNjM1ODQ0MjY3&w=640",
"https://unsplash.com/photos/9UUoGaaHtNE/download?ixid=MnwxMjA3fDB8MXxzZWFyY2h8Mnx8Y2F0fHwwfHx8fDE2MzU4NDI1ODQ&w=640",
"https://unsplash.com/photos/Siuwr3uCir0/download?ixid=MnwxMjA3fDB8MXxzZWFyY2h8NHx8YmVhY2h8fDB8fHx8MTYzNTg0MjYzMg&w=640"
]
images = [load_image(img) for img in img_paths]
img_embeddings = img_model.encode(images)
texts = [
"A dog in the snow",
"Eine Katze",
"Una playa con palmeras."
]
text_embeddings = text_model.encode(texts)
cos_sim = util.cos_sim(text_embeddings, img_embeddings)
for text, scores in zip(texts, cos_sim):
max_img_idx = torch.argmax(scores)
print("Text:", text)
print("Score:", scores[max_img_idx] )
print("Path:", img_paths[max_img_idx], "\n")
📚 ドキュメント
多言語画像検索デモ
多言語画像検索のデモについては、Image_Search-multilingual.ipynb(Colab版)を参照してください。
画像検索とゼロショット画像分類の詳細については、SBERT.netのドキュメントを参照してください。
🔧 技術詳細
このモデルは、Multilingual Knowledge Distillationを使用して作成されました。教師モデルとして、元のclip-ViT-B-32
を使用し、学生モデルとしてmultilingual DistilBERTモデルを学習させました。並列データを使用して、多言語学生モデルは、多くの言語にわたって教師のベクトル空間を整列させるように学習します。その結果、50以上の言語で動作するテキスト埋め込みモデルが得られます。
CLIPの画像エンコーダは変更されていません。つまり、元のCLIP画像エンコーダを使用して画像をエンコードできます。
詳細と学習コードについては、SBERT.net - Multilingual-Modelsドキュメントを参照してください。
ベクトル空間を整列させるために、以下の50以上の言語を使用しました。ar, bg, ca, cs, da, de, el, es, et, fa, fi, fr, fr-ca, gl, gu, he, hi, hr, hu, hy, id, it, ja, ka, ko, ku, lt, lv, mk, mn, mr, ms, my, nb, nl, pl, pt, pt, pt-br, ro, ru, sk, sl, sq, sr, sv, th, tr, uk, ur, vi, zh-cn, zh-tw。
元の多言語DistilBERTは100以上の言語をサポートしています。このモデルもこれらの言語で動作しますが、最適な結果が得られない場合があります。
完全なモデルアーキテクチャ
SentenceTransformer(
(0): Transformer({'max_seq_length': 128, 'do_lower_case': False}) with Transformer model: DistilBertModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
(2): Dense({'in_features': 768, 'out_features': 512, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity'})
)
📄 ライセンス
このモデルのライセンスは、apache-2.0です。
引用と作者
このモデルは、sentence-transformersによって学習されました。
このモデルが役立つと思われる場合は、以下の論文を引用してください。Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "http://arxiv.org/abs/1908.10084",
}