機械学習系のmodelは基本pickleで管理していたんですが,Annoyについてはpickleでの保存時に以下のエラーがでます.
can't pickle annoy.Annoy objects
とりあえずググってHitしたissueをみてみます.
とのことです..
ちゃんとSampleコードをみたら,loadメソッドとsaveメソッドが用意されていたんですね.
ということで,このサンプルコードの通り
from annoy import AnnoyIndex
import random
f = 40
t = AnnoyIndex(f, 'angular') # Length of item vector that will be indexed
for i in range(1000):
v = [random.gauss(0, 1) for z in range(f)]
t.add_item(i, v)
t.build(10) # 10 trees
t.save('test.ann') #保存
# ...
u = AnnoyIndex(f, 'angular')
u.load('test.ann') # super fast, will just mmap the file #読込
print(u.get_nns_by_item(0, 1000)) # will find the 1000 nearest neighbors
にすれば大丈夫そうです.
