FremyCompany/BioLORD-STAMB2-v1

FremyCompany
Similitud de oraciones

Este modelo se entrenó utilizando BioLORD, una nueva estrategia de preentrenamiento para producir representaciones significativas de frases clínicas y conceptos biomédicos. Este modelo fue introducido en 2022. Desde entonces, se ha publicado una nueva versión. Para la mayoría de los casos de uso, se recomienda utilizar BioLORD-2023, nuestra última generación de modelos BioLORD. Las metodologías de vanguardia operan maximizando la similitud en la representación de nombres que se refieren al mismo concepto y previenen el colapso a través del aprendizaje contrastivo. Sin embargo, debido a que los nombres biomédicos no siempre son autoexplicativos, a veces resultan en representaciones no semánticas. BioLORD supera este problema al basar sus representaciones de conceptos en definiciones, así como en descripciones breves derivadas de un grafo de conocimiento multirrelacional que consiste en ontologías biomédicas. Gracias a esto, nuestro modelo produce representaciones de conceptos más semánticas que se ajustan más estrechamente a la estructura jerárquica de las ontologías. BioLORD establece un nuevo estado del arte para la similitud de texto tanto en frases clínicas (MedSTS) como en conceptos biomédicos (MayoSRS). Este modelo está basado en sentence-transformers/all-mpnet-base-v2 y fue ajustado posteriormente en el BioLORD-Dataset.

Como usar

Usar este modelo se vuelve sencillo cuando tienes sentence-transformers instalado:

pip install -U sentence-transformers

Luego puedes usar el modelo de la siguiente manera:

from sentence_transformers import SentenceTransformer
sentences = ["Cat scratch injury", "Cat scratch disease", "Bartonellosis"]

model = SentenceTransformer('FremyCompany/BioLORD-STAMB2-v1')
embeddings = model.encode(sentences)
print(embeddings)

Sin sentence-transformers, puedes usar el modelo de la siguiente manera: Primero, pasa tu entrada a través del modelo transformer, luego debes aplicar la operación de agrupamiento correcta en la parte superior de las incrustaciones contextuales de palabras.

from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.functional as F

#Mean Pooling - Tener en cuenta la máscara de atención para el promedio correcto
def mean_pooling(model_output, attention_mask):
  token_embeddings = model_output[0] #El primer elemento de 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)

# Oraciones para las cuales queremos incrustaciones de frases
sentences = ["Cat scratch injury", "Cat scratch disease", "Bartonellosis"]

# Cargar modelo desde HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('FremyCompany/BioLORD-STAMB2-v1')
model = AutoModel.from_pretrained('FremyCompany/BioLORD-STAMB2-v1')

# Tokenizar oraciones
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

# Calcular incrustaciones de tokens
with torch.no_grad():
  model_output = model(**encoded_input)
# Realizar agrupamiento
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
# Normalizar incrustaciones
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
print("Incrustaciones de oraciones:")
print(sentence_embeddings)

Funcionalidades

Mapea frases y párrafos a un espacio vectorial denso de 768 dimensiones
Funciones de búsqueda semántica y agrupación
Ajustado para el dominio biomédico
Compatible con textos de propósito general pero más útil para documentos médicos

Casos de uso

Búsqueda semántica en registros médicos electrónicos (EHR)
Análisis de similitud de textos clínicos
Agrupamiento de anotaciones en notas clínicas
Representación semántica de conceptos biomédicos