Newer
Older
TelosDB / docs / plans / lda / lda_02_tech.md

LDA 計画: 02 技術方針

計画トップ


3.1 LDA の性質

  • 入力: 文書ごとの語の出現回数(Bag of Words)。LSA で使っている TF-IDF 行列の「TF 部分」や、二値/カウント行列を LDA 用に用意する。
  • 出力:
    • 文書-トピック分布 θ(文書数 × K)。K の規定値は 128。ユーザー指定で変更可能で、変更時は再学習・再構成する。
    • トピック-語分布 φ(K × 語彙数)
  • 推論: 新規クエリ文を「既存の φ で固定」してトピック分布だけ推定し、その分布と各チャンクの θ で類似度を計算する。

3.2 Rust 実装の候補

  • latentdirichletallocationcrates.io): 純粋な LDA。学習・推論の API を確認し、語彙を LSA と揃えられるか検討する。
  • 自前実装: Collapsed Gibbs Sampling や Variational Bayes を ndarray で実装。既存の utils::lsa と同様に utils::lda を用意する案。
  • いずれにしても 語彙は LSA の TermDocumentMatrixBuilder と共通化し、LDA 用の BoW 行列を同じ語彙で作る。

3.3 ストレージ

  • items_lda: チャンク ID と K 次元のトピック分布(blob または vec0 の 1 行)を保存。K の規定値は 128。ユーザーが K を変更したら再学習し、items_lda を新しい K で再構成する。
  • 検索時は 現在の設定が「LSA」なら items_lsa / vec_items(LSA)、「LDA」なら items_lda を参照する。切り替え時は選択中の方式のインデックスのみを使う。
flowchart TB
  subgraph 学習
    M[全チャンク BoW] --> LDA[LDA 学習]
    LDA --> phi[φ: トピック×語]
    LDA --> theta[θ: 文書×トピック]
    theta --> DB[(items_lda)]
  end
  subgraph 検索
    Q[クエリ文] --> Qbow[BoW]
    Qbow --> inf[θ_q 推定 φ 固定]
    inf --> sim[コサイン類似度]
    DB --> sim
    sim --> rank[ランキング]
  end