译:相似性搜索,第 2 部分:乘积量化

img

学习有效压缩大数据的强大技术

介绍

在数据科学中,相似性搜索经常出现在 NLP 领域、搜索引擎或推荐系统中,其中需要检索最相关的文档或项目以进行查询。有多种不同的方法可以提高海量数据的搜索性能。

在本系列文章的第一部分中,我们研究了用于执行相似性搜索的 kNN 和倒排文件索引结构。正如我们所知,kNN 是最直接的方法,而倒排文件索引则在其之上发挥作用,建议在速度加速和准确性之间进行权衡。然而,这两种方法都不使用数据压缩技术,这可能会导致内存问题,特别是在数据集较大且 RAM 有限的情况下。在本文中,我们将尝试通过研究另一种称为“乘积量化(Product Quantization)”的方法来解决此问题。

译:相似性搜索,第 1 部分:kNN 和倒排文件索引

相似性搜索(similarity-search)是给定一个查询,目标是在所有数据库文档中找到与其最相似的文档。本章介绍 kNN 的相似性搜索及其使用倒排文件的加速。

介绍

在数据科学中,相似性搜索经常出现在 NLP 领域、搜索引擎或推荐系统中,其中需要检索最相关的文档或项目以进行查询。通常,文档或项目以文本或图像的形式表示。然而,机器学习算法不能直接处理原始文本或图像,这就是为什么文档和项目通常被预处理并存储为数字向量的原因。

有时向量的每个分量都可以存储语义。在这种情况下,这些表示也称为嵌入。这样的嵌入可以有数百个维度,数量可以达到数百万个!由于数量如此庞大,任何信息检索系统都必须能够快速检测相关文档。

在机器学习中,向量也称为对象

译:FANN:200行Rust实现的向量搜索

由于 AI/ML 采用的快速进展,向量数据库无处不在。虽然它们支持复杂的人工智能/机器学习应用,但向量搜索本身从概念上来说并不难。在这篇文章中,我们将描述向量数据库如何工作,并用不到 200 行 Rust 代码构建一个简单的向量搜索库。所有代码都可以在此 Github 存储库中找到。我们这里使用的方法基于流行库Spotify annoy中使用的一系列称为“局部敏感散列(Locality-sensitive_hashing)”的算法。本文的目标不是介绍新的算法库,而是描述向量搜索如何使用真实的代码片段工作。首先了解下什么是向量搜索。

译:Manas:高性能定制搜索系统

章节一 Manas:高性能定制搜索系统

Pinterest 搜索每月处理数十亿次查询,每天返回近 40 亿个 Pin 图。去年,每月移动文本搜索量增长了 40%,视觉搜索量增长了近 60%。最近,通过在主页上推出 Search 和 Lens,使它们在的应用程序中更加突出和集中,因为现在近 85% 的搜索都发生在移动设备上。

为了继续扩展搜索,系统需要为每个 Pinner 在超过 1000 亿个 Pin 图中找到最相关的结果。此前,搜索系统是建立在 Lucene 之上并用 Java 编写的。但随着业务发展和引入新的发现功能,遗留系统面临着挑战,无法再支持。这就是构建 Manas 的原因,这是一个用 C++ 编写的定制全栈搜索系统,可以在提高容量的同时显着减少延迟。在这篇文章中,将概述 Manas 的架构,并了解 Pinterest 搜索的下一步发展。

译:如何避免事务期间读取不一致

想象一下,当您尝试将 100 美元从账户 A 转账到账户 B,并且两个账户都在同一家银行时。启动传输后,您刷新屏幕。然而,当您刷新屏幕时,您的总余额就会下降——那 100 美元似乎凭空消失了。您看到帐户 A 少了 100 美元。然而,B账户并没有多出100美元。然后,您刷新屏幕几次,可以看到帐户 B 获得了 100 美元。

您在事务期间遇到的这个问题称为读取偏差。当您在不幸运的时间(写入交易期间和之后)读取交易时,就会发生异常。

银行转账时序图

这可能会带来不好的用户体验,但如果转账交易成功后刷新页面,这不会造成任何问题。

然而,在进行数据库备份或分析查询时,读取偏差会成为一个问题。

在数据库备份中,我们需要制作数据库的副本。备份过程中可能会有写请求进来,如果出现读倾斜不一致的情况,可能会导致备份结果不一致。部分数据为旧版本,部分数据为新版本。通过这样的操作,这种不一致的问题可能会永久存在。

我们需要在分析查询中扫描大型数据库并定期检查数据损坏。读取偏差可能会导致搜索和检查不一致 - 通常可能会产生不一致的结果并引发有关数据损坏的错误警报。

kv-codis迁移

最近在搞一个kv系统,想接入codis来管理slot,实现数据的迁移,进行scaling水平扩展,从网上找了点资料,然后随笔记录梳理一下,以便相应的代码可以联调接入时优化下~