現在 Lucene の KNN ベクトルの最大次元数は1024次元 だが、それを2048次元に変更できないかという議論
初心者だけど Apache Lucene に貢献したい場合におすすめのチケットラベルのチケットを眺めていたときに面白いチケットがあった。
取り上げるのは、
Increase the number of dims for KNN vectors to 2048 [LUCENE-10471] · Issue #11507 · apache/lucene
というチケットだが、表題の通りで、現在 KNN ベクトルとして扱える最大次元数は 1024 次元だが、それを 2048 次元に変更できないかの議論がされている。
該当 PR はこちら
https://github.com/apache/lucene/pull/874/files
- public static final int MAX_DIMENSIONS = 1024;
+ public static final int MAX_DIMENSIONS = 2048;
と一行の変更だが、大きな議論が巻き起こっている。
例えば、
- MobileNet v2 は 1280 次元
- OpenAPI/ GPT-3 のベクトルは 2048 次元 なので、2048 次元にすればそれらのベクトルを扱うことができるのではという課題提起。
概ねみんな反対ではないが懸念点として
- ある程度は既存の値から上げてもいいが、制限は設けるべきで次元削減などで特定の次元数以下にユーザーが処理しておくべき ref
- Java API が Vector API を提供するようになれば、今の実装はすべて変わるので、難しいね ref
- CNN ベースのモデルを使っている人は、Lucene の近傍探索が使えないという状況は改善すべき。(もちろんどこまで許容すべきかは議論すべきですが) ref
- この決断は一方通行(制限を再び少なくしようという流れは永久に来ない)なので、急がずに慎重にベンチマークや正当性の議論などが必要 ref
- プラグラマブルに自由に設定することはできますか?
- それは可能ですが、フォークして自分の Lucene をメンテナンスすることになるので推奨できない ref
- また、この決定にはデータと評価結果が無いと決定できません。争点は、1048 次元にあわせるために、ユーザー側がなぜ次元削減ができないのかという点もあると思います。 ref
- 歴史的にユーザーは Luene の制限と常に戦ってきているものなので、今回の制限について文句を言われても正直気にしていません。最も心配なのは、KNN Vector の機能は初期段階であり、制限をゆるくすると柔軟性が低下してしまうことです ref
- 2023-01-03: この issue が作成されてから、多くの変化が起きました。現在では OpenAI の ChatGPT が世の中を席巻しています。最低でも OpenAI が提供するベクトルの次元数である、1536 次元に変更することはできませんか? ref
総論
ベンチマークデータを取って、データを集めないとこの変更はされなさそう。 ここまで良い意味で保守的なのは、個人的に素晴らしいと思います。 それぐらい、慎重に考えていかないと今の Lucene のパフォーマンスは維持できないですよね。
関連しているかもしれない記事
- 初心者だけど Apache Lucene に貢献したい場合におすすめのチケットラベル
- Amazonがeコマース検索を Lucene により、どうスケールさせているか at Berlin Buzzwords 2019
- Web 検索とデータマイニングのトップカンファレンス WSDM2023 で気になった研究
- ニュースレター近況
- Elasticsearch の Go client で有名な olivere/elastic がES8 以降はサポートしないので、利用者は公式クライアントに移行しよう
📮 📧 🐏: 記事への感想のおたよりをおまちしてます。 お気軽にお送りください。 メールアドレス入力があればメールで返信させていただきます。 もちろんお返事を希望せずに単なる感想だけでも大歓迎です。
このサイトの更新情報をRSSで配信しています。 お好きなフィードリーダーで購読してみてください。
このウェブサイトの運営や著者の活動を支援していただける方を募集しています。 もしよろしければ、Buy Me a Coffee からサポート(投げ銭)していただけると、著者の活動のモチベーションに繋がります✨
Amazonでほしいものリストも公開しているので、こちらからもサポートしていただけると励みになります。