Text Ranking
Transformers
Safetensors
English
Vietnamese
qwen3
text-generation
reranker
cross-encoder
listwise-reranking
generative-reranker
cve
cybersecurity
qdrant
secAI
Instructions to use DuyTa/sec-rerank with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use DuyTa/sec-rerank with Transformers:
# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("DuyTa/sec-rerank") model = AutoModelForCausalLM.from_pretrained("DuyTa/sec-rerank", device_map="auto") - Notebooks
- Google Colab
- Kaggle
| license: apache-2.0 | |
| base_model: Qwen/Qwen3-Reranker-0.6B | |
| base_model_relation: finetune | |
| library_name: transformers | |
| pipeline_tag: text-ranking | |
| language: | |
| - en | |
| - vi | |
| pretty_name: sec-rerank (fine-tuned Qwen3-Reranker) | |
| tags: | |
| - reranker | |
| - cross-encoder | |
| - text-ranking | |
| - listwise-reranking | |
| - generative-reranker | |
| - cve | |
| - cybersecurity | |
| - qdrant | |
| - secAI | |
| # sec-rerank | |
| **This is a fine-tuned version of [Qwen/Qwen3-Reranker-0.6B](https://huggingface.co/Qwen/Qwen3-Reranker-0.6B)** — a **listwise generative reranker** (second-stage ranker), not an embedding model. | |
| It was trained on grouped query–document examples whose **hard negatives were mined from a local Qdrant** collection (`cve_kb`) built from CVE investigation trajectories. It does not emit dense vectors; it reorders first-stage candidates (e.g. from [`DuyTa/sec-embedding`](https://huggingface.co/DuyTa/sec-embedding)). | |
| ## Training | |
| From `notebooks/Qwen3_Reranker_Colab.ipynb` (ms-swift): | |
| | | | | |
| |---|---| | |
| | Base | `Qwen/Qwen3-Reranker-0.6B` | | |
| | Task | `generative_reranker` (causal-LM reranker / cross-encoder scoring) | | |
| | Loss | **listwise reranking** (`--loss_type listwise_reranker`) | | |
| | Tuner | full-parameter SFT (`--tuner_type full`) | | |
| | Engine | [ms-swift](https://github.com/modelscope/ms-swift) `swift sft` | | |
| | Max length | 2048 | | |
| | Learning rate | 6e-6 | | |
| `(query, positive, negative)` rows are converted to SWIFT **grouped ranking** schema: | |
| - `messages` — system instruction + user query | |
| - `positive_messages` — gold CVE passage | |
| - `negative_messages` — Qdrant-mined hard-negative CVE passage(s) | |
| Train-time instruction: | |
| > Given a Vietnamese cybersecurity search query, retrieve passages from the CVE knowledge base that directly answer it. | |
| SWIFT fills the native Qwen3-Reranker `{Instruction}` slot from that system message. | |
| ### Hard-negative mining | |
| Positives and negatives are real CVE core-chunk text from local Qdrant `cve_kb` (NVD/MITRE). The negative is a **near-miss CVE** from the same collection — typically a different CWE (`hard_negative_type: different_cwe`): high lexical overlap, wrong document. The listwise objective ranks the gold passage above those mined hard negatives. | |
| Split: 33.6k train / 4.2k validation grouped examples. | |
| ## Inference | |
| Score each `(query, document)` with the native Qwen3-Reranker generative yes/no head. Use only to **rerank** a short candidate list from dense / hybrid retrieval. | |
| ```python | |
| # vLLM / OpenAI-compatible rerank endpoint | |
| # POST /v1/rerank | |
| { | |
| "model": "DuyTa/sec-rerank", | |
| "query": "CVE-2021-44228 JNDI lookup on log4j", | |
| "documents": ["...", "..."] | |
| } | |
| ``` | |
| ## Attribution & license | |
| Derived from [Qwen/Qwen3-Reranker-0.6B](https://huggingface.co/Qwen/Qwen3-Reranker-0.6B) (**Apache-2.0**). Credit for the base reranker belongs to the Qwen team. | |