File size: 4,039 Bytes
8502a98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
---
license: apache-2.0
base_model: Qwen/Qwen3-Embedding-0.6B
library_name: sentence-transformers
pipeline_tag: feature-extraction
tags:
  - sentence-transformers
  - retrieval
  - writing-assistant
---

# retrieval-a025 — Coathink writing-recall embedder

A LoRA fine-tune of `Qwen/Qwen3-Embedding-0.6B`, merged back into the base at
**α = 0.25** (WiSE-FT style interpolation), for one task: **given a sentence a
writer is drafting, retrieve the note card (saved highlight) it draws on.**

`model.safetensors` is 1.1 GB, fp16, 1024-dim, `Qwen3Model`. Standard
SentenceTransformers layout — `SentenceTransformer("<repo-id>")` just works.

## ⚠️ Read this before choosing it

**On our only human-judged benchmark, this model does not beat the frozen
off-the-shelf models it was meant to improve on.**

| model | human-gold nDCG@10 | notes |
|---|---:|---|
| `Octen/Octen-Embedding-0.6B` (native prompt) | **0.3559** | frozen, Apache-2.0 |
| `Qwen/Qwen3-Embedding-0.6B` (no prompt) | 0.3538 | frozen |
| `Octen/Octen-Embedding-0.6B` (no prompt) | 0.3505 | frozen |
| **this model** (a025) | 0.3482 | |
| v2a (pure distill, unreleased) | 0.303 | |

n = 34 queries / 859 cards, one neuroscience paper labeled by its own author.
Paired MDE ≈ 0.030, so **the top four are a statistical tie** — but a tie is the
honest reading, not a win. A separate agent-labeled ruler scores this model
resolvably above base (+0.026), but a cross-ruler agreement test showed that
ruler disagrees with the human anchor on exactly this kind of close call, so we
do not count it.

**Do not use the custom `Instruct: ...` query prefix.** A prompt ablation found
it is net-negative for the base model; frozen base with *no* prompt is the best
number in the table above. If you use Octen, keep *its* native prompt.

## Where it does win: mid-sentence queries

Retrieval in the product fires when the writer **pauses mid-sentence**, not on a
finished sentence. Evaluated in that regime (clause truncated to 40/60% with the
preceding ~30 words prepended), the ranking flips and this model leads:

| operating point | base | octen | **a025** |
|---|---:|---:|---:|
| 40% of clause + context | 0.210 | 0.215 | **0.223** |
| 60% of clause + context | 0.257 | 0.272 | **0.285** |
| 100% clause, no context | 0.354 | **0.356** | 0.348 |

**This is the only claim we make for this model**, and it is a weak one: on a
second, cross-domain ruler (a physics/CS paper, 31 queries / 1101 cards) the
advantage **did not replicate** — a025 and base both scored 0.1795 at 40%. Treat
the mid-sentence edge as unconfirmed outside the domain it was measured in.

## Training

MarginMSE on citation-grounded pairs from unarXive, teacher = `Qwen3-Reranker-4B`
log-odds margins, LoRA r16/α32, then merged at α=0.25. The interpolation is what
made it survive out-of-domain; the pure-distill checkpoint (v2a, 0.303) is worse
than the base it started from.

Scaling this recipe **fails**. A 60k field-balanced set of s2orc citation pairs
(12 fields, hard negatives, same teacher, same loss) produced 0.2475 from base
and 0.2410 continuing from this model — a statistically significant regression
(per-query AUC 0.866 vs base 0.934, gap 0.068 > MDE 0.041). The citation-proxy
signal is misaligned with human writing-utility judgments; more of it does not help.

## Recommendation

For a fresh integration, prefer **`Octen/Octen-Embedding-0.6B`** frozen: tied-best
or better on both rulers, Apache-2.0, 600 MB, same backbone and MLX path, and no
LoRA-merge / prompt-calibration apparatus to maintain. Reach for this model only
if you are specifically working the mid-sentence regime and want to reproduce the
table above.

**No MLX build exists.** `a025-mlx` in the source repo is a broken stub (the
safetensors entry is an 84-byte symlink). A Swift/MLX consumer needs a real
conversion first; `mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ` is the only
ready-made MLX option today, and 4-bit was measured to cost nothing (device
goldset: 4-bit base 0.733 vs bf16 a025 0.730).