R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。 R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。 要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。 关于作者: 张丹,分析师/程序员/Quant: R,Java,Nodejs blog: http://blog.fens.me email: bsspirit@gmail.com 转载请注明出处: http://blog.fens.me/r-annoy/ 前言 从学习大模型到 RAG 技术,又回到了最基础的知识,如文本数据向量化,向量匹配,向量数据库等技术,因此需要继续研究基础知识。 本文就是对向量匹配算法的学习,通过近似最近邻搜索算法,可以对向量化的文字进行相似度匹配,从而进行RAG过程的高效检索。 目录 Annoy近似最近邻搜索算法介绍 Annoy的算法过程 用R语言实现Annoy算法 1. Annoy近似最近邻搜索算法介绍 Annoy全称 Approximate Nearest Neighbors Oh Yeah,是一种适合实际应用的快速相似查找算法。Annoy 是通过建立一个二叉树来使得每个点查找时间复杂度是O(log n),和kd树不同的是,Annoy没有对k维特征进行切分。 Annoy 算法的目标是建立一个数据结构能够在较短的时间内找到任何查询点的最近点,在精度允许的条件下通过牺牲准确率来换取比暴力搜索要快的多的搜索速度。 在搜索的业务场景下,基于一个现有的数据候选集(dataset),需要对新来的一个或者多个数据进行查询(query),返回在数据候选集中与该查询最相似的 Top K 数据。 最朴素的想法就是,每次来了一个新的查询数据(query),都遍历一遍数据候选集(dataset)里面的所有数据,计算出 query 与 dataset 中所有元素的相似度或者距离,然后精准地返回 Top K 相似的数据即可。 但是当数据候选集特别大的时候,遍历一遍数据候选集里面的所有元素就会耗费过多的时间,其时间复杂度是 O(n)。因此,计算机科学家们开发了各种各样的近似最近邻搜索方法(approximate nearest neighbors)来加快其搜索速度,在精确率和召回率上面就会做出一定的牺牲,但是其搜索速度相对暴力搜索有很大地提高。 在这个场景下,通常都是欧式空间里面的数据,支持的距离包括:Euclidean 距离,Manhattan 距离,Cosine 距离,Hamming 距离,Dot Product 距离 …
Read more →