/** * The promotion gate: does the learned embedding model actually recover the * relationships the hand-written synonym graph encodes — and does it do so for * the Korean / long-tail terms, which is exactly where pure-TS SGNS is weakest * and where the decision to (eventually) add a real multilingual encoder will be * made? Reported separately so a flip-to-default is made on a number, not a hope. */ import type { EmbeddingModel } from "./embedding-model.js"; export type RecallReport = { k: number; /** Overall recall@k across all in-vocab synonym pairs. */ recall: number; pairsEvaluated: number; /** Korean-term subset (a group member containing Hangul). */ koRecall: number; koPairsEvaluated: number; /** English/other subset. */ enRecall: number; enPairsEvaluated: number; /** Fraction of hand-graph terms that exist in the learned vocab at all. */ vocabCoverage: number; termsTotal: number; termsInVocab: number; }; /** * For every hand-authored synonym group, treat each in-vocab member as a query * and check how many of its in-vocab group-mates land in the model's top-k * neighbours. Recall = hits / possible. A term-mate that is out-of-vocab cannot * be recalled and is excluded from the denominator (coverage is reported * separately so the two effects are not conflated). */ export declare function evalSynonymRecall(model: EmbeddingModel, groups: string[][], k?: number): RecallReport;