GO Faiss Library
Table of Contents
1. Faiss
Faiss 是一个用来做做向量聚类与相似性搜索的 C++ 的库,官方有 C++ 与 Python 两种使用方式
2. 安装与编译 Faiss
git clone https://github.com/facebookresearch/faiss.git && checkout -b v1.6.3
./configure && make && make install
cd faiss/c_api && make
mv libfaiss_c.so /usr/local/bin
3. 使用 Go 操作 Faiss
import "github.com/41tair/go-faiss/faiss"
3.1. 生成向量
dimension := 128 datasize := 100 v := faiss.GenVectors(datasize, dimension)
3.2. 创建索引
index := &faiss.Index{ Dimension: dimension, Description: "IDMap,Flat", MetricType: faiss.L2{}, } i, _ := index.Create()
3.3. 将向量插入到索引中
ids := faiss.GenIDs(datasize) err := faiss.InsertVectors(v, i, dimension, ids) if err != nil { fmt.Println(err) }
3.4. 生成搜索用的向量并进行查找
v2 := faiss.GenVectors(10, dimension) resIDs := make([]int32, 10*1000*100) resDistances := make([]float32, 10*1000*100) res := faiss.SearchVectors(v2, i, 1000, 10, resIDs, resDistances) for _, v := range res { fmt.Printf("ID: %v Distance: %v \n", v.ID, v.Distance) }
4. go-faiss 原理
go -> cgo -> *.h -> *.c -> *.so