会話ログをトピッククラスタリングする

埋め込み済みの大量チャンクを「トピック別」に畳んで検索の絞り込み軸にする型(gemini-rag)。

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

出典:gemini-raggenerate_clusters.py, rename_clusters.py)。基盤は 長時間バッチ処理の作法