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

Recibe las últimas noticias y actualizaciones sobre el mundo de IA directamente en tu bandeja de entrada.