DPR-XM

antoinelouis
Similitud de oraciones

DPR-XM es un modelo bi-codificador de un solo vector denso multilingüe. Mapea preguntas y párrafos a vectores densos de 768 dimensiones y puede ser utilizado para la búsqueda semántica. El modelo utiliza una base XMOD, lo que le permite aprender de la afinación en un idioma con muchos recursos, como el inglés, y realizar la recuperación de información en múltiples idiomas sin ajuste previo.

Como usar

Uso

Aquí hay algunos ejemplos para usar DPR-XM con Sentence-Transformers, FlagEmbedding o Huggingface Transformers.

Usando Sentence-Transformers

pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer

queries = ["Ceci est un exemple de requête.", "Voici un second exemple."]
passages = ["Ceci est un exemple de passage.", "Et voilà un deuxième exemple."]
language_code = "fr_FR" #Encuentra todos los códigos aquí: https://huggingface.co/facebook/xmod-base#languages

model = SentenceTransformer('antoinelouis/dpr-xm')
model[0].auto_model.set_default_language(language_code) #Activar los adaptadores específicos del idioma

q_embeddings = model.encode(queries, normalize_embeddings=True)
p_embeddings = model.encode(passages, normalize_embeddings=True)

similarity = q_embeddings @ p_embeddings.T
print(similarity)

Usando FlagEmbedding

pip install -U FlagEmbedding
from FlagEmbedding import FlagModel

queries = ["Ceci est un exemple de requête.", "Voici un second exemple."]
passages = ["Ceci est un exemple de passage.", "Et voilà un deuxième exemple."]
language_code = "fr_FR" #Encuentra todos los códigos aquí: https://huggingface.co/facebook/xmod-base#languages

model = FlagModel('antoinelouis/dpr-xm')
model.model.set_default_language(language_code) #Activar los adaptadores específicos del idioma

q_embeddings = model.encode(queries, normalize_embeddings=True)
p_embeddings = model.encode(passages, normalize_embeddings=True)

similarity = q_embeddings @ p_embeddings.T
print(similarity)

Usando Transformers

pip install -U transformers
from transformers import AutoTokenizer, AutoModel
from torch.nn.functional import normalize

def mean_pooling(model_output, attention_mask):
    """ Realizar media del pooling sobre las incrustaciones contextuales de las palabras, ignorando los tokens de máscara en el cálculo de la media."""
    token_embeddings = model_output[0] #El primer elemento del model_output contiene todas las incrustaciones de tokens
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)


queries = ["Ceci est un exemple de requête.", "Voici un second exemple."]
passages = ["Ceci est un exemple de passage.", "Et voilà un deuxième exemple."]
language_code = "fr_FR" #Encuentra todos los códigos aquí: https://huggingface.co/facebook/xmod-base#languages

tokenizer = AutoTokenizer.from_pretrained('antoinelouis/dpr-xm')
model = AutoModel.from_pretrained('antoinelouis/dpr-xm')
model.set_default_language(language_code) #Activar los adaptadores específicos del idioma

q_input = tokenizer(queries, padding=True, truncation=True, return_tensors='pt')
p_input = tokenizer(passages, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
    q_output = model(**encoded_queries)
    p_output = model(**encoded_passages)
    q_embeddings = mean_pooling(q_output, q_input['attention_mask'])
    q_embedddings = normalize(q_embeddings, p=2, dim=1)
    p_embeddings = mean_pooling(p_output, p_input['attention_mask'])
    p_embedddings = normalize(p_embeddings, p=2, dim=1)

similarity = q_embeddings @ p_embeddings.T
print(similarity)

Funcionalidades

Modelo bi-codificador de un solo vector denso multilingüe
Asigna preguntas y párrafos a vectores densos de 768 dimensiones
Utiliza una base XMOD
Permite aprender de la afinación en un idioma con muchos recursos
Soporta la recuperación sin ajuste previo en múltiples idiomas

Casos de uso

Búsqueda semántica en múltiples idiomas
Recuperación de información multilingüe sin ajuste previo
Mapeo de preguntas y párrafos a vectores densos para consultas de búsqueda