プロダクト量子化(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)を用いた近似最近傍探索についての簡単な解説
実装の参考
faiss/3-IVFPQ.py at master · facebookresearch/faiss · GitHub