Product Quantizationとは

Product Quantizationとは、長い数値の並び(ベクトル)を短い「代表番号」の組み合わせに置き換えて圧縮する手法です。略してPQとも呼ばれ、意味の近いものを探すベクトル検索を、少ないメモリで速く行うために使われます。

長いベクトルを「番号の列」に要約する

仕組みはシンプルです。①長いベクトルをいくつかの区間に分ける②区間ごとに「よく出る代表点」をあらかじめ用意しておく③各区間を、いちばん近い代表点の番号に置き換える。こうすると、元の長いベクトルが短い番号の並びに早変わりします。埋め込み(言葉や画像を数値の並びに変換したもの)が大量にあると、そのまま保持してはメモリも計算も足りません。PQで圧縮しておけば、近似最近傍探索(おおよそ近いものを高速に探す検索)を省メモリでこなせます。AI意味検索を支えるFAISSなどの検索ライブラリで定番の技術です。

提案は2011年。ChatGPTの一般公開(2022年11月30日)より前から使われてきた、ベクトル検索の土台にあたる古典的な手法です。

Topic長いベクトルが、約97%も軽くなる

圧縮の効きは強烈です。ベクトル検索の解説で知られるPineconeの例では、128次元・32ビットのベクトルを8次元・8ビットの整数に置き換えると、メモリは約97%削減(おおよそ64分の1)。長い数値の列を、辞書の見出し番号のような短いコードへ「要約」してしまうわけです。検索に使える形のまま、ここまで軽くできるのがPQの持ち味でしょう。

Product Quantizationに関するよくある質問

圧縮すると検索の精度は落ちないのですか?
元のベクトルを代表点に置き換えるため、厳密にはわずかな誤差が出ます。狙いは、その近似と引き換えにメモリと速度を大きく改善することで、実用では許容できる範囲に収めて使います。
ファイルのzip圧縮と何が違うのですか?
zipは開かないと中身を使えませんが、Product Quantizationは圧縮したまま近いものどうしの検索に使えます。保管のためでなく、検索を速く軽くするための圧縮という点が違います。

あわせて読みたい記事