FremyCompany/BioLORD-2023

FremyCompany
Similitud de oraciones

Este modelo se entrenó utilizando BioLORD, una nueva estrategia de preentrenamiento para producir representaciones significativas para frases clínicas y conceptos biomédicos. Las metodologías de última generación operan maximizando la similitud en la representación de nombres que refieren al mismo concepto y previniendo colapsos a través del aprendizaje contrastivo. Sin embargo, dado que los nombres biomédicos no siempre son autoexplicativos, a veces resulta en representaciones no semánticas. BioLORD supera este problema fundamentando sus representaciones de conceptos usando definiciones, así como descripciones breves derivadas de un gráfico de conocimiento multirrelacional que consiste en ontologías biomédicas. Gracias a esta fundamentación, nuestro modelo produce representaciones de conceptos más semánticas que se ajustan más a la estructura jerárquica de las ontologías. BioLORD-2023 establece un nuevo estado del arte para la similitud textual tanto en frases clínicas (MedSTS) como en conceptos biomédicos (EHR-Rel-B). Este modelo se basa en sentence-transformers/all-mpnet-base-v2 y fue afinado adicionalmente en el BioLORD-Dataset y 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 utilizarse para tareas como clustering o búsqueda semántica. Este modelo ha sido afinado para el dominio biomédico. Mientras preserva una buena capacidad para producir embeddings para textos de propósito general, será más útil si estás tratando de procesar documentos médicos como registros EHR o notas clínicas. Tanto oraciones como frases pueden ser embedidas en el mismo espacio latente. Usar este modelo se vuelve fácil cuando tienes sentence-transformers instalado:

pip install -U sentence-transformers

Entonces puedes usar el modelo así:

from sentence_transformers import SentenceTransformer
sentences = ["Lesión por arañazo de gato", "Enfermedad por arañazo de gato", "Bartonelosis"]

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

Sin sentence-transformers, puedes usar el modelo de esta manera: primero, pasas tu entrada a través del modelo transformer, luego tienes que aplicar la operación de pooling adecuada sobre los embeddings contextualizados.

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

#Pooling promedio - Tener en cuenta la máscara de atención para un 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 oración
sentences = ["Lesión por arañazo de gato", "Enfermedad por arañazo de gato", "Bartonelosis"]

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

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

#Computar 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)

Mis propias contribuciones para este modelo están cubiertas por la licencia MIT. Sin embargo, dado que los datos utilizados para entrenar este modelo provienen de UMLS y SnomedCT, deberás asegurarte de tener la licencia adecuada de UMLS y SnomedCT antes de usar este modelo. Tanto UMLS como SnomedCT son gratuitos en la mayoría de los países, pero es posible que tengas que crear una cuenta e informar sobre tu uso de los datos anualmente para mantener una licencia válida.

Funcionalidades

Similitud de oraciones
Transformadores de oraciones
PyTorch
Extracción de características
Médico
Biología
Compatible con AutoTrain
Compatibilidad con Endpoints

Casos de uso

Búsqueda semántica en documentos médicos
Clustering de textos biomédicos
Procesamiento de registros electrónicos de salud (EHR)
Notas clínicas