86817d6d06
"что я говорил про бэкапы?" is his data by definition, and nothing outside the box has ever heard him say anything. The boundary matched possession words only, so the question walked past it into SearXNG and came back answered out of a Habr article about somebody else's backups. A speech-verb marker class was written first and dropped. Russian gives every verb a dozen surface forms and the "как я говорил, ..." preamble list has no end, so each form the lexicon missed was one more question reaching the world, and a missing verb looks exactly like no bug. The boundary now embeds two frozen seed sets and scores the turn's own query vector, already computed upstream, against both. Nearest side wins. The possession markers stay as the offline floor for a handler with no embedder. 19/19 held-out utterances correct against multilingual-e5-small; see docs/evals/2026-08-03-personal-boundary.md. The live probe on the deployed box is not done. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
47 lines
2.0 KiB
Markdown
47 lines
2.0 KiB
Markdown
# Personal boundary, seed scoring vs possession markers, 2026-08-03
|
|
|
|
Vikunja #495. `что я говорил про бэкапы?` walked past the personal boundary into
|
|
SearXNG and came back answered from a Habr article. The boundary matched
|
|
possession words only, so a first-person speech verb was not a personal
|
|
question.
|
|
|
|
## What changed
|
|
|
|
The boundary now scores the turn's query vector against two frozen seed sets.
|
|
It claims the turn when the personal side is nearer than the world side. Seeds
|
|
and code are in `cmd/mavend/personalboundary.go`. The possession markers stay as
|
|
the offline floor for a handler with no embedder.
|
|
|
|
A regex speech class was written first and dropped. Russian gives every verb a
|
|
dozen surface forms, and the "как я говорил, ..." preamble list has no end. Each
|
|
form the lexicon missed was one more question reaching the world.
|
|
|
|
## Measurement
|
|
|
|
Embedder: multilingual-e5-small int8, the one homesrv runs. Both sides are
|
|
embedded on the query side. Cases are held out, none of them a seed. `make test`
|
|
runs the offline part. The scored part is opt-in through `MAVEN_ONNX_LIB`, like
|
|
`TestONNXRecall`.
|
|
|
|
19/19 held-out utterances correct (TestONNXPersonalBoundary)
|
|
|
|
true positive margins +0.014 to +0.089
|
|
nearest true negative -0.005 ("кто такой гагарин")
|
|
|
|
One case missed during the first pass and is not held out any more: `as i said,
|
|
what is the population of india`, +0.008 to the personal side. It is a world seed
|
|
now.
|
|
|
|
The gate is the sign of the difference and nothing tighter. The margins are too
|
|
thin for a threshold. The asymmetry favours claiming: a false claim costs one
|
|
honest "не знаю", a false pass sends his life to an upstream engine.
|
|
|
|
`make eval-recall` unchanged, 18/27 answered at gate 0.55. Recall does not touch
|
|
this path.
|
|
|
|
## Not verified
|
|
|
|
The live probe on the deployed box. The daemon was not rebuilt in this session.
|
|
The reply to `что я говорил про бэкапы?` with no matching note is still untested
|
|
against a real SearXNG.
|