python 余弦相似度计算(faiss)

faiss是一个由Facebook AI Research开发的用于稠密向量相似度搜索和聚类的框架。本文介绍了如何使用faiss进行余弦相似度计算,强调了在向量范数不为一时,IndexFlatIP计算的是余弦距离而非余弦相似度。通过L2归一化处理,可以实现真正的余弦相似度计算,并提供了简单的使用流程和优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

faiss

faiss是为稠密向量提供高效相似度搜索和聚类的框架。由Facebook AI Research研发。

详见github https://github.com/facebookresearch/faiss

faiss常用的两个相似度搜索是L2欧氏距离搜索和余弦距离搜索(注意不是余弦相似度)

简单的使用流程:

import faiss 
index = faiss.IndexFlatL2(d)  # 建立L2索引,d是向量维度
index = faiss.IndexFlatIP(d) # 建立Inner product索引
index.add(train)  # 添加矩阵
D,I = index.search(test, k) # (D.shape = test.shape[0] * k, I同理)

上述代码实现了对于test向量(也可以是矩阵)索引train中L2距离最近的k个向量,返回其具体distance和索引index

IndexFlatIP()函数实现的是余弦距离的计算也就是xytxy^txyt,显然,当向量范数不为一的情况下不能等同于余弦相似度xyt∣∣x∣∣∣∣y∣∣\frac{xy^t}{||x||||y||}x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值