gpt4 book ai didi

performance - 使用Elasticsearch查找相似的向量或长字符串

转载 作者:行者123 更新时间:2023-12-02 23:26:14 24 4
gpt4 key购买 nike

我们目前正在使用功能包方法对数百万张图像进行索引。想法是将每个图像转换为功能标记袋。这个袋子里可能有100个 token 。我们将这些功能标记映射到唯一的整数,因此每个图像最终都被转换为字符串。像“1 3 5 45 ... 565 .. 9176”之类的东西都是固定长度的字符串,具有300个整数。这些整数的范围是1-10000

现在,我们要使用此字符串并检索其他非常相似的字符串。在这种情况下,相似将表示具有最多整数的字符串。

我们当前的索引大约有5000万个文档,其中每个文档都是上述固定的字符串。当前,我们在索引时只是在进行愚蠢的默认标记化。这导致我们获得大约5到6秒的搜索延迟。我们如何才能做得更好,并将延迟减少到一秒钟以下?

最佳答案

We now want to use this string and retrieve other strings that are very similar. In this case similar would mean strings that have the most integers in common.



可能有很多方法可以做到这一点,但一种方法是将 token 存储在位图(或位集)中,而不是将其转换并存储在字符串中。

例如:创建一个10000位的位图,并为每个 token 设置相应的位。然后,要计算通用 token 的数量,只需对两个位集进行逻辑“与”运算,并计算结果中设置的位数。

这些位图还可以以某种形式进行压缩,从而无需先解压缩即可读取(以32位或64位为块)(平均每33位10000/300为1个设置位),因此很多块将全部零)。

现代CPU具有内置的popcount指令,可以对设置的位进行快速计数。

SSE甚至AVX也可以用来加快速度。

这种数据结构也非常适合在具有数百甚至数千个内核(CUDA)的GPU上进行处理。

不知道用Elasticsearch是否可行,但是可以用一些外部代码来完成。

关于performance - 使用Elasticsearch查找相似的向量或长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42695041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com