Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 15
How to use jchiang11/engram-retrieval-v0 with sentence-transformers:
from sentence_transformers import CrossEncoder
model = CrossEncoder("jchiang11/engram-retrieval-v0")
query = "Which planet is known as the Red Planet?"
passages = [
"Venus is often called Earth's twin because of its similar size and proximity.",
"Mars, known for its reddish appearance, is often referred to as the Red Planet.",
"Jupiter, the largest planet in our solar system, has a prominent red spot.",
"Saturn, famous for its rings, is sometimes mistaken for the Red Planet."
]
scores = model.predict([(query, passage) for passage in passages])
print(scores)Cross-encoder used by the Engram
knowledge-object (KO) retrieval pipeline. Given a user query and a
candidate KO body, scores how well the KO answers the query. Used as
the first-pass ranker before the more expensive engram-xenc-v0
re-ranker.
sidecar/gating_cross_encoder.py and the
tools/session7_finetune.py evaluation harness.scripts/fetch_models.sh in the Engram repo
(idempotent post-clone install step).python tools/session7_finetune.py
(~5 minutes on M4 Max). Inputs are data/session7_test_set.json
(244 labels, 243 used after reject-exclusion) +
wiki/ (KO bodies resolved via WikiFileStore at train time).
Deterministic seed (SEED=7), stratified 80/20 split.ko.content from wiki/ at
train time (not snapshotted into the test set). All 243 ko_ids
resolve in the current wiki/ as of 2026-06-25; future wiki
edits could silently change re-train results. Snapshotting is
tracked as a follow-up in docs/decisions/2026-06-25-model-distribution.md.Apache 2.0. Derived from cross-encoder/ms-marco-MiniLM-L6-v2
(Apache 2.0).
This is a Cross Encoder model finetuned from cross-encoder/ms-marco-MiniLM-L6-v2 using the sentence-transformers library. It computes scores for pairs of texts, which can be used for text reranking and semantic search.
CrossEncoder(
(0): Transformer({'transformer_task': 'sequence-classification', 'modality_config': {'text': {'method': 'forward', 'method_output_name': 'logits'}}, 'module_output_name': 'scores', 'architecture': 'BertForSequenceClassification'})
)
First install the Sentence Transformers library:
pip install -U sentence-transformers
Then you can load this model and run inference.
from sentence_transformers import CrossEncoder
# Download from the 🤗 Hub
model = CrossEncoder("cross_encoder_model_id")
# Get scores for pairs of inputs
pairs = [
['How might AI automation affect the way developers work?', '> **Type:** constraint — A limitation, dependency, or hard requirement. \n> **Domain:** engineering \n> **Scope:** team \n> **Confidence:** 60% \n> **Created:** 2026-04-26 23:23 UTC by dave\n\nStart the session by reading init.sh . Summarizing four common failure modes and solutions in long-running AI agents.'],
['Is there a risk that our technical depth declines if we lean too hard on AI assistants?', '> **Type:** constraint — A limitation, dependency, or hard requirement. \n> **Domain:** engineering \n> **Scope:** team \n> **Confidence:** 70% \n> **Created:** 2026-04-26 23:23 UTC by dave\n\nSome engineers worry that relying on AI will lead to a loss of deeper technical skills.'],
['What are the key dates and deliverables we need to hit during our quarterly financial close?', '> **Type:** skill — A procedure, how-to, or repeatable technical process. \n> **Domain:** finance \n> **Scope:** restricted \n> **Confidence:** 90% \n> **Created:** 2026-04-24 22:27 UTC by erin\n\nQuarterly close sequence: revenue recognition review by day 3, AR aging reconciliation by day 5, accrual entries locked day 7, management pack draft day 10, board-ready numbers day 14.'],
['How do we test whether our coding agents are robust enough for production?', '> **Type:** question — An open question that has not yet been answered. \n> **Domain:** engineering \n> **Scope:** org \n> **Confidence:** 70% \n> **Created:** 2026-04-26 23:23 UTC by dave\n\nMost notably, it’s still unclear whether a single, general-purpose coding agent performs best across contexts, or if better performance can be achieved through a multi-agent architecture.'],
['What are the main concerns engineers have about AI replacing their skills?', '> **Type:** policy — An organisational rule or standard that must be followed. \n> **Domain:** engineering \n> **Scope:** org \n> **Confidence:** 90% \n> **Created:** 2026-04-26 23:23 UTC by dave\n\nThe research highlights the need for guidelines and frameworks to support the adoption of AI in software development.'],
]
scores = model.predict(pairs)
print(scores)
# [-6.3638 2.7978 0.6201 -0.0405 -2.6479]
# Or rank different texts based on similarity to a single text
ranks = model.rank(
'How might AI automation affect the way developers work?',
[
'> **Type:** constraint — A limitation, dependency, or hard requirement. \n> **Domain:** engineering \n> **Scope:** team \n> **Confidence:** 60% \n> **Created:** 2026-04-26 23:23 UTC by dave\n\nStart the session by reading init.sh . Summarizing four common failure modes and solutions in long-running AI agents.',
'> **Type:** constraint — A limitation, dependency, or hard requirement. \n> **Domain:** engineering \n> **Scope:** team \n> **Confidence:** 70% \n> **Created:** 2026-04-26 23:23 UTC by dave\n\nSome engineers worry that relying on AI will lead to a loss of deeper technical skills.',
'> **Type:** skill — A procedure, how-to, or repeatable technical process. \n> **Domain:** finance \n> **Scope:** restricted \n> **Confidence:** 90% \n> **Created:** 2026-04-24 22:27 UTC by erin\n\nQuarterly close sequence: revenue recognition review by day 3, AR aging reconciliation by day 5, accrual entries locked day 7, management pack draft day 10, board-ready numbers day 14.',
'> **Type:** question — An open question that has not yet been answered. \n> **Domain:** engineering \n> **Scope:** org \n> **Confidence:** 70% \n> **Created:** 2026-04-26 23:23 UTC by dave\n\nMost notably, it’s still unclear whether a single, general-purpose coding agent performs best across contexts, or if better performance can be achieved through a multi-agent architecture.',
'> **Type:** policy — An organisational rule or standard that must be followed. \n> **Domain:** engineering \n> **Scope:** org \n> **Confidence:** 90% \n> **Created:** 2026-04-26 23:23 UTC by dave\n\nThe research highlights the need for guidelines and frameworks to support the adoption of AI in software development.',
]
)
# [{'corpus_id': ..., 'score': ...}, {'corpus_id': ..., 'score': ...}, ...]
sentence_0, sentence_1, and label| sentence_0 | sentence_1 | label | |
|---|---|---|---|
| type | string | string | float |
| details |
|
|
|
| sentence_0 | sentence_1 | label |
|---|---|---|
How might AI automation affect the way developers work? |
> Type: constraint — A limitation, dependency, or hard requirement. |
0.0 |
Is there a risk that our technical depth declines if we lean too hard on AI assistants? |
> Type: constraint — A limitation, dependency, or hard requirement. |
1.0 |
What are the key dates and deliverables we need to hit during our quarterly financial close? |
> Type: skill — A procedure, how-to, or repeatable technical process. |
0.0 |
BinaryCrossEntropyLoss with these parameters:{
"activation_fn": "torch.nn.modules.linear.Identity",
"pos_weight": null
}
per_device_train_batch_size: 16num_train_epochs: 1per_device_eval_batch_size: 16per_device_train_batch_size: 16num_train_epochs: 1max_steps: -1learning_rate: 5e-05lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_steps: 0optim: adamw_torch_fusedoptim_args: Noneweight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08optim_target_modules: Nonegradient_accumulation_steps: 1average_tokens_across_devices: Truemax_grad_norm: 1label_smoothing_factor: 0.0bf16: Falsefp16: Falsebf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonegradient_checkpointing: Falsegradient_checkpointing_kwargs: Nonetorch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneuse_liger_kernel: Falseliger_kernel_config: Noneuse_cache: Falseneftune_noise_alpha: Nonetorch_empty_cache_steps: Noneauto_find_batch_size: Falselog_on_each_node: Truelogging_nan_inf_filter: Trueinclude_num_input_tokens_seen: nolog_level: passivelog_level_replica: warningdisable_tqdm: Falseproject: huggingfacetrackio_space_id: Nonetrackio_bucket_id: Nonetrackio_static_space_id: Noneper_device_eval_batch_size: 16prediction_loss_only: Trueeval_on_start: Falseeval_do_concat_batches: Trueeval_use_gather_object: Falseeval_accumulation_steps: Noneinclude_for_metrics: []batch_eval_metrics: Falsesave_only_model: Falsesave_on_each_node: Falseenable_jit_checkpoint: Falsepush_to_hub: Falsehub_private_repo: Nonehub_model_id: Nonehub_strategy: every_savehub_always_push: Falsehub_revision: Noneload_best_model_at_end: Falseignore_data_skip: Falserestore_callback_states_from_checkpoint: Falsefull_determinism: Falseseed: 42data_seed: Noneuse_cpu: Falseaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}parallelism_config: Nonedataloader_drop_last: Falsedataloader_num_workers: 0dataloader_pin_memory: Truedataloader_persistent_workers: Falsedataloader_prefetch_factor: Noneremove_unused_columns: Truelabel_names: Nonetrain_sampling_strategy: randomlength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falseddp_static_graph: Noneddp_backend: Noneddp_timeout: 1800fsdp: []fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}deepspeed: Nonedebug: []skip_memory_metrics: Truedo_predict: Falseresume_from_checkpoint: Nonewarmup_ratio: Nonelocal_rank: -1prompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
Base model
microsoft/MiniLM-L12-H384-uncased