--- language: - vi - en license: apache-2.0 tags: - embedding - vietnamese - legal - retrieval - linear-attention - gdn2 - matryoshka library_name: pytorch pipeline_tag: feature-extraction model-index: - name: deepx-embedding-v09 results: - task: type: Retrieval dataset: name: Zalo Legal Text Retrieval type: GreenNode/zalo-ai-legal-text-retrieval-vn metrics: - type: ndcg_at_10 value: 0.7449 - type: mrr_at_10 value: 0.6921 - type: recall_at_10 value: 0.9086 --- # DeepX Embedding 0.9 (Preview) ## Model Description > ⚠️ **Preview Release** — This is a preview version for testing and evaluation. Not recommended for production use. Final v1.0 release will include improved quality and optimizations. DeepX Embedding 0.9 is a Vietnamese-focused embedding model built on a novel **Gated DeltaNet-2 (GDN-2)** linear attention architecture with **O(n) complexity**. It uses Hyperloop weight sharing (9 unique layers, 35 compute passes) with architecture design inspired by Google Gemma 4 E2B. **Key features:** - O(n) linear attention via FLA (flash-linear-attention) Triton kernels - Matryoshka embedding: supports 256, 512, 768, 1024, 1536 dimensions - Trained for Vietnamese legal document retrieval - Tokenizer and token embedding from Gemma 4 E2B (frozen, not trained) - Effective model size: 486M trainable parameters (token embedding excluded) - Finetune and quantization only apply to 486M backbone parameters - Competitive with 560M-600M parameter SOTA models ## Architecture | Component | Detail | |---|---| | Base | Gemma 4 E2B (262K vocab, 1536 hidden) | | Attention | GDN-2 (Gated DeltaNet-2), pure linear O(n) | | Structure | Hyperloop: Begin(4) + Phase1×2(5) + Phase2×4(5) + End(1) = 35 passes | | Unique layers | 9 (shared via loop + per-iteration LoRA) | | Total params | 889M (486M trainable backbone + 403M frozen token embedding) | | Embedding dim | 1536 (Matryoshka: 256/512/768/1024/1536) | | Max sequence | 2048 tokens (training), 131K (theoretical via YaRN RoPE) | | Pooling | Attention-weighted pooling | | Depth signal | RoDE (Rotary Depth Encoding) | ### GDN-2 Attention Unlike standard softmax attention (O(n²)), GDN-2 uses a gated delta rule recurrence computed via chunked parallel scan. This gives: - **O(n) time and memory** for any sequence length - Constant memory per token (no KV cache growth) - Hardware-efficient via FLA Triton kernels ### Hyperloop Weight Sharing The model reuses 9 unique layer parameter sets across 35 compute passes: - 4 NarrowA layers (8 heads, MLP 6144) - 4 NarrowB layers (8 heads, MLP 12288) - 1 WideA layer (16 heads, MLP 6144) - 4 WideB layers (16 heads, MLP 12288) Per-iteration LoRA (rank 16) differentiates each pass within a loop. ## Training ### Data - Vietnamese legal query-passage pairs (500K+) - Vietnamese legal news retrieval pairs - English scientific retrieval pairs - Custom Vietnamese domain-specific data - Custom hard negative mining from Vietnamese legal corpus (61K documents) - Iterative hard negative refinement (multiple rounds, rank 1-50) ### Training Details - Optimizer: AdamW 8-bit - Loss: InfoNCE + Matryoshka (multi-dim) - Trainable params: 486M / 889M (54.7%) - Gradient checkpointing enabled - Pure GDN-2 (alpha=0, softmax skipped) ## Evaluation ### Zalo Legal Text Retrieval | Metric | DeepX v0.9 | mE5-large | vietlegal-harrier (SOTA) | |---|---|---|---| | **nDCG@10** | **0.7449** | 0.6660 | 0.7813 | | MRR@10 | 0.6921 | — | 0.7303 | | Recall@10 | 0.9086 | — | 0.9321 | ### Speed (O(n) advantage) | Sequence Length | DeepX (GDN-2) | Softmax Equivalent | |---|---|---| | 512 | 0.31 it/s | 0.31 it/s | | 2048 | 0.18 it/s | 0.01 it/s | | 8192 | ~0.18 it/s | OOM | Linear attention maintains constant speed regardless of sequence length. ## Usage ```python import torch from transformers import AutoTokenizer # Load tokenizer = AutoTokenizer.from_pretrained("google/gemma-4-E2B-it") # Load model (see repo for full pipeline code) model = load_deepx_model("deepx_v09.pt") # Encode text = "Mức phạt khi vượt đèn đỏ là bao nhiêu?" inputs = tokenizer(text, return_tensors="pt", max_length=2048, truncation=True) with torch.no_grad(): embedding = model(inputs["input_ids"], attention_mask=inputs["attention_mask"], normalize=True) # embedding.shape = (1, 1536) # Matryoshka: use first N dims embedding_256d = embedding[:, :256] # 90% quality, 6x less storage ``` ## Intended Use - Vietnamese legal document retrieval - Vietnamese question-answering (retrieval component) - Cross-lingual retrieval (Vietnamese ↔ English) - General Vietnamese semantic search ## Limitations - Primarily trained on Vietnamese legal domain; general-domain performance may be lower - Requires FLA library (Triton kernels) for efficient inference - Not trained on conversational/chat data - English performance limited (secondary training only) ## Hardware Requirements - **Inference**: RTX 3060 12GB+ (model ~3.5GB VRAM) - **Training**: RTX 5070 Ti 16GB+ recommended - **Dependencies**: PyTorch 2.0+, transformers, fla (flash-linear-attention), triton ## Citation ```bibtex @misc{deepx2026, title={DeepX: Vietnamese Embedding Model with Gated DeltaNet-2 Linear Attention}, author={DXTech Asia}, year={2026}, url={https://huggingface.co/dxtech-asia/deepx-embedding-v09} } ``` ## License Apache 2.0 (code) / Model weights follow Gemma license terms.