最近又開始玩Word2vec,之前就是做了一些基本的訓練詞向量和查找近義詞的工作,這次開始瞭解其他模塊,比如近義詞查找模塊,我們知道word2vec裡面有自帶的most_similarity函數,可以找出和一個詞最相近的前n個詞,但是其查找方法屬於暴力搜索,所以針對百萬級的向量來說查找速度很慢,這時候就需要用其他的演算法來進行查找。比如說faiss和annoy包,其中faiss是fb開發的,主要是在GPU上來跑很牛逼。據說是上億的數據量查找起來也非常快,但是隻能部署在linux,我安了半天終於安裝成功了,但是測試報錯,也不知道為啥,找了網上一堆解決方案,把linux全局變數改了,系統直接廢掉了,所有的命令都不好使了。只好用了annoy的包,介面還算友好,可以部署在windows上,而且集成在了gensim模塊中,比較熟悉,用起來還是挺好的。但是發現點問題,不知道到底哪裡的原因。

具體是這樣的,首先annoy說白了就是先將載入進來的vector進行相似臨近計算,然後生成一個樹形結構的索引,這樣查找速度會變得很快,只不過會犧牲一定的近似精度。但是查找時間非常短。我遇到的問題是 首先我載入的模型是txt格式的文件,裡麪包含了 Word和vector

這樣直接生成了index文件後,載入index文件然後查找相近詞,但是這樣查找速度比原來暴力計算搜索並不會快很多,但是我在載入index後執行一次之前的暴力搜索代碼後,再根據索引來查找就會快很多,具體原因也不知道為啥。。。。。。。。


推薦閱讀:
相關文章