Nano-Em1-0.6B-v2 / README.md
anuj0456's picture
Update README.md
910d7de verified
|
Raw
History Blame Contribute Delete
3.76 kB
---
license: apache-2.0
language:
- en
library_name: sentence-transformers
tags:
- sentence-transformers
- feature-extraction
- sentence-similarity
- text-embedding
pipeline_tag: feature-extraction
base_model: Qwen/Qwen3-0.6B
---
# Nano-Em1-0.6B-v2
Nano-Em1-0.6B-v2 is a 0.6B-parameter text embedding model built on a
bidirectional-attention variant of Qwen3-0.6B, developed by KiteFish AI. It
produces general-purpose embeddings for retrieval, classification, clustering,
semantic similarity, and pair classification, using task-specific instruction
prefixes.
## Model description
- **Base model:** Qwen3-0.6B
- **Attention:** bidirectional (the causal mask is replaced with full
bidirectional attention at every layer, implemented directly in the model's
code so it holds under any standard load — see [Architecture](#architecture))
- **Pooling:** mean pooling over token embeddings
- **Embedding dimension:** 1024
- **Max sequence length:** 512 tokens
## Architecture
Decoder-only language models use causal (left-to-right) attention by default,
which limits their quality as fixed-representation encoders. Nano-Em1 removes
the causal mask so every token attends to the full input in both directions.
This is implemented in the model's own code (`modeling_nano.py`, loaded via
`trust_remote_code=True`) rather than applied by the caller at inference time,
so it's preserved by any standard `AutoModel.from_pretrained` or
`SentenceTransformer` load.
## Usage
### Sentence-Transformers
```python
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"KiteFishAI/Nano-Em1-0.6B-v2",
trust_remote_code=True,
)
query_instruction = "Instruct: Given a query, retrieve documents that answer the query\nQuery: "
queries = [query_instruction + "How do I reset my password?"]
docs = ["To reset your password, go to Settings > Security and click 'Reset Password'."]
query_emb = model.encode(queries, normalize_embeddings=True)
doc_emb = model.encode(docs, normalize_embeddings=True)
similarity = query_emb @ doc_emb.T
print(similarity)
```
### Transformers
```python
import torch
from transformers import AutoModel, AutoTokenizer
model_id = "KiteFishAI/Nano-Em1-0.6B-v2"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModel.from_pretrained(model_id, trust_remote_code=True).eval()
def embed(texts):
inputs = tokenizer(texts, padding=True, truncation=True, max_length=512, return_tensors="pt")
with torch.no_grad():
out = model(**inputs).last_hidden_state
mask = inputs["attention_mask"].unsqueeze(-1).float()
pooled = (out * mask).sum(1) / mask.sum(1).clamp(min=1e-9)
return torch.nn.functional.normalize(pooled, dim=-1)
embs = embed(["example sentence one", "example sentence two"])
```
### Instructions
Queries — and passages, for symmetric tasks — should be prefixed:
```
Instruct: {task instruction}
Query: {text}
```
| Task type | Example instruction |
|---|---|
| Retrieval / Reranking | `Given a query, retrieve documents that answer the query` |
| Semantic similarity / Pair classification | `Retrieve semantically similar text` |
| Clustering | `Identify the topic or theme of the given texts` |
| Classification | `Classify the given text` |
For asymmetric tasks (retrieval, reranking), only the query takes the
instruction prefix — passages/documents are encoded as-is.
## Limitations
- English-focused; not evaluated on non-English tasks.
- Requires `trust_remote_code=True` to load the custom bidirectional
architecture.
## Citation
```bibtex
@misc{nano-em1-2026,
title = {Nano-Em1-0.6B-v2},
author = {KiteFish AI},
year = {2026},
url = {https://huggingface.co/KiteFishAI/Nano-Em1-0.6B-v2}
}
```