Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 13
How to use bdanko/umsb-mpnet-episodic-memory with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("bdanko/umsb-mpnet-episodic-memory")
sentences = [
"um according to dosing instructions. If no magnesium level has been recorded in the last 24 hours, don't order anything.\nmodel_prediction_summary: {\"finish_result\": \"[\\\"The patient S6537563's last serum magnesium level within the last 24 hours was 2.1 mg/dL (recorded at 2023-11-13T04:24:00+00:00). Since this value is within the normal range (>= 1.9 mg/dL) and not low according to the provided dosing instructions, no replacement IV magnesium was ordered.\\\"]\", \"status\": \"completed\"}",
"model correctly identified the age of the patient with MRN S6542579 as 28 based on the provided context and patient data\nAlthough the official reference solution pass flag was false (likely due to an internal evaluation error or missing expected output in the prompt metadata), the model's answer is factually correct according to the standard dataset associated with this MRN and the",
"he rate such as \\\"h\\\" \", \"type\": \"string\"}, \"value\": {\"type\": \"number\"}}, \"type\": \"object\"}}, \"type\": \"object\"}, \"type\":\n\"array\"}, \"route\": {\"properties\": {\"text\": {\"description\": \"The medication route.\", \"type\": \"string\"}}, \"type\": \"object\"}}, \"type\": \"object\"}, \"type\": \"array\"}, \"intent\": {\"description\": \"Use \\\"order\\\" \", \"type\": \"string\"}, \"medicationCodeableConcept\": {\"properties\": {\"coding\": {\"items\": {\"properties\": {\"code\": {\"description\": \"The actual code\", \"type\": \"string\"}, \"display\": {\"description\": \"Display name\", \"type\": \"string\"}, \"system\": {\"description\": \"Coding system such as \\\"http://hl7.org/fhir/sid/ndc\\\" \", \"type\": \"string\"}}, \"type\": \"object\"}, \"type\": \"array\"}, \"text\": {\"description\": \"The order display name of the medication, otherwise the record name.\", \"type\": \"string\"}}, \"type\": \"object\"}, \"resourceType\": {\"description\": \"Use \\\"MedicationRequest\\\" for medication requests.\", \"type\": \"string\"}, \"status\": {\"description\": \"The status of the medication request",
"um according to dosing instructions. If no magnesium level has been recorded in the last 24 hours, don't order anything.\nmodel_prediction_summary: {\"finish_result\": \"[\\\"The patient S6537563's last serum magnesium level within the last 24 hours was 2.1 mg/dL (recorded at 2023-11-13T04:24:00+00:00). Since this value is within the normal range (>= 1.9 mg/dL) and not low according to the provided dosing instructions, no replacement IV magnesium was ordered.\\\"]\", \"status\": \"completed\"}"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from sentence-transformers/all-mpnet-base-v2 on the umsb-episodic-memory dataset. It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for retrieval.
SentenceTransformer(
(0): Transformer({'transformer_task': 'feature-extraction', 'modality_config': {'text': {'method': 'forward', 'method_output_name': 'last_hidden_state'}}, 'module_output_name': 'token_embeddings', 'architecture': 'MPNetModel'})
(1): Pooling({'embedding_dimension': 768, 'pooling_mode': 'mean', 'include_prompt': True})
(2): Normalize({})
)
First install the Sentence Transformers library:
pip install -U sentence-transformers
Then you can load this model and run inference.
from sentence_transformers import SentenceTransformer
# Download from the 🤗 Hub
model = SentenceTransformer("sentence_transformers_model_id")
# Run inference
sentences = [
'e medication administration date. This parameter corresponds to the dosageInstruction.timing.repeat.boundsPeriod element\nMedication orders that do not have start and end dates within the search parameter dates are filtered. If the environment supports multiple time zones, the search dates are adjusted one day in both directions, so more medications might be returned than expected. Use caution when filtering a medication list by date as it is possible to filter out important active medications. Starting in the November 2022 version of Epic, this parameter is respected',
'e medication administration date. This parameter corresponds to the dosageInstruction.timing.repeat.boundsPeriod element\nMedication orders that do not have start and end dates within the search parameter dates are filtered. If the environment supports multiple time zones, the search dates are adjusted one day in both directions, so more medications might be returned than expected. Use caution when filtering a medication list by date as it is possible to filter out important active medications. Starting in the November 2022 version of Epic, this parameter is respected',
'e": {"properties": {"text": {"description": "The flowsheet ID, encoded flowsheet ID, or LOINC codes to flowsheet mapping\nWhat is being measured.", "type": "string"}}, "type": "object"}, "effectiveDateTime": {"description": "The date and time the observation was taken, in ISO format.", "type": "string"}, "resourceType": {"description": "Use \\"Observation\\" for vitals observations.", "type": "string"}, "status": {"description": "The status of the observation. Only a value of \\"final\\" is supported',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 768]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 1.0000, 0.3683],
# [1.0000, 1.0000, 0.3683],
# [0.3683, 0.3683, 1.0000]])
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
description": "The patient's family (last) name.", "type": "string"}, "gender": {"description": "The patient's legal sex |
description": "The patient's family (last) name.", "type": "string"}, "gender": {"description": "The patient's legal sex |
e to filter out important active medications. Starting in the November 2022 version of Epic, this parameter is respected |
|
| In May 2022 and earlier versions of Epic, this parameter is allowed but is ignored and no date filtering is applied.", "type": "string"}, "patient": {"description": "The FHIR patient ID.", "type": "string"}}, "required": ["patient"], "type": "object"}}, {"description": "MedicationRequest.Create", "name": "POST {api_base}/MedicationRequest", "parameters": {"properties": {"authoredOn": {"description": "The date the prescription was written.", "type": "string"}, "dosageInstruction": {"items": {"properties": {"doseAndRate": {"items": {"properties": {"doseQuantity": {"properties": {"unit": {"description": "unit for the dose such as "g" ", "type": "string"}, "value": {"type": "number"}}, "type": "object"}, "rateQuantity": {"properties": {"unit": {"description": "unit for the rate such as "h" ", "type": "string"}, "value": {"type": "number"}}, "type": "object"}}, "type"... | e to filter out important active medications. Starting in the November 2022 version of Epic, this parameter is respected |
| In May 2022 and earlier versions of Epic, this parameter is allowed but is ignored and no date filtering is applied.", "type": "string"}, "patient": {"description": "The FHIR patient ID.", "type": "string"}}, "required": ["patient"], "type": "object"}}, {"description": "MedicationRequest.Create", "name": "POST {api_base}/MedicationRequest", "parameters": {"properties": {"authoredOn": {"description": "The date the prescription was written.", "type": "string"}, "dosageInstruction": {"items": {"properties": {"doseAndRate": {"items": {"properties": {"doseQuantity": {"properties": {"unit": {"description": "unit for the dose such as "g" ", "type": "string"}, "value": {"type": "number"}}, "type": "object"}, "rateQuantity": {"properties": {"unit": {"description": "unit for the rate such as "h" ", "type": "string"}, "value": {"type": "number"}}, "type": "object"}}, "type"... | |
e": {"properties": {"text": {"description": "The flowsheet ID, encoded flowsheet ID, or LOINC codes to flowsheet mapping |
e": {"properties": {"text": {"description": "The flowsheet ID, encoded flowsheet ID, or LOINC codes to flowsheet mapping |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim",
"gather_across_devices": false,
"directions": [
"query_to_doc"
],
"partition_mode": "joint",
"hardness_mode": null,
"hardness_strength": 0.0
}
per_device_train_batch_size: 32num_train_epochs: 2learning_rate: 2e-05warmup_steps: 0.05fp16: Trueper_device_train_batch_size: 32num_train_epochs: 2max_steps: -1learning_rate: 2e-05lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_steps: 0.05optim: adamw_torch_fusedoptim_args: Noneweight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08optim_target_modules: Nonegradient_accumulation_steps: 1average_tokens_across_devices: Truemax_grad_norm: 1.0label_smoothing_factor: 0.0bf16: Falsefp16: Truebf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonegradient_checkpointing: Falsegradient_checkpointing_kwargs: Nonetorch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneuse_liger_kernel: Falseliger_kernel_config: Noneuse_cache: Falseneftune_noise_alpha: Nonetorch_empty_cache_steps: Noneauto_find_batch_size: Falselog_on_each_node: Truelogging_nan_inf_filter: Trueinclude_num_input_tokens_seen: nolog_level: passivelog_level_replica: warningdisable_tqdm: Falseproject: huggingfacetrackio_space_id: Nonetrackio_bucket_id: Nonetrackio_static_space_id: Noneper_device_eval_batch_size: 8prediction_loss_only: Trueeval_on_start: Falseeval_do_concat_batches: Trueeval_use_gather_object: Falseeval_accumulation_steps: Noneinclude_for_metrics: []batch_eval_metrics: Falsesave_only_model: Falsesave_on_each_node: Falseenable_jit_checkpoint: Falsepush_to_hub: Falsehub_private_repo: Nonehub_model_id: Nonehub_strategy: every_savehub_always_push: Falsehub_revision: Noneload_best_model_at_end: Falseignore_data_skip: Falserestore_callback_states_from_checkpoint: Falsefull_determinism: Falseseed: 42data_seed: Noneuse_cpu: Falseaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}parallelism_config: Nonedataloader_drop_last: Falsedataloader_num_workers: 0dataloader_pin_memory: Truedataloader_persistent_workers: Falsedataloader_prefetch_factor: Noneremove_unused_columns: Truelabel_names: Nonetrain_sampling_strategy: randomlength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falseddp_static_graph: Noneddp_backend: Noneddp_timeout: 1800fsdp: []fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}deepspeed: Nonedebug: []skip_memory_metrics: Truedo_predict: Falseresume_from_checkpoint: Nonewarmup_ratio: Nonelocal_rank: -1prompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss |
|---|---|---|
| 0.2604 | 25 | 0.3777 |
| 0.5208 | 50 | 0.3348 |
| 0.7812 | 75 | 0.3936 |
| 1.0417 | 100 | 0.3583 |
| 1.3021 | 125 | 0.3227 |
| 1.5625 | 150 | 0.3224 |
| 1.8229 | 175 | 0.3492 |
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
@misc{oord2019representationlearningcontrastivepredictive,
title={Representation Learning with Contrastive Predictive Coding},
author={Aaron van den Oord and Yazhe Li and Oriol Vinyals},
year={2019},
eprint={1807.03748},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/1807.03748},
}
Base model
sentence-transformers/all-mpnet-base-v2