LDA 計画: 02 技術方針
計画トップ
3.1 LDA の性質
- 入力: 文書ごとの語の出現回数(Bag of Words)。LSA で使っている TF-IDF 行列の「TF 部分」や、二値/カウント行列を LDA 用に用意する。
- 出力:
- 文書-トピック分布 θ(文書数 × K)。K の規定値は 128。ユーザー指定で変更可能で、変更時は再学習・再構成する。
- トピック-語分布 φ(K × 語彙数)
- 推論: 新規クエリ文を「既存の φ で固定」してトピック分布だけ推定し、その分布と各チャンクの θ で類似度を計算する。
3.2 Rust 実装の候補
- latentdirichletallocation(crates.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