|
--- |
|
language: en |
|
license: mit |
|
tags: |
|
- medical |
|
- sentence-transformers |
|
- text-embedding |
|
- sentence-similarity |
|
- onnx |
|
- semantic-search |
|
- opensearch |
|
- healthcare |
|
- medical-embeddings |
|
datasets: |
|
- abhinand/MedEmbed-corpus |
|
metrics: |
|
- cosine-similarity |
|
library_name: sentence-transformers |
|
pipeline_tag: sentence-similarity |
|
model-index: |
|
- name: MedEmbed-large-v0.1-onnx |
|
results: |
|
- task: |
|
type: Sentence Similarity |
|
name: Semantic Retrieval |
|
dataset: |
|
type: abhinand/MedEmbed-corpus |
|
name: MedEmbed corpus |
|
metrics: |
|
- type: cosine-similarity |
|
value: N/A |
|
base_model: abhinand/MedEmbed-Large-v0.1 |
|
inference: true |
|
--- |
|
|
|
# MedEmbed-large-v0.1 ONNX Model |
|
|
|
This repository contains an ONNX version of the MedEmbed-large-v0.1 model, which was originally a SentenceTransformer model. |
|
|
|
## Model Description |
|
|
|
The original MedEmbed-large-v0.1 model is a sentence embedding model specialized for medical text. This ONNX version maintains the same functionality but is optimized for deployment in production environments. |
|
|
|
This model is a derivative of [abhinand/MedEmbed-Large-v0.1](https://huggingface.co/abhinand/MedEmbed-Large-v0.1), which itself is a fine-tune of [abhinand/MedEmbed-base-v0.1](https://huggingface.co/abhinand/MedEmbed-base-v0.1). |
|
|
|
## ONNX Conversion |
|
|
|
The model was converted to ONNX format using PyTorch's `torch.onnx.export` functionality with ONNX opset version 14. |
|
|
|
## Model Inputs and Outputs |
|
|
|
- **Inputs**: |
|
- `input_ids`: Tensor of shape `[batch_size, sequence_length]` |
|
- `attention_mask`: Tensor of shape `[batch_size, sequence_length]` |
|
|
|
- **Output**: |
|
- `sentence_embedding`: Tensor of shape `[batch_size, embedding_dimension]` |
|
|
|
## Usage with Hugging Face |
|
|
|
```python |
|
import onnxruntime as ort |
|
from transformers import AutoTokenizer |
|
|
|
# Load tokenizer |
|
tokenizer = AutoTokenizer.from_pretrained("YOUR_MODEL_PATH") |
|
|
|
# Load ONNX model |
|
onnx_path = "YOUR_MODEL_PATH/MedEmbed-large-v0.1.onnx" |
|
session = ort.InferenceSession(onnx_path) |
|
|
|
# Tokenize input text |
|
text = "Your medical text here" |
|
inputs = tokenizer(text, return_tensors="np", padding=True, truncation=True) |
|
|
|
# Run inference with ONNX model |
|
onnx_inputs = { |
|
"input_ids": inputs["input_ids"], |
|
"attention_mask": inputs["attention_mask"] |
|
} |
|
embeddings = session.run(None, onnx_inputs)[0] |
|
``` |
|
|
|
## Usage with OpenSearch |
|
|
|
This model can be integrated with OpenSearch for neural search capabilities. Here's how to set it up: |
|
|
|
### 1. Upload the model to OpenSearch |
|
|
|
```bash |
|
# Create a zip file containing your model files |
|
zip -r medembedlarge.zip MedEmbed-large-v0.1.onnx config.json tokenizer_config.json tokenizer.json vocab.txt special_tokens_map.json |
|
|
|
# Upload the model using the OpenSearch REST API |
|
curl -XPUT "https://your-opensearch-endpoint/_plugins/_ml/models/medembedlarge" \ |
|
-H "Content-Type: application/json" \ |
|
-d '{ |
|
"name": "medembedlarge", |
|
"version": "1.0.0", |
|
"model_format": "ONNX", |
|
"model_config": { |
|
"model_type": "bert", |
|
"embedding_dimension": 768, |
|
"framework_type": "sentence_transformers" |
|
} |
|
}' -u "admin:admin" |
|
|
|
# Upload the model file |
|
curl -XPOST "https://your-opensearch-endpoint/_plugins/_ml/models/medembedlarge/_upload" \ |
|
-H "Content-Type: multipart/form-data" \ |
|
-F "[email protected]" -u "admin:admin" |
|
``` |
|
|
|
### 2. Deploy the model |
|
|
|
```bash |
|
curl -XPOST "https://your-opensearch-endpoint/_plugins/_ml/models/medembedlarge/_deploy" \ |
|
-H "Content-Type: application/json" -u "admin:admin" |
|
``` |
|
|
|
### 3. Create a neural search pipeline |
|
|
|
```bash |
|
curl -XPUT "https://your-opensearch-endpoint/_plugins/_ml/pipelines/medembedlarge-pipeline" \ |
|
-H "Content-Type: application/json" \ |
|
-d '{ |
|
"description": "Neural search pipeline for medical text", |
|
"processors": [ |
|
{ |
|
"text_embedding": { |
|
"model_id": "medembedlarge", |
|
"field_map": { |
|
"text_field": "text_embedding" |
|
} |
|
} |
|
} |
|
] |
|
}' -u "admin:admin" |
|
``` |
|
|
|
### 4. Create an index with embedding field |
|
|
|
```bash |
|
curl -XPUT "https://your-opensearch-endpoint/medical-documents" \ |
|
-H "Content-Type: application/json" \ |
|
-d '{ |
|
"settings": { |
|
"index.plugins.search_pipeline.default": "medembedlarge-pipeline" |
|
}, |
|
"mappings": { |
|
"properties": { |
|
"text_field": { |
|
"type": "text" |
|
}, |
|
"text_embedding": { |
|
"type": "knn_vector", |
|
"dimension": 768, |
|
"method": { |
|
"name": "hnsw", |
|
"space_type": "cosinesimil", |
|
"engine": "nmslib" |
|
} |
|
} |
|
} |
|
} |
|
}' -u "admin:admin" |
|
``` |
|
|
|
### 5. Index documents with the neural search pipeline |
|
|
|
```bash |
|
curl -XPOST "https://your-opensearch-endpoint/medical-documents/_doc" \ |
|
-H "Content-Type: application/json" \ |
|
-d '{ |
|
"text_field": "Patient presented with symptoms of hypertension and diabetes." |
|
}' -u "admin:admin" |
|
``` |
|
|
|
### 6. Perform a neural search query |
|
|
|
```bash |
|
curl -XPOST "https://your-opensearch-endpoint/medical-documents/_search" \ |
|
-H "Content-Type: application/json" \ |
|
-d '{ |
|
"query": { |
|
"neural": { |
|
"text_embedding": { |
|
"query_text": "hypertension treatment options", |
|
"model_id": "medembedlarge", |
|
"k": 10 |
|
} |
|
} |
|
} |
|
}' -u "admin:admin" |
|
``` |
|
|
|
Note: Replace "https://your-opensearch-endpoint" with your actual OpenSearch endpoint, and adjust authentication credentials as needed for your environment. |
|
|