IVF Index Parameters
This page describes the parameters for Inverted File (IVF) calls as part of AI libs.
.ai.ivf.del
The .ai.ivf.del function deletes a specific point from an existing IVF index.
Parameters
|
Name |
Type(s) |
Description |
|---|---|---|
|
ivf |
dict |
The existing IVF index to delete from |
|
ids |
long | long[] |
The IDs of vectors to delete |
Returns
|
Type |
Description |
|---|---|
|
dict |
IVF index with points deleted |
Refer also to .ai.ivf.train.
Example
q
q).ai:use`kx.ai
q)vecs:{(x;y)#(x*y)?1e}[1000;10];
q)repPts:.ai.ivf.train[4;vecs;`L2];
q)ivf:.ai.ivf.put[();repPts;vecs;`L2];
clusters | `s#0 1 2 3
ids | (0 2 5 8 9 13 14 17 21 29 31 51 52 5..
vectors | ((0.3927524 0.5170911 0.5159796 0.40..
centroids| (0.5303572 0.5351732 0.5627522 0.422..
metric | `L2
q)ivf:.ai.ivf.del[ivf;0 2]
clusters | `s#0 1 2 3
ids | (5 8 9 13 14 17 21 29 31 51 52 53 54..
vectors | ((0.6203014 0.9326316 0.2747066 0.05..
centroids| (0.5303572 0.5351732 0.5627522 0.422..
metric | `L2
.ai.ivf.predict
The .ai.ivf.predict function predicts the cluster a vector belongs to by comparing its features to the centroids of predefined clusters.
Parameters
|
Name |
Type(s) |
Description |
|---|---|---|
|
repPts |
real[][] |
Centroid centers from |
|
vecs |
real[][] | real[] |
The vector(s) to assign a cluster to |
|
metric |
symbol |
The metric for distance calculation, one of (L2;CS;IP) |
Returns
|
Type |
Description |
|---|---|
|
long[] |
Cluster IDs where vectors belong to |
Example
q
q).ai:use`kx.ai
q)vecs:{(x;y)#(x*y)?1e}[1000;10];
q)repPts:.ai.ivf.train[4;vecs;`L2]
q).ai.ivf.predict[repPts;vecs;`L2]
0 1 0 1 1 0 2 2 0 ..
.ai.ivf.put
The .ai.ivf.put function creates/inserts to an IVF index.
Parameters
|
Name |
Type(s) |
Description |
|---|---|---|
|
ivf |
dict |
The existing ivf index to upsert to |
|
repPts |
real[][] |
Centroid centers from |
|
vecs |
real[][] |
The vector(s) to calculate nearest centroid of |
|
metric |
symbol |
The metric for distance calculation, one of (L2;CS;IP) |
Returns
|
Type |
Description |
|---|---|
|
dict |
The IVF index |
Refer also to .ai.ivf.train.
Example
q
q).ai:use`kx.ai
q)vecs:{(x;y)#(x*y)?1e}[1000;10];
q)repPts:.ai.ivf.train[4;vecs;`L2];
q)index:.ai.ivf.put[();repPts;vecs;`L2];
clusters | `s#0 1 2 3
ids | (0 2 5 8 9 13 14 17 21 29 ..
vectors | ((0.3927524 0.5170911 0.51..
centroids| (0.5303572 0.5351732 0.562..
metric | `L2
.ai.ivf.search
The .ai.ivf.search function searches an IVF index.
Parameters
|
Name |
Type(s) |
Description |
|---|---|---|
|
ivf |
dict |
The existing IVF index to search |
|
q |
real[][ | real[][] |
The query vector(s) |
|
k |
short | int | long |
The number of nearest neighbors to return |
|
nprobe |
short | int | long |
The number of clusters to search |
Returns
|
Type |
Description |
|---|---|
|
(real; long)[] |
The nearest points and the corresponding distance under the given metric |
Refer also to .ai.ivf.train.
Example
q
q).ai:use`kx.ai
q)vecs:{(x;y)#(x*y)?1e}[1000;10];
q)repPts:.ai.ivf.train[4;vecs;`L2];
q)index:.ai.ivf.put[();repPts;vecs;`L2];
q).ai.ivf.search[index;10?1e;5;2]
0.1686666 0.1898834 0.3466181 0.368607 0.3952734
152 993 180 220 495
.ai.ivf.topq
The .ai.ivf.topq function converts an IVF index to PQ cluster centroids per split.
Parameters
|
Name |
Type(s) |
Description |
|---|---|---|
|
ivf |
dict |
The existing IVF index to search |
|
nsplits |
long | int |
The number of columnular splits on the matrices to make |
|
nbits |
long | int |
The number of bits used to encode each PQ subvector |
|
metric |
symbol |
The metric for centroid calculation, one of (L2;CS;IP) |
|
ntrain |
long | int |
The number of vectors in the ivf index to train PQ on |
Returns
|
Type |
Description |
|---|---|
|
dict |
Returns ivfpq dictionary |
Example
q
q).ai:use`kx.ai
q)vecs:{(x;y)#(x*y)?1e}[1000;10];
q)repPts:.ai.ivf.train[4;vecs;`L2];
q)ivf:.ai.ivf.put[();repPts;vecs;`L2];
q).ai.ivf.topq[ivf;2;8;`L2;500]
clusters | `s#0 1 2 3
ids | (0 2 5 8 9 13 14 17 21 29 31 51 52..
centroids | (0.5303572 0.5351732 0.5627522 0.4..
metric | `L2
pqCentroids| ((-0.2639576 -0.4129897 0.07042291..
encodings | ((76 216 136 246 7 16 6 149 217 14..
.ai.ivf.train
The .ai.ivf.train function calculates cluster centroids.
Parameters
|
Name |
Type(s) |
Description |
|---|---|---|
|
nlist |
long |
The number of centroids to compute |
|
vecs |
real[][] |
The training vectors |
|
metric |
symbol |
The metric for centroid calculation, one of (L2;CS;IP) |
Returns
|
Type |
Description |
|---|---|
|
real[][] |
The vectors representing the centroid center |
Example
q
q).ai:use`kx.ai
q)vecs:{(x;y)#(x*y)?1e}[1000;10];
q).ai.ivf.train[4;vecs;`L2]
0.5303572 0.5351732 0.5627522 0.4228943 0.535001 0.2002861 0.4314032 0.3511047 0.5948122 0.5000019
0.6322692 0.4451934 0.4216797 0.523856 0.360434 0.5268008 0.3773872 0.751892 0.4982377 0.5712299
0.2963423 0.5678515 0.6497793 0.4968773 0.4498042 0.6334871 0.6088817 0.5445439 0.3068971 0.4350893
0.5868517 0.4527895 0.3803186 0.5102138 0.6851335 0.7158532 0.5852287 0.3580849 0.6611753 0.4312862
.ai.ivf.upd
The .ai.ivf.upd function updates points in existing IVF index.
Parameters
|
Name |
Type(s) |
Description |
|---|---|---|
|
ivf |
dict |
The existing IVF index to update |
|
ids |
long | long[] |
The vectors to insert |
|
vecs |
real[][] |
The replacement vectors |
Returns
|
Type |
Description |
|---|---|
|
dict |
The IVF index with updated points |
Refer also to .ai.ivf.train.
Example
q
q).ai:use`kx.ai
q)vecs:{(x;y)#(x*y)?1e}[1000;10];
q)repPts:.ai.ivf.train[4;vecs;`L2];
q)ivf:.ai.ivf.put[();repPts;vecs;`L2];
clusters | `s#0 1 2 3
ids | (0 2 5 8 9 13 14 17 21 29 31 51 52 5..
vectors | ((0.3927524 0.5170911 0.5159796 0.40..
centroids| (0.5303572 0.5351732 0.5627522 0.422..
metric | `L2
q)ivf:.ai.ivf.upd[ivf;2 5;2#enlist (first vecs)]
clusters | `s#0 1 2 3
ids | (0 8 9 13 14 17 21 29 31 51 52 53 5 ..
vectors | ((0.3927524 0.5170911 0.5159796 0.40..
centroids| (0.5303572 0.5351732 0.5627522 0.422..
metric | `L2