alt.freeweights.vision / USER2-small-ONNX
From: onnx-community <huggingface.co/onnx-community>Newsgroups: alt.freeweights.visionSubject:

USER2-small-ONNX

Date: 2026-11-15Commit: 4a3caf0Signed: 2DC28CC7B26A283B ✓

Sentence similarity model. Onnx weights, 538 MB in all. Published by onnx-community under Apache-2.0.

vision538MBUSER2-small-ONNXonnxpermissive
FactsParamsnot statedSize538 MBFormatsonnxTasksentence similarityLicenseApache-2.0From sourcepermissive
$ fw get onnx-community/USER2-small-ONNX
# manifest sha256 d32cfda605eb… · 538 MB · 14 files
$ fw verify ./USER2-small-ONNX onnx-community/USER2-small-ONNX
From sourceHosted (signed)onnx-community/USER2-small-ONNXLast check: 2026-11-15 05:19 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Quantized of USER2-small.

Works with

Runs with

Ranked by fit to this model (onnx), then by GitHub stars.

Convert with

Evaluate with

Scan with

Overview

Size
538 MB
Weights
34.8 MB (smallest of 8 ONNX variants)
Parameters
not stated
Formats
onnx
Task
sentence similarity
License
Apache-2.0 (permissive)
Files
14, each with a sha256
Publisher
onnx-community
Added
2026-11-15
Section
alt.freeweights.vision
Lineage

Original release from the publisher.

Base model: Pood666/USER2-small

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 05:19 UTCpassed

Model card

From the publisher at commit 4a3caf0. Shown as plain text with links; images open at the publisher.

USER2-small (ONNX)#

This is an ONNX version of Pood666/USER2-small. It was automatically converted and uploaded using this Hugging Face Space.

Usage with Transformers.js#

See the pipeline documentation for sentence-similarity: https://huggingface.co/docs/transformers.js/api/pipelines


USER2-small#

USER2 is a new generation of the Universal Sentence Encoder for Russian, designed for sentence representation with long-context support of up to 8,192 tokens.

The models are built on top of the RuModernBERT encoders and are fine-tuned for retrieval and semantic tasks. They also support Matryoshka Representation Learning (MRL) — a technique that enables reducing embedding size with minimal loss in representation quality.

This is a small model with 34 million parameters.

ModelSizeContext LengthHidden DimMRL Dims
deepvk/USER2-small34M8192384[32, 64, 128, 256, 384]
deepvk/USER2-base149M8192768[32, 64, 128, 256, 384, 512, 768]

Performance#

To evaluate the model, we measure quality on the MTEB-rus benchmark. Additionally, to measure long-context retrieval, we run Russian subset of MultiLongDocRetrieval (MLDR) task.

MTEB-rus

ModelSizeHidden DimContext LengthMRL supportMean(task)Mean(taskType)ClassificationClusteringMultiLabelClassificationPairClassificationRerankingRetrievalSTS
USER-base124M768512❌58.1156.6759.8953.2637.7259.7655.5856.1474.35
USER-bge-m3359M10248192❌62.8062.2861.9253.6636.1865.0768.7273.6376.76
multilingual-e5-base278M768512❌58.3457.2458.2550.2733.6554.9866.2467.1470.16
multilingual-e5-large-instruct560M1024512❌65.0063.3666.2863.1341.1563.8964.3568.2376.48
jina-embeddings-v3572M10248192✅63.4560.9365.2460.9039.2459.2253.8671.9976.04
ru-en-RoSBERTa404M1024512❌61.7160.4062.5656.0638.8860.7963.8966.5274.13
USER2-small34M3848192✅58.3256.6859.7657.0633.5654.0258.2661.8772.25
USER2-base149M7688192✅61.1259.5961.6759.2236.6156.3962.0666.9074.28

MLDR-rus

ModelSizenDCG@10 ↑
USER-bge-m3359M58.53
KaLM-v1.5494M53.75
jina-embeddings-v3572M49.67
E5-mistral-7b7.11B52.40
USER2-small34M51.69
USER2-base149M54.17

We compare only model with context length of 8192.

Matryoshka#

To evaluate MRL capabilities, we also use MTEB-rus, applying dimensionality cropping to the embeddings to match the selected size.

Image: MRL

Usage#

Prefixes#

This model is trained similarly to Nomic Embed and expects task-specific prefixes to be added to the input. The choice of prefix depends on the specific task. We follow a few general guidelines when selecting a prefix:

  • "classification: " is the default and most universal prefix, often performing well across a variety of tasks.
  • "clustering: " is recommended for clustering applications: group texts into clusters, discover shared topics, or remove semantic duplicates.
  • "search_query: " and "search_document: " are intended for retrieval and reranking tasks. Also, in some classification tasks, especially with shorter texts, "search_query" shows superior performance to other prefixes. On the other hand, "search_document" can be beneficial for long-context sentence similarity tasks.

However, we encourage users to experiment with different prefixes, as certain domains may benefit from specific ones.

Sentence Transformers#
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("deepvk/USER2-small")

query_embeddings = model.encode(["Когда был спущен на воду первый миноносец «Спокойный»?"], prompt_name="search_query")
document_embeddings = model.encode(["Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года."], prompt_name="search_document")

similarities = model.similarity(query_embeddings, document_embeddings)

To truncate the embedding dimension, simply pass the new value to the model initialization:

model = SentenceTransformer("deepvk/USER2-small", truncate_dim=128)

This model was trained with dimensions [32, 64, 128, 256, 384], so it’s recommended to use one of these for best performance.

Transformers#
import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel


def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]
    input_mask_expanded = (
        attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    )
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(
        input_mask_expanded.sum(1), min=1e-9
    )


queries = ["search_query: Когда был спущен на воду первый миноносец «Спокойный»?"]
documents = ["search_document: Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года."]

tokenizer = AutoTokenizer.from_pretrained("deepvk/USER2-small")
model = AutoModel.from_pretrained("deepvk/USER2-small")

encoded_queries = tokenizer(queries, padding=True, truncation=True, return_tensors="pt")
encoded_documents = tokenizer(documents, padding=True, truncation=True, return_tensors="pt")

with torch.no_grad():
    queries_outputs = model(**encoded_queries)
    documents_outputs = model(**encoded_documents)

query_embeddings = mean_pooling(queries_outputs, encoded_queries["attention_mask"])
query_embeddings = F.normalize(query_embeddings, p=2, dim=1)
doc_embeddings = mean_pooling(documents_outputs, encoded_documents["attention_mask"])
doc_embeddings = F.normalize(doc_embeddings, p=2, dim=1)

similarities = query_embeddings @ doc_embeddings.T

To truncate the embedding dimension, select the first values:

query_embeddings = mean_pooling(queries_outputs, encoded_queries["attention_mask"])
query_embeddings = query_embeddings[:, :truncate_dim]
query_embeddings = F.normalize(query_embeddings, p=2, dim=1)

Training details#

This is the small version with 34 million parameters, based on RuModernBERT-small. It was fine-tuned in three stages: RetroMAE, Weakly Supervised Fine-Tuning, and Supervised Fine-Tuning.

Following the bge-m3 training strategy, we use RetroMAE as a retrieval-oriented continuous pretraining step. Leveraging data from the final stage of RuModernBERT training, RetroMAE enhances retrieval quality—particularly for long-context inputs.

To follow best practices for building a state-of-the-art encoder, we rely on large-scale training with weakly related text pairs. However, such datasets are not publicly available for Russian, unlike for English or Chinese. To overcome this, we apply two complementary strategies:

  • Cross-lingual transfer: We train on both English and Russian data, leveraging English resources (nomic-unsupervised) alongside our in-house English-Russian parallel corpora.
  • Unsupervised pair mining: From the deepvk/cultura_ru_edu corpus, we extract 50M pairs using a simple heuristic—selecting non-overlapping text blocks that are not substrings of one another.

This approach has shown promising results, allowing us to train high-performing models with minimal target-language pairs—especially when compared to pipelines used for other languages.

The table below shows the datasets used and the number of times each was upsampled.

DatasetSizeUpsample
nomic-en235M1
nomic-ru39M3
in-house En-Ru parallel250M1
cultura-sampled50M1
Total652M

For the third stage, we switch to cleaner, task-specific datasets. In some cases, additional filtering was applied using a cross-encoder. For all retrieval datasets, we mine hard negatives.

DatasetExamplesNotes
Nomic-en-supervised1.7 MUnmodified
AllNLI200 KTranslated SNLI/MNLI/ANLI to Russian
fishkinet-posts93 KTitle–content pairs
gazeta55 KTitle–text pairs
habr_qna100 KTitle–description pairs
lenta100 KTitle–news pairs
miracl_ru10 KOne positive per anchor
mldr_ru1.8 KUnmodified
mr-tydi_ru5.3 KUnmodified
mmarco_ru500 KUnmodified
ru-HNP100 KOne pos + one neg per anchor
ru‑queries199 KIn-house (generated as in arXiv:2401.00368)
ru‑WaNLI35 KEntailment -> pos, contradiction -> neg
sampled_wiki1 MSampled text blocks from Wikipedia
summ_dialog_news37 KSummary–info pairs
wikiomnia_qna100 KQA pairs (T5-generated)
yandex_q83 KQ+desc-answer pairs
Total4.3 M
Ablation#

Alongside the final model, we also release all intermediate training steps. Both the retromae and weakly_sft models are available under the specified revisions in this repository. We hope these additional models prove useful for your experiments.

Below is a comparison of all training stages on a subset of MTEB-rus.

Image: training_stages

Citations#

@misc{deepvk2025user,
    title={USER2},
    author={Malashenko, Boris and Spirin, Egor and Sokolov Andrey},
    url={https://huggingface.co/deepvk/USER2-small},
    publisher={Hugging Face}
    year={2025},
}

Files

14 files · 538 MBWeights 34.8 MB (smallest of 8 ONNX variants). Sizes and sha256 from the signed manifest.
Hide all 14 files with their sha256
FileSizesha256
.gitattributes1.52 KB11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361
README.md15.2 KBf803802fad6b06dcb64828d716d9a3946861821c34697035caeb7a37bea7f3e7
config.json2.20 KB58f673686412d0cfae7a012def489df6e43cb75c78ed226fcf8482a1efbe1b6b
onnx/model.onnx138 MBf1a5896305dea1eaf38e474c712f1f4e4a3f983ba304d2ecfdc5b7b8de543385
onnx/model_bnb4.onnx87.1 MBaef3ca311b8477e1805347366a76b52cb08e2e47dca14588831ab5649918c17c
onnx/model_fp16.onnx69.1 MB338005f21b4fd90ac342bf4eaa32bad35d65cb981a9003b1c0744c4ce0637156
onnx/model_int8.onnx34.8 MBb88a9860391bbd356476f188b8f04e3f1fb6a7d5fcefcdde4769ffd95c74d762
onnx/model_q4.onnx87.1 MBaef3ca311b8477e1805347366a76b52cb08e2e47dca14588831ab5649918c17c
onnx/model_q4f16.onnx47.5 MB18fec2b5fefd84192b4459320fa67029b3b42865d6076c0aa7cba9e4d035c198
onnx/model_quantized.onnx34.8 MBb88a9860391bbd356476f188b8f04e3f1fb6a7d5fcefcdde4769ffd95c74d762
onnx/model_uint8.onnx34.8 MB143e87096f6e54f3ca0e10c75255656a24cf55f63170ffc5a9a9b07db98e41ec
special_tokens_map.json837 B2ea3c1eb27baf06d75115d453c067c1832d7101a97243b298a4af8d59c916d62
tokenizer.json4.75 MB8bdc337bdee65a5fdb697df1ac7453b2ae5c34c105125eac5f68c87827395c4e
tokenizer_config.json21.2 KBf130b0eba597b2b90dd6ff8a4765c633366f39b9e3872d47078922bdbf6604fd
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
4a3caf0c13 pinned now2026-11-15 05:19 UTC14 files · 538 MB

Use it

$ fw get onnx-community/USER2-small-ONNX
# manifest sha256 d32cfda605eb… · 538 MB · 14 files
$ fw verify ./USER2-small-ONNX onnx-community/USER2-small-ONNX
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/onnx-community/USER2-small-ONNX.json --dir ./USER2-small-ONNX $ python3 fw.py verify ./USER2-small-ONNX ./onnx-community__USER2-small-ONNX.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download onnx-community/USER2-small-ONNX --revision 4a3caf0c13a10330815441c2408b7b9447f23744 --local-dir ./USER2-small-ONNX

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
f803802fad6b06dcb64828d716d9a3946861821c34697035caeb7a37bea7f3e7
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: onnx-community <huggingface.co/onnx-community>Newsgroups: alt.freeweights.visionSubject: USER2-small-ONNXDate: 2026-11-15Commit: 4a3caf0Signed: 2DC28CC7B26A283B ✓
Upstream
onnx-community/USER2-small-ONNX
Pinned commit
4a3caf0c13a10330815441c2408b7b9447f23744
Manifest
USER2-small-ONNX.json · .minisig
Manifest sha256
d32cfda605eb6b7742f6dd16e37087848ee8614b8845ce94aa25b16cb5f7ae6f
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 05:19 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/onnx-community/USER2-small-ONNX.json $ curl -O https://freeweights.allternit.com/manifests/onnx-community/USER2-small-ONNX.json.minisig $ minisign -Vm USER2-small-ONNX.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

Pood666/USER2-small · this model is a quantization of it

No model in the catalog names this one as its parent.

Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download onnx-community/USER2-small-ONNX
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. USER2-small-ONNX.json. Provenance. Takedown history: none.
From: dima806 <huggingface.co/dima806>Subject: ai_vs_real_image_detection
From: legekka <huggingface.co/legekka>Subject: AI-Anime-Image-Detector-ViT
From: onnx-community <huggingface.co/onnx-community>Subject: AI-Anime-Image-Detector-ViT-ONNX
From: AICodexLab <huggingface.co/AICodexLab>Subject: answerdotai-ModernBERT-base-ai-detector
From: onnx-community <huggingface.co/onnx-community>Subject: answerdotai-ModernBERT-base-ai-detector-ONNX
From: onnx-community <huggingface.co/onnx-community>Subject: bart-large-cnn-ONNX