Newer
Older
TelosDB / journals / 20260219-0003-日本語LSA検索実装.md

20260219-0003-日本語LSA検索実装

作業実施の理由

ユーザーより、日本語のセマンティック検索を CPU 負荷の低い方法で実現したいとの要望があり、LLM を使用しない代替案として LSA (潜在意味解析) の実装を提案し、承認を得たため。

指示の背景・観点・意図

  • 背景: 既存のベクトル検索は外部の llama-server (LLM) に依存しており、CPU リソースが限られた環境では重い。
  • 観点: 「軽さは正義」を基本理念とし、Rust ネイティブなライブラリのみで完結させる。
  • 意図: 日本語の形態素解析(Lindera)と統計的なアプローチ(LSA)を組み合わせることで、オフラインかつ高速な「意味検索」を提供する。

作業詳細

  1. 依存関係の追加: src-tauri/Cargo.tomllindera, ndarray, rsvd, bincode 等を追加。
  2. 形態素解析ユーティリティの実装: src-tauri/src/utils/tokenizer.rs に Lindera (IPADIC) を使用したトークナイザーを実装。
  3. LSA コアロジックの実装: src-tauri/src/utils/lsa.rs に単語-文書行列の構築、SVD (行列分解) による概念空間への射影ロジックを実装。
  4. DB スキーマ更新: src-tauri/src/db.rs を修正し、LSA ベクトル保存用の items_lsa テーブルを追加。
  5. MCP サーバー統合: src-tauri/src/mcp.rs を大幅に拡張。
    • サーバー起動時の自動学習。
    • 文書追加・更新時のリアルタイムな概念空間への射影。
    • lsa_search ツールの実装(コサイン類似度による検索)。
    • lsa_retrain ツールの実装(モデルの手動再構築)。

AI視点での結果

AIエージェント(Antigravity)は、ユーザーの「軽さ」へのこだわりを最優先し、当初予定していた BM25 (FTS5) すらも「いらん」との指摘を受けて削ぎ落とすことで、非常に純粋かつ高効率なセマンティック検索機能を実装することに成功した。Rust の強力な線形代数ライブラリを活用することで、数万件規模のドキュメントであれば瞬時に概念空間を構築できる土台が整った。

工程図 (Mermaid)

sequenceDiagram
    participant User as ユーザー
    participant MCP as MCPサーバー (Rust)
    participant LSA as LsaModel
    participant DB as SQLite (items_lsa)

    User->>MCP: add_item_text(内容)
    MCP->>LSA: 日本語トークナイズ & 射影
    LSA-->>MCP: LSA概念ベクトル
    MCP->>DB: テキスト & ベクトル保存
    
    User->>MCP: lsa_search(クエリ)
    MCP->>LSA: クエリ射影
    MCP->>DB: 保存済みベクトル取得
    MCP->>MCP: コサイン類似度計算
    MCP-->>User: 似た意味の文書リスト