FremyCompany/BioLORD-2023-C

FremyCompany
Similitud de oraciones

Este modelo fue entrenado usando BioLORD, una nueva estrategia de preentrenamiento para producir representaciones significativas para oraciones clínicas y conceptos biomédicos. Las metodologías más avanzadas operan maximizando la similitud en la representación de nombres que refieren al mismo concepto y previniendo el colapso a través del aprendizaje contrastivo. No obstante, debido a que los nombres biomédicos no siempre se explican por sí mismos, a veces resulta 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 multi-relacional que consiste en ontologías biomédicas. Gracias a esta base, nuestro modelo produce representaciones de conceptos más semánticas que coinciden más estrechamente con la estructura jerárquica de las ontologías. BioLORD-2023 establece un nuevo estado del arte para la similitud textual tanto en oraciones clínicas (MedSTS) como en conceptos biomédicos (EHR-Rel-B). Este modelo se basa en sentence-transformers/all-mpnet-base-v2 y se ajustó adicionalmente en el Dataset BioLORD y en definiciones generadas por LLM del Glosario Automático de Terminología Clínica (AGCT).

Como usar

Este es un modelo de sentence-transformers: Mapea oraciones y párrafos a un espacio vectorial denso de 768 dimensiones y puede ser usado para tareas como agrupamiento o búsqueda semántica. Este modelo ha sido ajustado para el dominio biomédico. Aunque preserva una buena habilidad para producir embeddings para texto de propósito general, será más útil si se intenta procesar documentos médicos como registros electrónicos de salud (EHR) o notas clínicas. Tanto las oraciones como las frases pueden ser incrustadas en el mismo espacio latente.

Usar este modelo es fácil cuando tienes sentence-transformers instalado:

pip install -U sentence-transformers

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

model = SentenceTransformer('FremyCompany/BioLORD-2023-C')
embeddings = model.encode(sentences)
print(embeddings)

Sin sentence-transformers, puedes usar el modelo así:

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 todos los embeddings 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 que queremos embeddings de oraciones
sentences = ["Cat scratch injury", "Cat scratch disease", "Bartonellosis"]

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

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

# Calcular embeddings de tokens
with torch.no_grad():
    model_output = model(**encoded_input)

# Realizar pooling
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])

# Normalizar embeddings
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
print("Embeddings de oraciones:")
print(sentence_embeddings)

Funcionalidades

Maximiza la similitud en la representación de nombres que refieren al mismo concepto.
Previene el colapso a través del aprendizaje contrastivo.
Representaciones basadas en definiciones y descripciones breves derivadas de un grafo de conocimiento multi-relacional.
Produce representaciones semánticas de conceptos biomédicos.
Nuevo estado del arte en similitud textual para oraciones clínicas y conceptos biomédicos.

Casos de uso

Agrupamiento de textos biomédicos.
Búsqueda semántica en documentos médicos.
Procesamiento de registros electrónicos de salud (EHR).
Análisis de notas clínicas.