到達範囲・新しさ・far の票¶
Status: 実測を記録し、2.6 系の計画を示す。本ページは 3 つの計測と 2 つの設計を 1 つの記述に まとめ、何が確定し、何が出荷され、残りを次の系がどうするかを述べる。
reach 設定の機構は SCAN_WINDOW_REACH_DESIGN.md に、計測は benchmarks/measurements/ の
下記の名前にある。
1. 一段落で¶
ベクトル走査窓は費用の上限として文書化されていた。それは新しさの優遇 (recency prior) でも あった。最新の行だけを順位付けすることで、最近の答えはどれも小さな場で勝てばよくなる。 古い行に届くように窓を広げるとその優遇が消え、最近の答えで NDCG@10 が 20 点落ちた。
窓をそのままにして、その下の行を 2 本目の順位付きリストとして足すと、優遇は保たれた。 出荷済みのリストは全クエリで同一だった。ただし 2 本目のリストは 1 本目と同じ強さで投票する。 その 10 票が 1 票しか持たない最近の答えを押し出して、広い窓の損失の 3 分の 1 を払った。
far の行が何票投じてよいかを抑えることが、最後の構造的なノブである。それが何を買おうと、 残る問いは far の 1 票がいくらの価値を持つべきか、であり、それは採点の決定である。2.6 系は それを、いずれ必要になる時間重み付きの検索と一緒に、既にある 1 つの計器で 1 つの設計として 決める。
2. 窓の正体¶
results-scan-window-default-ab.md。LongMemEval、保存 237,654 文書、出荷既定の実 recall
経路、答えが 10,000 行の窓のどちら側にあるかでクエリを 2 層に分け、near コホートを
12 rotation、層あたり 240 対。replicate 対照は桁まで再現したので、以下の差はすべて窓であって
他ではない。
| 窓 10,000 → 200,000 | Δ NDCG@10 |
|---|---|
| 答えが窓の中 (near) | −20.19 ± 1.70 |
| 答えが窓の下 (far) | +4.93 ± 0.90 |
切り捨ては起きていない。全呼び出しが 10 行返し、ゲートの fallback は発火しなかった。
near の損失は、reciprocal-rank fusion 内の順位の押し出しである。正確には、ベクトル腕は融合に
上位 limit 行を渡すので、10,000 候補の中で 3 位だった最近の答えが 200,000 候補の中で 30 位に
なると、リストの下にいるのではなくリストから消え、票が無くなる。
同じ run のもう 2 つの読みが、以降のすべてを形作る。
窓 50,000 は 200,000 より far 層の品質を多く買った (+12.87 対 +6.06)。far の答えは深さ 20,000〜29,500 にあり、広い窓はそれらを 150,000 行多く競わせただけだからである。答えより 先へ到達しても、費用だけがかかって何も買えない。
また窓 300,000 と 500,000 は、全 cell で一致した。窓がコーパスを覆えばその値は意味を失うので、 大きい既定値は、コーパスがそれより小さい利用者には無償である。
結論は数ではなく、設計上の欠陥だった。1 つの設定が 2 つの仕事をしていて、そのあいだは どちらも動かせない。
3. 到達範囲を優遇から分離する¶
SCAN_WINDOW_REACH_DESIGN.md は、2 つの仕事に 2 つの設定を与えた。窓は near リストの
まま、出荷どおりに順位付けされる。CPERSONA_VECTOR_REACH が far リスト (走査位置
[窓, reach) の中でコサイン上位の行) を、融合の順位付きリストとしてもう 1 本足す。
既存のリストは触られないので既存の行は票を保ち、far の行は追加しかできない。時間項は 意図的に持たない。far の票が near の票より軽くあるべきかは採点の問いであり、設計はそれを 採点を持つ系に残した。
results-scan-window-reach-ab.md、同じ計器、同じ規則:
| reach 200,000、far リスト 10 行 | Δ NDCG@10 |
|---|---|
| near | −6.67 ± 0.85 |
| far | +3.87 ± 0.88 |
構造の主張は成立した。near リストは 480 対のうち 480 で id も順序も同一、窓と等しい reach は 出荷どおりの答えを厳密に再現し、replicate は桁まで再現した。near 層が失った点はすべて、 2 本のリストが存在した後の融合で失われている。
機序は far リストの票である。reciprocal-rank fusion は載っているリストごとに
1 / (k + rank + 1) を与えるので、far リストの 1 位は near リストの 1 位とまったく同じ票を
持つ。
損失した 84 の near クエリでは 251 行が、それまで無かった top10 に入り、そのうち 187 (75%) は far リストの票しか持たない行だった。それらはベクトル票しか持たない最近の答えを 押し出した。字句票も持つ最近の答えは、生き残った。
far の利得が小さいのは鏡像の理由による。1 票の far の答えは 2 票の near 行のどれにも負け、 同順位の near 行とは同点で、near の側が先に融合される。
探索的な掃引が、さらに絞った。near の費用は到達範囲にほとんど依らない (50,000 で −5.97、300,000 で −8.49)。一方で far の利得は強く依る (50,000 で +10.20、300,000 で +4.25)。押し出すのは 10 個の全強度の票であって、それが引かれた深さではない。
limit=100 では損失が 2 倍以上になり、押し出す行は 2 票ずつ持って来る。100 行の字句リストが、
ほぼ全てと重なるからである。
出荷済: CPERSONA_VECTOR_REACH、既定 off、既定でビット一致。測定済みの費用を
behavior-contracts.md §4 に持つ opt-in である。
4. far の票を数で抑える¶
CPERSONA_VECTOR_FAR_LIMIT は、far リストが融合に届く前に min(limit, N) 行に切る。
候補数の設定であり、どの far 行が投票してよいかを変え、行の採点は何も変えない。
reach の結果が残した唯一の構造的ノブで、reach を 200,000 に固定し、far リストを
1・2・3・5・10 行にし、規則を「near は −1.0 以内、far は全長リストの利得から 1 点以内」として
登録された (prereg-scan-window-far-limit-ab.md)。
results-scan-window-far-limit-ab.md、同じ計器、reach 200,000:
| far 行数 | Δ near | Δ far |
|---|---|---|
| 1 | −2.73 ± 0.48 | +1.32 ± 0.70 |
| 2 | −4.35 ± 0.63 | +1.87 ± 0.79 |
| 3 | −5.06 ± 0.70 | +2.24 ± 0.85 |
| 5 | −5.61 ± 0.75 | +3.25 ± 0.91 |
| 10 | −6.67 ± 0.85 | +3.87 ± 0.88 |
対照はすべて成立した。全長リストは前回の run を桁まで再現し、near リストは全クエリで同一、 損失は長さに対して単調に減った。それでもどの長さも通らなかった。far の行が 1 つでも 2.73 点かかり、規則の両側は交わらない。
理由は算術である。どのリストでも 1 位は 1 / (k + 1)、単一リストが投じうる最大の票を持つ。
したがって far リストの 1 位は near リストの 1 位と同点で、2 票目を持たない 2 位以下の
near 行すべてに勝つ。
数は far の 2〜10 票目を取り除ける (それが −6.67 から −2.73 までの距離である)。だが 1 行の リストもリストであり、その 1 位は全強度で投票する。候補数のノブは尽きた。残るのは、その 最初の票の重みである。
出荷済: CPERSONA_VECTOR_FAR_LIMIT、既定 off (応答の limit)、既定でビット一致。reach と
同じく、測定済みの効果を文書に持つ opt-in である。
5. 3 つの計測が確立したこと¶
- 窓は名前の無い recency prior である。 この計器での near 層の価値は 20 点。到達範囲を 伸ばす変更はどれも、その優遇を別の手段で供給するか、その値段を払うことになる。
- 優遇は候補の段階で保存できる。 2 本目のリストは 1 本目の票をそのまま残す。論証では なく、クエリごとに実測した。
- 答えより先へ届いても、費用だけで何も買えない。 窓でも far リストでも、利得は到達範囲が 答えをちょうど覆うところで最大で、先へ行くほど落ちる。コーパスの末尾を越えた到達範囲は 不活性である。「できるだけ大きく」は、どちらの設定にも誤った形である。
- 押し出すのは行ではなく票である。 全強度の far 行は、1 票の最近の答えに勝つ。そういう 行が何個あるかが損失の大きさを決め、1 つがいくらの価値かが、損失があるかどうかを決める。 前者は数でノブがあり、後者は重みで、まだノブが無い。
- 深さは押し出された答えを救わない。 行数を増やせば全リストが深くなり、far の行が字句票を
拾う。
limit=100では損失は小さくならず、大きくなる。
6. 2.6 系の計画: 値段の付いた far の票を、新しさと一緒に設計する¶
6.1 なぜ採点の変更で、なぜ待つのか¶
これまで出荷したものはすべて、融合の算術に触れていない。リストはリストで、票は
1 / (k + rank + 1) である。far の票を near の票より軽くすることは、融合が計算するものを
変える。
2.5 系が出荷するのは、既定で出荷済みの挙動を保ち、答えが動いたのは壊れたからか変わったからか を問わずに soak できる変更である。融合が票に付ける値段の変更は、採点を再定義する系のために 取っておき、同じ層に触れるもう 1 つの変更と一度に設計する。
6.2 形: 1 つの prior と、その特殊例¶
recency prior とは、行がどれだけ遡った位置にあるか (走査位置か、年齢か) の関数としての、 票への重みである。既存の設定はすべて、1 つの関数の特殊例である。
prior p(row) |
出荷しているもの |
|---|---|
| 窓の中で 1、外で 0 | 窓だけ (今日の既定) |
窓の中で 1、[窓, reach) で 1、その先で 0 |
CPERSONA_VECTOR_REACH |
| 窓の中で 1、far の先頭 N 行で 1、残りで 0 | CPERSONA_VECTOR_FAR_LIMIT |
窓の中で 1、[窓, reach) で w、その先で 0 |
値段の付いた far の票 (2.6) |
| 年齢の滑らかな関数 | recency-weighted search (2.6) |
2.6 の設計は、最後の 2 行を 1 つの機構として作る。far リストの reciprocal-rank の寄与に
重み w ∈ (0, 1] を掛け、滑らかな版は窓の縁の段差を年齢の曲線に置き換える。
段差版は、既に測った 2 点のあいだを補間する。w = 0 は出荷どおりの答え (腕 A)、w = 1 は
全長の far リスト (腕 S) である。したがって測定は両端の identity 対照を無償で得て、その間の
1 次元の掃引になる。
relative-score fusion では、同じ重みが合計の前に far チャネルの正規化スコアを伸縮し、far
リストがチャネル数を増やさない。重みが 4 つ目の除数に代わるので、w → 0 で far リストは
near 行に何も課さない。
6.3 最終の再ソートを先に決めなければならない¶
本番では confidence スコアラが on である。on のとき recall の最後の段は、融合済みリスト全体 を、融合の順序が生き残らない confidence スコアで再ソートする。先に測ったところ、confidence off で行の約 1 割が異なる 2 つの融合モードが、on では全行で一致した。
融合しか見ない far 票の重みは、本番では見えないということである。したがって 2.6 の設計は、 最終再ソートを取り除くか、confidence スコアを融合スコアの関数にするかのどちらかを行い、本番が 走らせるのと同じ regime で測る。これまでのベンチマークは confidence off で走っており、計画は 両者が一致すると仮定せずにそう述べる。
6.4 どの腕も走らせる前に事前登録すること¶
計器は既に 3 度使ったものである。scene-blocked の LongMemEval コーパス、near / far の 2 層、 12 rotation、replicate と identity の対照、クエリごとの retriever リスト。設計が足すのは 次の 5 点である。
- 腕: reach 200,000・全長の far リストで
w ∈ {0, 0.25, 0.5, 0.75, 1}。これまでの 全記録が判定された構成なので、掃引は既にある数字に対して読める。探索は reach 50,000 の対。 - 両端の identity 対照:
w = 0は腕 A を、w = 1は腕 S を、桁まで再現しなければ ならない。 - 規則: near 層は出荷どおりの答えから −1.0 以内、far 層はその reach で重み無しの far リストが買う値から 1 点以内。絶対の far バー (+5.0) は reach の値を選ぶ場面に適用し、 ここでは適用しない。
- far-only の読み:
wが下がるにつれて、押し出す行が数として減るか。それが重みのすべき ことであり、数にはできないことである。 - regime: confidence off で 1 回 (記録と比較可能)、§6.3 が決まった後に本番 regime で 1 回。 片方で通り片方で通らない重みは、そのとおりに報告する。
6.5 展開¶
既定 off、既定でビット一致。この記述のすべての設定がそうだったとおりである。次に測定。 そして、そのときに限り、既定を一括で動かす。1 つの変更と 1 つの文書更新で、到達範囲・far リストの長さ・重み・大きいコーパス向けの文書が主張してよい運用範囲をまとめて動かす。最後の ものが、この線全体が存在する理由である。
6.6 2.5 系に残るもの¶
到達範囲と far リストの長さは、測定済みの費用を文書化した opt-in 設定として残る。六桁の コーパスを持つ読み手は今日それらを on にでき、何を買い何を払うかを知っている。既定は、値段の 付いた far の票が最近の答えに払わせずに既定を動かせるようになるまで動かない。
7. 未決¶
- 重みは 1 つの数であるべきか、far 領域内の走査深さの関数であるべきか。探索的な掃引は、 利得が「到達範囲が答えをちょうど覆うところ」に集中すると示しており、測るまでは前者を 支持する。
- 時間の曲線と位置の段差が 1 つの設定を共有できるか、書き込み速度が不均一なコーパスには 両方要るか。
- far の票が episode penalty とどう相互作用するか。episode penalty は既に、最新 episode との 位置関係で memory を区別している。