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

Created: 2021-01-10 Sun 16:12

Emacs 25.2.2 (Org mode 8.2.10)

Validate