Newer
Older
TelosDB / journals / 20260219-0010-LSA検索精度向上とスマート同期の実装.md

20260219-0010-LSA検索精度向上とスマート同期の実装

作業実施の理由

LSA検索において類似度スコアが 0.0000 固定になっていた問題を解決し、数学的に正しい検索結果を表示させるため。また、旧実装時のダミーデータを効率的に一掃する仕組みを導入するため。

指示(背景、観点、意図)

  • 背景: LSA実装をダミーから本物に差し替えたが、依然として検索スコアが 0.0 のままだった。
  • 観点: 旧ベクトルの残留、および距離から類似度への変換式の不備が疑われた。
  • 意図: 起動時に自動で不備のあるデータを検知・更新し、ユーザーの懸念(再計算の非効率性)にも配慮した「スマート同期」を実現する。

指摘事項とその対応

  • 指摘: 「同じモデルの時はどうなるの?(無駄な再計算はしないのか)」
  • 対応: 既に存在するベクトルが正常(非ゼロ)であればスキップし、「全てゼロ(ダミー)」または「不在」の場合のみ、現在の最新モデルで計算を行う「スマート同期」ロジックを実装。

作業詳細

  1. AIエージェントmcp.rssync_all_vectors を拡張し、LEFT JOIN を用いて既存ベクトルの有無と内容(全て0かどうか)を判定するロジックを実装した。
  2. AIエージェントsearch_text ツール内の類似度計算式を 1.0 - (distance / 2.0) に修正した。これは正規化ベクトルの L2 距離 $d$ とコサイン類似度 $cos_sim$ の関係式 $d^2 = 2 - 2 \cdot cos_sim$ (あるいは $sqlite-vec$ が返す $distance$ の性質)に基づく。
  3. AIエージェントlsa.rs の特異値分解におけるデフレーション条件の閾値を 1e-12 から 1e-15 に微調整し、より安定した主成分抽出を可能にした。
graph TD
    A[アプリ起動] --> B{全アイテム走査}
    B --> C{ベクトル不在 又は 全て0?}
    C -- Yes --> D[最新LSAモデルで再算出]
    C -- No --> E[同期済みとしてスキップ]
    D --> F[vec_items & items_lsa 更新]
    E --> G[検索待機]
    F --> G
    G --> H[search_text 実行]
    H --> I[距離をコサイン類似度に変換]
    I --> J[UIに表示]

AI視点での結果

スマート同期の導入により、ユーザーの利便性(不正確なデータの一掃)とパフォーマンス(無駄な再計算の回避)の両立に成功した。また、検索式の修正により、意味的に近いドキュメントに対して直感的に分かりやすいスコア(1.0に近い値)が表示されるようになったことを確認した。