pubmedbert-base-embeddings-matryoshka
NeuML
Similitud de oraciones
Esta es una versión de PubMedBERT Embeddings con Aprendizaje de Representación Matryoshka aplicado. Esto permite tamaños dinámicos de incrustaciones de 64, 128, 256, 384, 512 y el tamaño completo de 768. Es importante notar que, aunque este método ahorra espacio, se utilizan los mismos recursos computacionales independientemente del tamaño de la dimensión. Sentence Transformers 2.4 agregó soporte para Matryoshka Embeddings.
Como usar
Uso (txtai)
import txtai
# Nuevas incrustaciones con dimensionalidad solicitada
embeddings = txtai.Embeddings(
path="neuml/pubmedbert-base-embeddings-matryoshka",
content=True,
dimensionality=256
)
embeddings.index(documents())
# Ejecutar una consulta
embeddings.search("consulta para ejecutar")
Uso (Sentence-Transformers)
from sentence_transformers import SentenceTransformer
sentences = ["Esta es una frase de ejemplo", "Cada frase se convierte"]
model = SentenceTransformer("neuml/pubmedbert-base-embeddings-matryoshka")
embeddings = model.encode(sentences)
# Dimensionalidad solicitada
dimensionality = 256
print(embeddings[:, :dimensionality])
Uso (Hugging Face Transformers)
from transformers import AutoTokenizer, AutoModel
import torch
# Mean Pooling: Tener en cuenta la máscara de atención para promediar correctamente
def meanpooling(output, mask):
embeddings = output[0] # El primer elemento del resultado del modelo contiene todas las incrustaciones de tokens
mask = mask.unsqueeze(-1).expand(embeddings.size()).float()
return torch.sum(embeddings * mask, 1) / torch.clamp(mask.sum(1), min=1e-9)
# Frases para las que queremos incrustaciones
dentences = ['Esta es una frase de ejemplo', 'Cada frase se convierte']
# Cargar modelo desde HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained("neuml/pubmedbert-base-embeddings-matryoshka")
model = AutoModel.from_pretrained("neuml/pubmedbert-base-embeddings-matryoshka")
# Tokenizar frases
inputs = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# Computar incrustaciones de tokens
with torch.no_grad():
output = model(**inputs)
# Realizar pooling. En este caso, mean pooling.
embeddings = meanpooling(output, inputs['attention_mask'])
# Dimensionalidad solicitada
dimensionality = 256
print("Incrustaciones de frases:")
print(embeddings[:, :dimensionality])
Funcionalidades
- Similaridad de frases
- Transformadores
- Extracción de características
- Inferencia de incrustaciones de texto
- Soporte para Safetensors
- Tamaños dinámicos de incrustaciones
- Ahorro de espacio
- Recursos computacionales constantes
Casos de uso
- Búsqueda semántica
- Fuente de conocimiento para generación aumentada por recuperación (RAG)
- Análisis de similaridad de textos en el campo de la medicina