会話ログをトピッククラスタリングする
埋め込み済みの大量チャンクを「トピック別」に畳んで検索の絞り込み軸にする型(gemini-rag)。
- UMAP → HDBSCAN → LLM命名の3段:
- UMAP で次元削減(
n_components=50, n_neighbors=15, min_dist=0.0)。生の埋め込みをそのまま クラスタリングするより密度が出る。 - HDBSCAN でクラスタリング(
min_cluster_size = 件数×0.005,min_samples=5)。k を決め打たず 密度ベースで、ノイズ点は-1に落ちる。 - 各クラスタの代表テキストを Ollama に渡して 10文字以内で命名(トピック名)。
- UMAP で次元削減(
- 命名は安いので分離:UMAP/HDBSCAN は重い。命名だけやり直したい(モデル変更等)ときのために
rename_clusters.pyを別に切る → 自動化の運用パターン(重い処理と軽い再実行の分離)。 - 関連:embedding モデル乗り換えに備え、コレクションを再ベクトル化する
migrate_embeddings.py(--src/--dst/--dry-run/--model)を初めから用意しておくと将来の移行が楽。
出典:gemini-rag(generate_clusters.py, rename_clusters.py)。基盤は 長時間バッチ処理の作法