faiss的基本使用方法.docx
《faiss的基本使用方法.docx》由会员分享,可在线阅读,更多相关《faiss的基本使用方法.docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、faiss的基本使用方法中 我跑了下demo结果一样 但是这个表示的结果是什么意思呢 faiss.IndexFlatL2(d) 官方解释是暴力搜索L2间隔 方法 add后即建立索引了 无需index.train(xb) 我比照了 有没有这一步的结果是一样的 得到的D是间隔 I是索引 k 4 D,I index.search(xb:5,k)array( 0, 393, 363, 78, 1, 555, 277, 364, 2, 304, 101, 13, 3, 173, 18, 182, 4, 288, 370, 531)array(0. , 7.1751733, 7.207629 , 7.25
2、11625, 0. , 6.3235645, 6.684581 , 6.7999454, 0. , 5.7964087, 6.391736 , 7.2815123, 0. , 7.2779055, 7.5279865, 7.6628466, 0. , 6.7638035, 7.2951202, 7.3688145, dtype float32) 这是合理性检测 因为 xb:, 0 np.arange(nb) / 1000. 这一步将每条数据的第一个元素全都加上了该元素的index 由于产生的数据是np.random.random即0.0, 1.0) 那么在top1必然是该条数据本身 而间隔 本
3、身就是倒排 从小到大的间隔 也就是相似度从大到小。 下面看另外一个函数faiss.IndexFlatIP,余弦相似度还是余弦间隔 啊 这个sklearn可以作为比照。 【余弦间隔 1-余弦相似度 余弦间隔 越小越好 此时余弦相似度越大】 1-创立index以及加载数据集时间用的短 query时用的时间长 在没有用快速方法时 在1千万数据集中查1万个top4需要100s 这个时间太长了。d 64 2-验证中发现faiss.IndexFlatL2计算的是欧式间隔 的平方 将官方例子中得到的I挨个验证如下 k 6 L2 distances 0. 7.1751733 7.207629 7.251162
4、5 7.321895 7.351989 0. 6.3235645 6.684581 6.7999454 6.8844795 6.919898 0. 5.7964087 6.391736 7.2815123 7.640502 7.7231803 0. 7.2779055 7.5279865 7.6628466 7.7859573 7.790914 0. 6.7638035 7.2951202 7.3688145 7.3900466 7.46482 index 0 393 363 78 924 364 1 555 277 364 617 175 2 304 101 13 801 134 3 173
5、 18 182 484 64 4 288 370 531 178 3810.0,7.175172963007071,7.207629517529313,7.251163094237256,7.32189456020302,7.351988795840555,0.0,6.323564681684957,6.684580949409394,6.7999456742750795,6.884479284324755,6.919898182110273,0.0,5.796407676635283,6.391735719267899,7.281511928833652,7.640502286348237,
6、7.723179155793559,0.0,7.277905725671246,7.527987963394992,7.662846322185942,7.785958432863538,7.790914131558168,0.0,6.763803673639131,7.295120208456721,7.368814161903231,7.3900459631258855,7.464819925508493, 3-faiss.IndexFlatIP求出来的D根本不是余弦方面的东西 既不是余弦间隔 也不是余弦相似度 你看看数值就知道了 完全超出了这俩数的最大范围2。 只是将上面的函数交换【L2
7、 IP】 cosin distances ? 1937.2388 1936.8904 1936.407 1936.4034 1936.3837 1936.2039 3854.9084 3853.9912 3853.5012 3853.4224 3853.3848 3853.3577 775.8727 775.72815 775.4991 775.3009 775.2481 775.1989 1764.4421 1764.3489 1764.1312 1764.116 1764.0082 1763.9166 1894.5415 1894.508 1893.7448 1893.7166 1893.
8、6948 1893.63 index 9996145 9999103 9998705 9999520 9996659 9999163 9999930 9999529 9999160 9999743 9996855 9999219 9986256 9990562 9997819 9999103 9990206 9993650 9994808 9998483 9999930 9999520 9999895 9998792 9999930 9994808 9995033 9999520 9996145 9996287 这是什么鬼 完全与L2得到的结果不同 难道讲IP需要分nlist或nprobe 所
9、以我觉得这并不是余弦方面的东西 。 4- 我猜测官方肯定会讲需要设置一些参数 有些确实不同 官方回复讲 只有第一种方法得到的是准确的方法 其他方法均是近似方法。但第一种方法慢 想快又准 你在开玩笑 肯定是折中问题 trade-off 速度越快 Recall越小 这是显然的。 5-计算时间的比拟 仍旧从1千万查询1万 但用top100 我估计需要设置的参数可能有很大影响 一是创立index时间 二是查询时间 仍旧用4中的可能不合适的脚本比照 后面再用1G的脚本 训练数据后创立index 再查找 所用的查找时间短 第一种方法是暴力搜索 没有训练数据 直接查找肯定慢。 但假如训练时间长也不符合线上实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- faiss 基本 使用方法
限制150内