首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值

有一个非常适用于初学者使用的向量数据库 Chroma ,它专门用于存储、索引和搜索高维向量数据,基于大模型的语义搜索框架,能够以更精确、更智能的方式理解查询背后的含义。...向量相似度搜索:利用余弦相似度或欧几里得距离在向量空间中查找相似的嵌入,从而实现语义相关的内容推荐。...语义优化与索引:Chroma 在存储和索引上进行了优化,可以快速处理大规模数据,支持动态扩展和高并发访问。...欧几里得距离:也叫欧氏距离,在‌n维空间​中两个点之间的真实距离。这个概念是由古希腊数学家欧几里得提出的,用于计算在欧几里得空间中两点间的直线距离。...,并根据相似度查找最相关的内容: query = "查询文本" query_embedding = model.encode(query) results = chroma.search(query_embedding

7710

相似性搜索揭秘:向量嵌入与机器学习应用

向量之间的距离 在相似性搜索中,向量之间的距离度量是判断两个向量相似程度的关键。不同的距离度量方法反映了不同的相似性判断标准,常用的距离度量方法包括欧几里得距离、曼哈顿距离、余弦距离等。 1....在相似性搜索中,选择合适的距离度量方法取决于具体的应用场景和数据特性。例如,如果数据中的噪声较多,可能更适合使用曼哈顿距离;而在文本处理中,余弦距离因为能够反映文本的方向相似性,通常是一个更好的选择。...推荐系统:在电子商务和内容平台上,相似性搜索被广泛应用于推荐系统中。通过分析用户的历史行为和偏好,系统可以使用相似性搜索来找到与用户过去喜欢的商品或内容相似的新商品或内容。...文本搜索:在搜索引擎中,相似性搜索可以用来改进文本搜索的结果。通过理解查询的深层语义,搜索引擎可以使用相似性搜索来返回与查询最相关的网页,而不仅仅是字面上匹配的结果。 5....通过将数据转换为向量表示,并在向量空间中计算它们之间的距离,相似性搜索能够快速找到与查询最相似的数据项。这不仅提高了搜索的效率和准确性,还为推荐系统、图像识别、语音识别等多个领域带来了革命性的变革。

17410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Faiss: 入门导读

    faiss支持丰富的索引类型,这里创建的只是最简单的索引,它进行暴力的L2距离搜索。...大部分索引需要训练,而IndexFlatL2不需要,所以这里会直接返回True。 index.add(xb) xb是前面用numpy生成的随机二维数组(一组向量),将其添加到索引中。...xb[:5]是xb的0 - 4行共5组向量,在xb中找到与输入的5个向量最相似的4个向量。 返回值:I I表示的是id。...从左到右表示距离从近到远。元素的值是xb中的向量的id。 返回值:D D表示的就是计算出来的距离。...那么xq就是将看完的这篇文章的特征向量化,然后去所有候选的文章集合中去找最与之相似的几篇。 这个过程也就是『召回』。在信息检索和推荐领域都有召回的概念。

    61810

    一文带你全面理解向量数据库

    两个嵌入对象之间的距离越近,它们就越相似。正如你所看到的,向量嵌入非常酷。让我们回到前面的例子,假设我们将每本书的内容嵌入到图书馆中,并将这些嵌入存储在向量数据库中。...现在,当你想找到一本“主角喜欢食物的童书”时,你的查询也会被嵌入,并返回与你的查询最相似的书籍,例如《饥饿的毛毛虫》或《金发姑娘与三只熊》。向量数据库的使用情况是什么?...而使用ANN搜索算法,你可以以一定的准确性换取速度,并检索与查询近似最相似的对象。索引:为此,向量数据库对向量嵌入进行索引。此步骤将向量映射到数据结构,从而实现更快的搜索。...相似性度量:为了从索引向量中找到查询的最近邻居,向量数据库应用相似性度量。常见的相似性度量包括余弦相似性、点积、欧几里得距离、曼哈顿距离和汉明距离(Hamming distance)。...向量数据库相对于将向量嵌入存储在NumPy数组中的优势是什么?我经常(已经)遇到的一个问题是:我们不能只使用NumPy数组来存储嵌入吗?

    1.1K81

    【译】向量搜索的相似度度量

    在这篇文章中,我们将涵盖: 向量相似度度量 L2 或欧几里得距离 L2 距离是如何工作的? 何时应该使用欧几里得距离? 余弦相似度 余弦相似度是如何工作的? 何时应该使用余弦相似度?...直观地说,它同时衡量了向量之间的距离和角度。 L2 或欧几里得距离 L2 或欧几里得距离是最直观的距离度量。我们可以将其想象为两个物体之间的空间量。例如,你的屏幕离你的脸有多远。...L2 或欧几里得距离是如何工作的? l2 那么,我们已经想象了 L2 距离在空间中是如何工作的;在数学中它是如何工作的呢?让我们首先将两个向量想象为一列数字。将这些数字列表上下对齐,然后向下相减。...使用欧几里得距离的一个主要原因是当您的向量具有不同的大小(magnitudes)时。您主要关心的是您的词汇在空间中或语义上的距离有多远。...这意味着我们在使用倒排文件索引[10]或类似HNSW[11]的图索引时应该小心使用内积。 译注:在倒排文件索引或HNSW(一种图索引方法)这类数据结构中,我们通常希望快速找到与给定查询最相似的项。

    14610

    向量数据库入坑指南:使用 Faiss 实现一个最简单的向量检索功能 (二)

    为了能够得到“快到飞起”的执行效率,在使用 Faiss 查询大量数据之前,我们首先需要和其他追求效率的数据库软件一样,为数据建立索引,我们先来看看最简单的平面索引:IndexFlatL2。...当我们使用这种索引的时候,我们查询的数据会和索引中所有数据进行距离计算,获取它们之间的 L2 距离(欧几里得距离)。...,然后使用 index.add(sentence_embeddings) 将我们在之前处理好的向量数据灌入这个索引容器中。...我们每天都在使用的搜索引擎背后的众多技术之一,也包括类似的向量检索。 进一步了解向量检索的细节 我知道有一些同学,在惊叹上面这加起来不到 10 行的代码的效果之余,体验之后依旧对于“向量”的感知是零。...model.encode(["哈利波特猛然睡醒"]) D, I = index.search(search, topK) df['sentence'].iloc[I[0]] 第一行,topK 定义了我们要查找多少条最相似的数据

    5.7K22

    向量搜索与ClickHouse-Part I

    幸运的是,用于计算两个向量之间的角度或距离的数学(通常是余弦相似度或欧几里得距离)可以缩放到N维,即使我们人类无法在视觉上理解它。嵌入通常具有低于1000的维度——足以编码文本语料库中的大多数概念。...在最简单的形式中,用户可能只是通过按距离排序来搜索最相关的文档或文档集,从而复制传统的搜索引擎。然而,这种找到与查询在概念上相似的上下文文档的能力对其他机器学习管道,包括ChatGPT有价值。...在Postgres的情况下,这是通过pg_vector实现的。ClickHouse支持将向量存储为数组列类型(Array),提供计算搜索向量和列值之间距离的函数。...在使用支持向量搜索的数据存储时,向用户提供了两种高级方法: 线性搜索的精确结果-输入向量与数据库中每个向量的完整比较,按最近距离对结果进行排序,并限制为K次命中。...这是通过在语料库上构建基于树的索引来工作的。这种树结构是通过根据使用的距离度量(通常是欧几里得距离)递归地将数据划分为更小的子空间来构建的。分区过程一直持续到子空间包含少量数据点或达到树的一定深度。

    63920

    深入理解KNN扩展到ANN

    更具体来讲KNN分类过程,给定一个训练数据集,对新的样本Xu,在训练数据集中找到与该样本距离最邻近的K(下图k=5)个样本,以这K个样本的最多数所属类别(标签)作为新实例Xu的预测类别。...这也是算法的关键步骤),常用的距离度量方法有曼哈顿距离、欧几里得距离: 曼哈顿距离 公式: 欧几里得距离 公式: 曼哈顿、欧几里得距离的计算方法很简单,就是计算两样本(x,y)的各个特征i间的总距离...如下图(二维特征的情况)蓝线的距离即是曼哈顿距离(想象你在曼哈顿要从一个十字路口开车到另外一个十字路口实际驾驶距离就是这个“曼哈顿距离”,也称为城市街区距离),红线为欧几里得距离: 曼哈顿距离 与...欧几里得距离 同属于闵氏距离的特例(p=1为曼哈顿距离;p=2为欧氏距离) 在多数情况下,KNN使用两者的差异不大,而在一些特殊情况的差异如下: 对于高维特征,曼哈顿距离(即p更低)更能避免维度灾难的影响...(具体可见https://bib.dbvis.de/uploadedFiles/155.pdf) 欧几里得距离(即p更高)更能关注大差异较大的特征的情况; 除了曼哈顿距离、欧几里得距离,也可使用其他距离方法

    1.3K30

    关于向量搜索一定要预先知道的事情

    向量相似性搜索需要根据定义的相似性度量或距离度量,在数据库中查找与特定查询向量最相似的向量。 在设置向量解决方案时,你需要选择向量相似性搜索方法。 向量相似性搜索如何工作?...现在假设您想查询“婴儿”并检索与之关联的最相关概念,您需要计算“婴儿”与空间中其他向量之间的三角距离(最常见的是欧几里得距离、余弦相似度和点积),然后检索最接近的 N 个向量。...一种简单但效率低下的解决方案是计算所有向量之间的距离。在实践中,使用索引是最佳实践。索引是一种数据结构,例如树或图,它本质上对空间信息进行编码,从而允许检索更快地收敛到向量空间的正确位置。...在查询时,您的搜索将嵌入到一个向量中,并且数据库中与之最相似的索引向量将被检索出来,同时提供一些可选的后处理,例如候选精化或重新排序。 为什么准确性和速度之间存在权衡?...这意味着,虽然可以执行精确返回与查询最相似的向量的“精确搜索”,但这些方法不仅成本高,而且处理时间也更长(可能需要数小时!),这使得在典型的生产系统中运行通常不可行。

    16010

    机器学习-04-分类算法-03KNN算法

    KNN 在我们日常生活中也有类似的思想应用,比如,我们判断一个人的人品,往往只需要观察他最密切的几个人的人品好坏就能得到结果了。这就是 KNN 的思想应用,KNN 方法既可以做分类,也可以做回归。...点距离的计算 欧式距离 欧几里得距离:它也被称为L2范数距离。欧几里得距离是我们在平面几何中最常用的距离计算方法,即两点之间的直线距离。...使用**2运算将差值平方。 使用np.sum()对差的平方求和。 使用math.sqrt()取总和的平方根。 欧几里得距离是欧几里得空间中两点之间的直线距离。...通过计算欧几里得距离,可以识别给定样本的最近邻居,并根据邻居的多数类(用于分类)或平均值(用于回归)进行预测。在处理连续的实值特征时,使用欧几里得距离很有帮助,因为它提供了一种直观的相似性度量。...distance = [sqrt(np.sum((x_train - x)**2)) for x_train in X_train] #返回距离值从小到大排序后的索引值的数组

    9910

    机器学习的敲门砖:kNN算法(上)

    在输入不含有标签的新样本后,将新的数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本最相似的k个数据(最近邻)的分类标签。通过多数表决等方式进行预测。...这里我们使用函数:np.argsort(array) 对一个数组进行排序,返回的是相应的排序后结果的索引 nearest = np.argsort(distances) nearest 输出:array...([7, 8, 5, 9, 6, 3, 0, 1, 4, 2]) 结果的含义是:距离最小的点在distances数组中的索引是7,第二小的点索引是8......p = 1, 相当于使用曼哈顿距离,p = 2, 相当于使用欧几里得距离],对于任何 p ,使用的是闵可夫斯基空间。...用于树的距离矩阵。默认为闵可夫斯基空间,如果和p=2一块使用相当于使用标准欧几里得矩阵. 所有可用的矩阵列表请查询 DistanceMetric 的文档。

    79121

    机器学习的敲门砖:kNN算法(上)

    在输入不含有标签的新样本后,将新的数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本最相似的k个数据(最近邻)的分类标签。通过多数表决等方式进行预测。...这里我们使用函数:np.argsort(array) 对一个数组进行排序,返回的是相应的排序后结果的索引 nearest = np.argsort(distances) nearest 输出:array...([7, 8, 5, 9, 6, 3, 0, 1, 4, 2]) 结果的含义是:距离最小的点在distances数组中的索引是7,第二小的点索引是8......p = 1, 相当于使用曼哈顿距离,p = 2, 相当于使用欧几里得距离],对于任何 p ,使用的是闵可夫斯基空间。...用于树的距离矩阵。默认为闵可夫斯基空间,如果和p=2一块使用相当于使用标准欧几里得矩阵. 所有可用的矩阵列表请查询 DistanceMetric 的文档。

    1.5K20

    Spark MLlib 笔记

    RDD RDD可以看成一个简单的“数组”,对其进行 操作也只需要调用有限的数组中的方法即可。 它与一般数组的区别在 于:RDD是分布式存储,可以更好地利用现有的云数据平台,并在内存中运行。...分布式存储最大的好处是可以让数据在不同的工作节点上并 行存储, 以便在需要数据的时候并行运算,从而获得最迅捷的运行效率。...RDD工作原理图 RDD可以将其看成一个分布在不同节点 中的分布式数据集,并将数据以数据块(Block)的形式存储在各个节点的计算机中, 整体布局如图3-2所示。...欧几里得相似度计算是一种基于用户之间直线距离的计算方式。 在 相似度计算中,不同的物品或者用户可以将其定义为不同的坐标点,而 特定目标定位为坐标原点。...使用欧几里得距离计算两个点之间的绝对距离,公式如下: 补充: 由于在欧几里得相似度计算中,最终数值的大小与相似 度成反比, 因此在实际应用中常常使用欧几里得距离的倒数作为相似度值,即1/d+1作为近似值

    43510

    一些重要的算法 博客分类: 算法 算法网络应用网页游戏领域模型游戏

    二分取中查找算法 一种在有序数组中查找某一特定元素 的搜索算法。...搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小 于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。...动态规划 动态规划是一种在数学和计算机科学中使用 的,用于求解包含重叠子问题的最优化 问 题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。...欧几里得算法 在数学中,辗转相除法,又称欧几里得算 法,是求最 大公约数 的算法。...常常在使用中以森林来表示。

    55610

    最近邻搜索|Nearest neighbor search

    聚类分析–将一组观测值分配到子集(称为聚类)中,以便同一聚类中的观测值在某种意义上是相似的,通常基于欧几里得距离 化学相似性 基于采样的运动规划 方法 已经提出了针对NNS问题的各种解决方案。...在欧几里得空间的情况下,这种方法包括空间索引(spatial index)或空间访问方法。已经开发了几种空间划分(space-partitioning)方法来解决 NNS 问题。...当查询点靠近云时,该算法的性能比线性时间更接近对数时间,因为当查询点与最近的点云点之间的距离接近于零时,该算法只需使用查找查询点作为获取正确结果的关键。...为了加速线性搜索,存储在 RAM 中的特征向量的压缩版本用于在第一次运行中预过滤数据集。在第二阶段使用来自磁盘的未压缩数据来确定最终候选对象以进行距离计算。...举个简单的例子:当找到从点X到点Y的距离时,这也告诉了我们从点Y到点X的距离,因此可以在两个不同的查询中重复使用相同的计算。

    98550

    角度和文本相似度原理

    1.5.4 角度 在欧几里得空间中定义了距离和向量长度(范数)之后,就可以继续定义角度,以平面几何空间为例,如图1-5-9所示,设 两个向量,并且围成了三角形 ,其中角度 即为向量...所以: 又因为: 则: 以上我们在平面几何空间中推导出了两个向量的夹角余弦,此结论也适用于所有的欧几里得空间。...如果用距离来衡量,比如欧几里得距离也是 。 当 时, ,即 ,在欧几里得空间中,即为 ,以几何的方式表现就是两个向量相互垂直,也称正交(参阅3.4.1节)。...1.5.1节中探讨的向量间的距离与此异曲同工,基于距离分类,就是将更相似的向量归为一个类别。距离、余弦是以不同方式度量向量的关系。...余弦相似度的最典型应用就是判断文本内容的相似程度,这是自然语言处理(natural language processing,NLP)中的一项计算。

    70210

    一图看遍9种距离度量,图文并茂,详述应用场景!

    许多算法,无论是监督或非监督,都使用距离度量。这些度量,如欧几里得距离或余弦相似度,经常可以在k-NN、UMAP、HDBSCAN等算法中找到。 理解距离度量比你可能比你想象中更加重要。...曼哈顿距离是指两个矢量之间的距离,如果它们只能移动直角。在计算距离时不涉及对角线移动。 ? 缺点 尽管曼哈顿距离在高维数据中似乎可以工作,但它比欧几里得距离更不直观,尤其是在高维数据中使用时。...此外,使用参数p实际上可能很麻烦,因为根据你的用例,查找正确的值在计算上可能非常低效。 用例 p的好处是可以迭代它,并找到最适合用例的距离度量。...例如,如果两个集合有一个共同的实体,而总共有5个不同的实体,那么Jaccard索引将是1/5 = 0.2。 为了计算Jaccard距离,我们只需从1中减去Jaccard索引: ?...用例 Jaccard索引经常用于使用二进制或二进制化数据的应用程序中。当你有一个深度学习模型来预测一幅图像(例如一辆汽车)的片段时,Jaccard索引就可以用来计算给出真实标签的预测片段的准确性。

    2.8K11

    使用 Python 构建图片搜索引擎

    引言 我们经常使用搜索引擎。当我们需要查询时,我们可以使用像 Google 这样的搜索引擎来检索最相关的答案。 大多数查询格式是基于文本的。...为了解决这个问题,我们可以使用产品的图像,提取其特征,并利用这些特征检索相似的产品。我们称这个概念为基于内容的图像检索。 在本文中,我将向您展示如何使用 Python 构建图像搜索引擎。...LeNet-5架构 欧几里得度量 提取特征后,计算查询与所有图像之间的距离。为了做到这一点,我们可以使用欧几里得度量或 l 2标准来衡量它。如果数字越来越小,那么这一对图像就是相似的。...如果我们总结一下,这里是我们将要做的步骤: 下载数据集 从图像数据库中提取特征 插入查询图像并提取其特征 计算所有图像的相似性 检索最相似的结果 对于数据集,我们将使用来自 Kaggle 的 CBIR...我的屏幕截图 在我们检索所有的图像之后,现在我们可以使用 CNN 从所有的图像中提取特征并将这些特征保存在 .npy 格式的文件中以供日后使用。

    1.1K10

    浅谈路径规划算法_rrt路径规划算法

    因为欧几里得距离比曼哈顿距离和对角线距离都短,你仍可以得到最短路径,不过A*将运行得更久一些: 2.5.4 平方后的欧几里得距离 我曾经看到一些A*的网页,其中提到让你通过使用距离的平方而避免欧几里得距离中昂贵的平方根运算...3.3.2 排序数组 为了加快删除最挂操作,可以对数组进行排序。集合关系检查操作将变成O(log F),因为我们可以使用折半查找。...调整操作中,查找结点花费O(logF),改变值/位置花费O(F)。 3.3.3 排序链表 在排序数组中,插入操作很慢。如果使用链表则可以加速该操作。...3.3.7 二元堆 一个二元堆(不要和内存堆混淆)是一种保存在数组中的树结构。和许多普通的树通过指针指向子结点所不同,二元堆使用索引来查找子结点。...对于调整操作,我使用索引数组从而花费O(1)时间检查我是否真的需要进行调整(通过在索引数组中保存g值),然后在少数确实需要进行调整的情况中,我使用二元堆从而调整操作花费O(F)时间。

    1.6K10
    领券