ボブサップになりたい人のブログ

ボブサップにはなりたいけれど、エンジニアにもなりたいのでそのあたりのことを書きます

プロダクト量子化(Product Quantization)

プロダクト量子化とは

一言で言うと「大量の(=エントリー数が大きく)要素数の大きい(=高次元の)ベクトルの最近傍探索(ユークリッド距離を用いた)を高速で行えるよ」というアルゴリズムです。

理論もそこまで難しそうではないですし、実装もFaceBookがつくったFaissというpythonライブラリがあるので簡単です。

実装例をご紹介します。

実装例

まず、Faissのインストールからanacondaのcondaで簡単にインストールできます。

やろうと思えばイチから、ソースコードからもインストールできるみたいです。

詳しくはFaissのgithubを御覧ください

(cpu版)
$ conda install faiss-cpu -c pytorch

これで準備完了です。

Faissのgithubにあるtutorialを参考にして実装します。

検索が本当に一瞬で驚きます。

かなりパワフルです。

参考

理論の参考

http://lear.inrialpes.fr/pubs/2011/JDS11/jegou_searching_with_quantization.pdf

映像奮闘記: 直積量子化(Product Quantization)を用いた近似最近傍探索についての簡単な解説

実装の参考

GitHub - facebookresearch/faiss: A library for efficient similarity search and clustering of dense vectors.

faiss/3-IVFPQ.py at master · facebookresearch/faiss · GitHub