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