以图搜图实现四之ElastiarchAknn插件Api使⽤及其性能
1.创建LSH模型
给定⽮量样本,创建局部敏感散列(LSH)模型并将其存储为Elasticarch⽂档。
POST:9200/_aknn_create
{
“_index”:“aknn_models”,
“_type”:“aknn_model”,
“_id”:“twitter_image_arch”,
“_source”:{
“_aknn_description”:“LSHmodelforTwitterimagesimilarityarch”,
“_aknn_nb_tables”:64,
“_aknn_nb_bits_per_table”:18,
“_aknn_nb_dimensions”:1000
},
“_aknn_vector_sample”:[
#Provideasampleof2*_aknn_nb_tables*_aknn_nb_bits_per_tablevectors
[0.11,0.22,…],
[0.22,0.33,…],
…
[0.88,0.99,…]
]
}
返回:
{“took”:}
2.索引新向量
给定⼀批新向量,使⽤预定义的LSH模型对每个向量进⾏散列,并将其原始值和散列值存储在Elasticarch⽂档中。
POST:9200/_aknn_index
{
“_index”:“twitter_images”,
“_type”:“twitter_image”,
“_aknn_uri”:“aknn_models/aknn_model/twitter_image_arch”
“_aknn_docs”:[
{
“_id”:1,
“_source”:{
“_aknn_vector”:[0.12,0.23,…],
#Anyotherfieldsyouwant...
}
},...
]
}
返回:
{“took”:,“size”:}
3.相似性搜索
给定索引中的向量,搜索并返回其最近邻居。
GET:9200/twitter_images/twitter_image/1/_aknn_arch?k1=1000&k2=10
返回:
{
“took”:,
“timed_out”:fal,
"hits":{
"max_score":0,
"total":
"hits":[
{
"_id":"...",
'_index':"twitter_images",
"_score":
'_source':{
#Allofthedocumentfieldxceptforthepotentially
#largefieldscontainingthevectorandhashes.
}
},...
]
}
}
4.履⾏
关于实施的关键事项是:
EsAknn完全在现有的Elasticarch集群/节点中运⾏。它作为⼀组HTTP端点处理程序有效运⾏,并通过JavaClientAPI与
Elasticarch进⾏对话。
搜索可以并⾏运⾏。可以使⽤循环策略并⾏地在多个节点上索引新向量。单个节点上的并⾏索引尚未经过⼴泛测试。
EsAknn使⽤LocalitySensitiveHashing将浮点向量转换为离散表⽰,可以在Elasticarch中对其进⾏有效索引和检索。
EsAknn将LSH模型和向量存储为标准⽂档。
EsAknn使⽤Bool查询k1根据离散哈希查找近似最近邻居。然后计算到这些近似邻居的确切距离并返回k2最近的邻居。例如,您可以设置
k1=1000和k2=10。
EsAknn⽬前仅实现欧⼏⾥德距离,但可以添加与LSH兼容的任何距离函数。
5.性能速度
EsAknn的速度通常表征为:
创建⼀个新的LSH模型:<1分钟。
索引新向量:每秒数百到数千。
搜索向量的邻居:<500毫秒。搜索时间与语料库的⼤⼩呈线性关系。
语料库与搜索时间通常遵循如下的⼦线性模式:
除此之外,速度是以下因素的函数:
向量的维度。
LSH模型中的表(也称为散列函数或树)的数量。
LSH模型中哈希值的位数。
检索到的近似邻居数量,k1。
返回的确切邻居数量,k2。
在图像相似性搜索引擎中,您可以看到针对670万个1000维向量的索引的搜索很少超过200毫秒。
6.召回
Recall定义为为搜索返回的真实最近邻居的⽐例,可以在各种值下进⾏评估k2。例如,如果您知道您的应⽤程序需要检索前⼗个最相似的项
⽬,那么您应该评估召回时间k2=10。
与速度类似,召回取决于LSH配置。增加k1通常是增加召回的最简单⽅法,但表和位的数量也起着重要作⽤。找到最⼤化调⽤和最⼩化搜
索时间的配置可以被认为是超参数优化的⼀种形式。
下图表明,可以在各种语料库⼤⼩中找到具有⾼召回率和低搜索时间的配置。绘制的点代表召回/搜索时间的“前沿”。也就是说,我在许
多配置上运⾏基准测试,并选择具有最低中值搜索时间的配置,⽤于三个语料库⼤⼩的每次中值调⽤。
下表显⽰了每个语料库⼤⼩,中位数回忆,中位数搜索时间和中位数回忆的组合的最佳配置>=0.5。
语料库⼤⼩医学。召回医学。搜索时间K1_aknn_nb_tables_aknn_nb_bits_per_table
0百万2
1百万0.91
2百万0.86210005016
3百万0.7495005016
4百万0.6432505016
五百万0.5502505019
610012
71000000.9215005014
81000000.8142505018
91000000.7111005014
101000000.6111005019
111000000.514500108
1218
13100000.9五1005012
14100000.8五1005018
15100000.76250108
16100000.661510018
17100000.53155014
本文发布于:2023-03-01 03:47:45,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/167761366589171.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:百度识图搜索.doc
本文 PDF 下载地址:百度识图搜索.pdf
留言与评论(共有 0 条评论) |