検索精度を信じて「推奨値」をコピペするな
- 論文の推奨値は絶対ではない
- 「構築4倍」という都市伝説を破壊する
- 索引サイズを支配する真のつまみを発見
思考停止で「100」に設定している原始人たち
ネットに転がる「HNSWのefConstructionは100にしろ」という記述。これを鵜呑みにして、根拠も確認せずに設定値を変えているなら、あなたはただの養分だ。ベンダーの解説をコピペして満足し、貴重なサーバーのリソースと構築時間をドブに捨てている。現実は、efConstructionを50から200に上げても、品質は向上せず、ただ構築コストが3倍以上に膨れ上がるだけだ。ここを見誤ると一生養分のまま。論文の数式とベンダーの営業トークの間には、埋められない深い溝がある。その溝を埋めるのはポエムではなく、実測値のみだ。
仕組みをハックするチート手順
構築コストを線形で制御する
「efConstructionを倍にすると構築時間が4倍になる」という説は、今回の検証で真っ赤な嘘だと判明した。距離計算回数は完全に線形で推移する。つまり、設定値は「なんとなく」で決めるのではなく、構築のたびに発生する距離計算コストを予測して最適化が可能だ。100という数字に縛られず、自分の環境で「品質が飽和する最小値」を探せ。
索引サイズを支配するつまみを特定する
これまで `M` が索引サイズを決めると信じられてきたが、論文既定の設定では `efConstruction` こそが真の支配者だった。`efConstruction` を上げれば、当然ながら索引サイズは肥大化する。無駄にサイズを食わせることは、検索速度の低下という致命的なコストを招く。`efConstruction` と `M` の役割を理解し、トレードオフを論理的に管理せよ。
品質が0.95に達した時点で止めるのが最短ルート。それ以上の増値は、無駄な距離計算を増やすだけのオナニー作業にすぎない。
正直な懸念と注意点
この最適化のメリット
- 構築時間を大幅に短縮できる
- メモリ消費を抑え検索速度を向上
- 設定根拠が明確になりトラブル減
注意すべきリスク
- 埋め戻し機能ON時は挙動が激変する
- データ規模が変わると最適値もズレる
この手法は、論文のアルゴリズムを正しく理解した上でのみ機能する。特に「埋め戻し(keepPrunedConnections)」をONにしている場合、`M` と `efConstruction` の役割が逆転するため、注意が必要だ。設定値をいじれば即座に結果が変わるため、理解せずに触ると検索品質が崩壊する可能性がある。万人に適した「魔法の数字」は存在しない。
こんな人におすすめ
- 月6万円の不労所得を目指し自動化を磨く人
- HNSWの設定を「なんとなく」で決めている人
- 構築時間を削り、サーバーコストを最適化したい人
- ネットの推奨値ではなく実測値で勝負したい人







