sentence-transformers/clip-ViT-B-32-multilingual-v1
sentence-transformers
Similitud de oraciones
Esta es una versión multilingüe del modelo OpenAI CLIP-ViT-B32. Puedes mapear texto (en más de 50 idiomas) e imágenes a un espacio vectorial denso común de manera que las imágenes y los textos coincidentes estén cerca. Este modelo puede ser utilizado para la búsqueda de imágenes (los usuarios buscan a través de una gran colección de imágenes) y para la clasificación de imágenes multilingües sin entrenamiento (las etiquetas de las imágenes se definen como texto).
Como usar
Usando este modelo se vuelve fácil cuando tienes instalado sentence-transformers:
pip install -U sentence-transformers
Luego puedes usar el modelo de esta manera:
from sentence_transformers import SentenceTransformer, util
from PIL import Image, ImageFile
import requests
import torch
# Usamos el clip-ViT-B-32 original para codificar imágenes
img_model = SentenceTransformer('clip-ViT-B-32')
# Nuestro modelo de embeddings de texto está alineado con el modelo de imágenes y mapea más de 50
# idiomas al mismo espacio vectorial
text_model = SentenceTransformer('sentence-transformers/clip-ViT-B-32-multilingual-v1')
# Ahora cargamos y codificamos las imágenes
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)
# Cargamos 3 imágenes. Puedes pasar URLs o
# una ruta en tu disco
ing_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]
# Mapeamos las imágenes al espacio vectorial
img_embeddings = img_model.encode(images)
# Ahora codificamos nuestro texto:
texts = [
"A dog in the snow",
"Eine Katze", # Alemán: Un gato
"Una playa con palmeras." # Español: una playa con palmeras
]
text_embeddings = text_model.encode(texts)
# Calculamos las similitudes de coseno:
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")
Funcionalidades
- Mapeo de texto e imágenes a un espacio vectorial común
- Soporte para más de 50 idiomas
- Búsqueda de imágenes
- Clasificación de imágenes multilingües sin entrenamiento
Casos de uso
- Búsqueda de imágenes
- Clasificación de imágenes multilingües sin entrenamiento