chest2vec_4B / README.md
lukeingawesome's picture
Upload README.md with huggingface_hub
93995c0 verified
|
Raw
History Blame Contribute Delete
3.63 kB
---
tags:
- text-embeddings
- retrieval
- radiology
- chest
- qwen
base_model:
- Qwen/Qwen3-Embedding-4B
library_name: transformers
pipeline_tag: feature-extraction
---
# chest2vec_4B
Chest-radiology **text embedding** model: [`Qwen/Qwen3-Embedding-4B`](https://huggingface.co/Qwen/Qwen3-Embedding-4B)
contrastively LoRA-adapted for chest CT / CXR report retrieval. Embedding = left-padding-aware
last-token (EOS) pooling + L2-norm. **Embedding dim: 2560.**
## Self-contained `AutoModel`
The LoRA adapter is **merged into the weights** (`model.safetensors`) and the tokenizer is bundled,
so loading needs **no `chest2vec` package and no download of the base Qwen3-Embedding weights**:
```python
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("chest2vec/chest2vec_4B", trust_remote_code=True).eval()
tok = AutoTokenizer.from_pretrained("chest2vec/chest2vec_4B", trust_remote_code=True)
docs = ["Bibasilar atelectasis with small bilateral pleural effusions. Cardiomegaly."]
doc_emb = model.embed_texts(docs, tokenizer=tok) # [N, 2560], L2-normalized
# instruction-conditioned query
q_emb = model.embed_instruction_query(
"Retrieve the chest CT report that is similar to the given report.",
["pleural effusion and cardiomegaly"], tokenizer=tok)
vals, idx = model.cosine_topk(q_emb, doc_emb, k=5)
```
## Matryoshka embeddings
Matryoshka (MRL)-trained — truncate to **512** or **256** dims (keep first *N* dims, re-normalize):
```python
emb512 = model.embed_texts(docs, tokenizer=tok, dim=512)
emb256 = model.embed_texts(docs, tokenizer=tok, dim=256)
```
Recommended dims: **2560 (full) · 512 · 256** (`config.matryoshka_dims`). Use the same `dim` for query and corpus.
## Recommended instructions
Instruction-conditioned (`Instruct: {instruction}\nQuery: {report}`). Apply to the **query** side;
embed the corpus without an instruction. Trained on chest **CT and CXR** across these families:
**Retrieval**`Retrieve the chest CT report that is similar to the given report.` ·
`Retrieve the CXR report that is similar to the given report.` ·
`Retrieve the CXR report that is similar to the given report with prior reference omitted.`
**Summarization**`Summarize the following chest CT report` · `Summarize the following CXR report` · `Summarize the given report.`
**Entity extraction (leaf)**`Given the following chest CT report, extract the presence/absence of entities` · `Given the following CXR report, extract the presence/absence of entities`
**Entity extraction (upper/coarse)**`Given the following chest CT report, extract the presence/absence of upper-level entities` · `Given the following CXR report, extract the presence/absence of upper class entities`
**Anatomy-specific**`From the following chest {CT report | X-ray report}, extract and return only the findings related to {REGION}, ignoring all information about other structures.`
- CT regions: lungs · airways and trachea · pleura · mediastinum and hilum · cardiovascular system · chest wall · bones and spine · upper abdomen · lower neck
- CXR regions: lungs and airways · pleura · hila and mediastinum · cardiovascular system · musculoskeletal structures and chest wall · tubes, catheters, and support devices · abdomen
## Details
- **Base:** Qwen/Qwen3-Embedding-4B (Apache-2.0) — architecture rebuilt from the bundled config; merged weights loaded from this repo. Default attention `sdpa` (use `flash_attention_2` on Ampere+ for speed).
- Merged weights reproduce the original adapter-based embeddings to **cosine ≥ 0.999**.