初心者だけど 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
と一行の変更だが、大きな議論が巻き起こっている。
例えば、
- 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 のパフォーマンスは維持できないですよね。