0

向量搜索的复杂性:来自图像搜索和 RAG 项目的见解 - Noé Achache | 向量空间对话

Demetrios Brinkmann

·

2024 年 1 月 9 日

Vector Search Complexities: Insights from Projects in Image Search and RAG - Noé Achache | Vector Space Talks

“我真的认为这项技术已经准备就绪,并将真正帮助这类嵌入模型进入文本搜索项目。”
– Noé Achache 谈图像嵌入的未来

正在探索向量搜索的深处?想了解其在图像搜索和文档检索中的应用分析?Noé 会为你解答。

Noé Achache 是 Sicara 的首席数据科学家,他参与了广泛的项目,主要涉及计算机视觉、结构化数据预测以及最近的 LLMs。

收听本期节目:Spotify、Apple Podcast、Podcast Addicts、Castbox。您也可以在 YouTube 观看本期节目。

主要收获

了解 Dino V2 在图像表示中的效能以及部署向量数据库的复杂性,同时应对敏感领域中微调和数据安全的挑战。

在本期节目中,Noe 分享了他对向量搜索的见解,从图像搜索到检索增强生成,强调了其在复杂项目中的实际应用。

你将学到的 5 个关键见解

  1. 前沿图像搜索:了解先进模型 Dino V2 及其在图像表示中的效能,超越了传统的特征转换方法。
  2. 数据去重策略:了解房地产列表去重的复杂过程,这是管理海量数据集合的关键任务。
  3. 文档检索技术:理解文档搜索中检索增强生成的挑战与解决方案,包括使用多语言嵌入模型。
  4. 敏感医疗数据保护:深入探讨处理机密医疗信息的策略以及数据安全在健康相关应用中的重要性。
  5. 模型开发的未来方向:听听 Noe 讨论开发新型模型以满足行业不断变化的需求的紧迫性。

趣味事实:Noé 在他的图像搜索项目中提到的表现最佳的图像表示模型是 Dino V2,有趣的是它无需微调就能理解物体和模式。

节目笔记

00:00 在向量数据库项目和演讲中的相关经验。
05:57 匹配图像特征,对变化不具韧性。
07:06 计算图像块向量,训练使其收敛。
11:37 简单的训练任务,通过困难样本改进。
15:25 使用困难样本改进文本嵌入。
22:29 图像嵌入在文档搜索中的未来。
27:28 高效存储和检索过程特性。
29:01 模型处理多样数据;稀疏向量现已可能。
35:59 使用内存,避免磁盘用于 CI 集成。
37:43 向量数据库和新模型的元数据过滤挑战

更多 Noé 的引言

“所以基本上,很棒的一点是 Dino 无需微调就能理解所有物体和相似模式。因此你可以直接使用一个现成的模型,非常快速地开始,并且非常快速地带来价值,而无需经历所有的微调过程。”
– Noé Achache

“而到最后,嵌入并没有学到任何非常复杂的特征,所以它并没有真正改进。”
– Noé Achache

“在使用 API 模型时,以异步模式使用它要快得多,比如嵌入计算速度提高了大约十倍或一百倍。所以这绝对改变了很多事情。”
– Noé Achache

文字记录

Demetrios:Noe,很高兴你来到这里,各位。我们又回来了,带来另一场向量空间对话,今天我们请到了我的朋友 Noe,他是 Sicara 的首席数据科学家,如果你不了解,他参与了广泛的项目,主要涉及计算机视觉。今天我们将谈论应对向量搜索的复杂性。我们将从图像搜索和人人都在谈论的检索增强生成(也就是 RAG)的各类项目中获取一些实践见解。那么 Noe,我想你已经为我们准备了一些东西吧?

Noe Acache:是的,我准备了。我可以分享。

Demetrios:好的,我非常高兴你来到这里。感谢你这样做。让我们开始分享你的屏幕,以便我们开始。

Noe Acache:好的。你能看到我的屏幕吗?

Demetrios:是的。太棒了。

Noe Acache:太棒了。谢谢 Demetrios 精彩的介绍。我快速补充一下。正如你可能已经猜到的,我是法国人。我是 Sicara 的首席数据科学家。Sicara 是一家服务公司,帮助客户进行数据工程和数据科学,也就是为他们构建项目。在此之前,我在 Realtics 工作,负责光学字符识别,现在我主要从事你所说的计算机视觉以及最近的生成式 AI。我领导生成式 AI 方面的工作,我已经在那里工作三年多了。

Noe Acache:我今天来到这里是因为我在向量数据库方面有一些相关的经验,我做了四个向量搜索项目,我还写了一篇关于如何在 2023 年选择你的向量数据库的文章。我还在 Pydata、DVC 以及伦敦和巴黎的所有生成式 AI 聚会等其他会议上做了相关的演讲。那么我们今天要谈些什么呢?首先,概述一下向量搜索项目。只是为了让你了解我们可以用向量搜索做哪些类型的项目。然后我们将深入探讨图像搜索项目的特殊性,接着是文本搜索项目的特殊性。这是四个项目。两个是图像搜索,两个是文本搜索。第一个项目是关于匹配视频中的物体以便之后销售。

Noe Acache:所以基本上你有一个视频。我们首先检测物体。比如它可以是灯、衣物,任何东西,我们对其进行分类,然后将其与大量相似物体进行比较,从大量可售物品集合中检索最相似的那个。第二个项目是关于房地产广告去重。所以当中介想出售房产时,有时会有几家中介过来为同一个房产拍照。所以你会有同一房产的不同图片。这个项目的想法是匹配同一个房产、同一个资料的不同图片。

Demetrios:我见过那个,老兄。我五年前买房的时候就遇到过。同一栋房子有不同的广告,有时你不知道是同一栋,因为照片不同。所以我喜欢你从那个角度思考。抱歉打断了。

Noe Acache:是的,公平地说,这是我客户的想法。所以基本上我稍后会谈到,是将所有广告聚合起来并尝试去重。然后最后两个项目是关于药物检索增强生成。这样你就可以向你的文档提问。第一个是针对我们公司的文档,第二个是针对一家医疗公司。因此复杂性不同。现在我们了解了所有这些项目,让我们深入探讨它们。关于图像搜索项目,为了计算图像的表示,根据基准测试和我自己的经验,目前表现最好的模型是 Dino V2。

Noe Acache:这是一个由 Meta 开发的模型,你可能已经见过,它使用了视觉 Transformer。它的惊人之处在于,利用注意力图,你实际上可以分割图片中重要的部分,尽管你没有明确告诉它哪些重要。它会像人一样,学会在这张图片上聚焦于狗,而不考虑嘈杂的背景。所以我说表现最好的模型,我是指与其他架构如 Resnet、EfficientNet 模型以及我没尝试过但似乎很有趣的方法(如果有人在类似项目尝试过,请随后联系我,我很乐意讨论)进行比较。这种方法是 SIFT 特征变换,或者说是关于特征变换的一些东西。它基本上是一种更传统的方法,没有通过机器学习学习特征,也就是说你不用训练模型,而是更传统的方法。

Noe Acache:你基本上检测图像中的不同特征,然后尝试在假设应该相同的图像中找到相同的特征。所有蓝线都在尝试匹配不同的特征。当然,它旨在匹配内容完全相同的图像,所以它在第一个用例中不会真正起作用,因为我们试图匹配相似但不完全相同的衣服。而且众所周知,它对角度变化不太有韧性,当变化太大时等等。所以在第二个用例中可能也不是很好,但再说一次,我没有尝试过,所以只是放在这里备用。简单介绍一下 Dino 的工作原理,如果你感兴趣的话。它是一个视觉 Transformer,以无监督的方式进行训练,也就是说没有提供任何标签,所以你只需要图片,然后先提取小块和大块图像,并对其进行增强。

Noe Acache:然后你将使用该模型计算这些图像块的向量表示。由于它们都表示同一张图片,它们应该都是相同的。因此你可以计算一个损失来衡量它们的差异,并基本上训练它们变得相同。这就是它的工作原理。第二个版本与第一个版本的区别只是使用了更多数据集和蒸馏方法来获得一个性能非常好且运行速度也很快的模型。关于第一个用例,匹配视频中的物体到可售商品,对于以前使用过 Google Lens 的人来说,这非常相似。在 Google Lens 中,你可以拍下某个东西的照片,然后它会尝试找到类似的商品供购买。所以再次,你有一个视频,然后检测视频中的一个物体,将其取出并与包含大量相似物体(用于表示)的向量数据库进行比较。然后它将输出最相似的灯。

Noe Acache:现在我们将尝试分析这个项目在积极成果和我们面临的变化方面的情况。所以基本上,非常棒的是 Dino 无需微调就能理解所有物体和相似模式。因此你可以直接使用一个现成的模型,非常快速地开始,并且非常快速地带来价值,而无需经历所有的微调过程。它也能在没有分割的情况下聚焦于物体。我这里的意思是,我们会得到物体的框,这个框里会有非常嘈杂的背景,可能会干扰匹配过程。由于 Dino 确实能聚焦于图片中重要的物体,所以我们没有完美地分割图片并不重要。关于向量数据库,这个项目开始于一段时间前,我认为我们大约一年半前选择了向量数据库。

Noe Acache:所以那是在所有向量数据库热潮之前。当时最有名的是 Milvus,实际上是唯一有名的。我们选择了本地部署。实际上,我们主要的经验是 DevOps 团队部署它时遇到了很大困难,因为基本上它由很多 Pod 组成。关于这些 Pod 如何相互作用的文档不是很完善。当时它有很多 Bug。所以客户在部署上花费了大量时间和金钱。我们面临的其他挑战是,我们注意到匹配对大型变形不太具有韧性。

Noe Acache:所以对于家具比如灯来说没问题。但比如说你有一条裤子和一个人在走路。那么裤子的形状就不会完全一样。由于你没有训练模型明确知道,它不应该关注运动,它会编码这种运动。然后匹配时,它不会匹配看起来相似的裤子,而只会匹配产品图片中也在走路的人的裤子,这并不是我们真正想要的。我们面临的另一个挑战是,我们尝试对模型进行微调,但我们第一次微调效果不太好,因为我们试图使用一个开源模型,获取它拥有的标签,比如关于不同家具、衣物等,以便基本上训练一个模型来分类不同类别,然后移除分类层,只保留嵌入部分。问题是标签不够具体。

Noe Acache:所以训练任务相当简单。而到最后,嵌入并没有学到任何非常复杂的特征,所以它并没有真正改进。现在我们来谈谈改进领域。了解了所有这些之后,如果我再做一次,我会做的第一件事就是使用托管的 Milvus。为了更好地微调,我会标记困难样本,也就是困难配对。例如,当你有匹配的配对,但相似度分数不是很高也不是很低时,你知道这时模型有些困难,你会找到一些好的匹配,也有一些错误。所以在这里进行标注,然后才能对模型进行微调,让它学习更复杂的、适合你任务的东西,这是很有趣的。微调的另一种可能性是多标签分类。

Noe Acache:例如,如果你考虑衣物标签,你可以说,好的,这些衣服有纽扣、有颜色、有条纹。对于所有这些类别,你都会得到一个介于零和一之间的分数。将所有这些分数串联起来,你就可以得到一个嵌入,然后将其放入向量数据库进行向量搜索。这样做有点难以扩展,因为每种物体都需要特定的模型和标注。我真的很好奇 Google Lens 是怎么做的,因为他们的算法非常好。所以他们是更倾向于这种功能还是那种功能呢?所以如果有人对此有任何想法,或者任何点子,再次,我很乐意之后与你讨论。最后,我觉得我们在多模态训练方面取得了很大的进展,尝试将文本输入与图像结合。我们已经进行了输入以构建某种复杂的嵌入。如果能有一个可以用文本引导的图像嵌入,那该有多好。

Noe Acache:所以你在创建图像嵌入时,就可以说,好的,这里我不关心运动,我只关心物体的特征,例如。然后它就会根据你的任务学习一个嵌入,无需任何微调。我真的觉得以目前的技术水平,我们能够做到这一点。我的意思是,我们需要去做,但技术已经准备就绪。

Demetrios:在我跳到第二个用例之前,我可以问几个问题吗?

Noe Acache:好的。

Demetrios:除了 Dino 模型,你还考虑过哪些其他模型?

Noe Acache:我在这里说过,与 Resnet、EfficientNet 等架构以及这些类型的架构相比。

Demetrios:也许当时还为时过早,或者也许它实际上没有价值。比如那个“分割万物”(Segment Anything)?那个有没有考虑过?

Noe Acache:所以“分割万物”,我不认为它们会重新生成嵌入。它主要是关于分割。我在这里展示分割部分是因为它是模型的一个很酷的成果,并且表明模型在这里工作得很好。我们在这里主要是构建图像的表示,据我所知,我们不能真正用“分割万物”来进行匹配。

Demetrios:然后在你谈到你会做不同的事情的那一页,或者说最后一页,也就是改进领域,你提到了标记困难样本用于微调。我觉得,是的,有一种方法是手工挑选你认为困难的不同嵌入。还有另一种方法,我认为现在有一些工具可以帮助你找出哪些嵌入做得不太好或属于边缘情况。

Noe Acache:你说的工具是哪些?

Demetrios:我不记得名字了,但我确实在网上见过演示,它们会给你一个三维空间,你可以探索不同的嵌入,看看发生了什么。

Noe Acache:我知道你说的就是什么。TensorBoard Embedding 是一个很好的工具。我之后可以演示一下。

Demetrios:是的,我不想打断你。这只是我突然想到的事情。

Noe Acache:如果你说的是同一个工具,TensorBoard Embedding。基本上,你有一个大约 1000 维的嵌入,它会将其降维到三维。所以你可以在三维空间中可视化它,看看你的嵌入彼此之间的距离。

Demetrios:是的,没错。

Noe Acache:但这主要是用于可视化,而不是用于训练。

Demetrios:哦,好的,我明白了。

Noe Acache:我说的是同一件事。

Demetrios:是的,我想你说的听起来就是我说的。所以这些信息都很好。你对我说了实话。Mike 在这里问了一个问题,比如文本嵌入,它是否能让你包含带有替代文本的图像?

Noe Acache:带有替代文本的图像?我不确定这个问题。

Demetrios:听起来这是一种满足法规可访问性要求的方式,如果你有。我想大概是在你谈论多模态和文本引导嵌入的部分。并且这是否能让你包含带有替代文本的图像?

Noe Acache:想法不是为了。我觉得这个问题是关于在图像中插入文本。这是我的理解。我的想法只是,你是否可以创建一个能够结合文本输入和图像输入的嵌入,并且它的训练方式是,文本基本上被用作图像的引导,以便只编码图像中任务所需的部分,而不受嘈杂干扰。

Demetrios:好的。是的。好的,Mike,请告诉我们这是否回答了你的问题,或者你还有更多问题。是的。他说,是的,为看不见的人在图像中插入文本。

Noe Acache:好的,酷。

Demetrios:是的,没错。所以我让你继续,我尽量不再打断了。但这太棒了。只是太切题了,我想停下来问一些问题。

Noe Acache:好的,我们继续。第二个用例是关于房地产广告去重。正如我所说,有两个中介为同一处房产拍摄了不同的照片。问题是他们的价格、面积或位置可能不完全相同。所以你不能仅凭元数据来匹配它们。所以我们客户之前在做的事情,他搭建了一个巨大的 if 机器,就像这样:好的,如果位置不太远,如果面积不太远。还有价格,这只是非常复杂的规则。最后有很多边缘情况。

Noe Acache:维护起来非常困难。所以客户的想法是,让我们做一个更简单的解决方案,只基于图片。所以基本上任务是匹配同一处房产的图片。同样,积极成果是 Dino 确实能够无需微调就理解房产的模式。而且它对同一房间的不同角度具有韧性。所以在照片中我展示了,模型在识别是否是同一处房产方面相当不错。这里我们在项目中使用了 Qdrant,这个项目稍微新一些。

Noe Acache:我们大量利用了元数据过滤功能,因为当然我们仍然可以使用元数据,即使它不完美,只是为了说,好的,只搜索价格大致在 10%以内的向量。面积大致在 10%以内的面积等等。并且对这些元数据进行了索引。否则搜索速度会非常慢。我们有 1500 万个向量,如果没有这个索引,搜索可能需要 20 到 30 秒。有了索引,就像眨眼之间。所以这对我们来说是一个杀手级功能。我们还使用了量化来节省成本,因为任务不太难。

Noe Acache:因为通过使用元数据,我们每次都能将任务缩小到搜索 1000 个向量。所以量化向量并不是很麻烦。最后,对于 1500 万个向量,每月的费用只有 275 美元,使用免费版本,这非常不错。我们面临的挑战主要是关于浴室和空房间,因为所有浴室看起来都差不多。它们具有非常相似的特征,空房间也是如此,因为里面几乎什么都没有,只有窗户。模型经常会对不同房产的两个浴室给出高相似度分数,空房间也是如此。因此,克服这个问题的方法将是标记困难样本。例如,模型认为相似的两张图片,实际上你需要告诉模型不,它们不相似,以便让它提高性能。

Noe Acache:再说一次,同样关于图像嵌入的未来。我真的认为这项技术已经准备就绪,并将真正帮助这类嵌入模型进入文本搜索项目。因此,对于不熟悉检索增强生成(RAG)的人来说,它的原理就是你拿一些文档,有一个嵌入模型,这里是一个在文本而非图像上训练的嵌入模型,它将输出这些文档的表示,将其放入向量数据库中,然后当用户对文档提出问题时,它将创建请求的嵌入并检索最相似的文档。之后我们通常将其传递给一个 LLM,由它生成答案。但在此次演讲中,我们将不专注于整个产品,而是真正专注于向量搜索部分。所以这两个项目,一个就像我告诉你的,是针对我们营养公司的 RAG,Endocino,有几十万页文档,第二个是针对一家医疗公司,供医生使用。所以这更多是关于文档搜索而不是 LLM,因为你不能输出任何错误。我们使用的模型是 OpenAI Ada Two。

Noe Acache:为什么?主要是对于第一个用例来说,它是多语言的,而且开箱即用,非常易于使用,所以我们没有在这个项目上花费太多时间。使用 API 模型让它变得快得多。而且它是多语言的,社区认可等等。对于第二个用例,我们还在研究中。因为我们之后使用了 GPT-4,它是目前最好的 LLM,所以从 Ada Two 开始也比较容易,但之后我们可能会使用更好的模型,因为正如我所说,如果你参考 Hugging Face 制作的 MTAB(大规模文本嵌入基准),它并不是最好的模型。MTAB基本上收集了许多嵌入基准,比如检索等,并对不同模型的这些基准进行了分类。MTAB并不完美,因为它没有考虑跨语言能力。所有基准都只针对一种语言,而且它也没有考虑大多数语言,比如它只考虑了英语、波兰语和中文。

Noe Acache:而且它可能对在封闭源数据集上训练的模型存在偏差。所以,目前表现最好的模型大多数是封闭源 API,因此也是封闭源数据集,所以我们不知道它们是如何训练的。它们可能是在这些数据集上自我训练的。至少如果我是他们,我会这样做。所以我假设它们这样做了,以便在这些数据集上获得一些分数。

Demetrios:所以这两个 RAG 主要处理的是法语文档吗?

Noe Acache:是的。这个是法语和英语,这个只处理法语。

Demetrios:好的。是的,这就是为什么多语言对这些用例非常重要。

Noe Acache:没错。再说一次,对于这个项目,有一些适用于法语的模型比 Ada Two 效果好得多,所以我们之后可能会更换它,但现在我们拥有的性能已经足够。由于这两个项目非常相似,我将把它们的结论一起讲。Ada Two 擅长理解不同的上下文,广泛的文档,医疗内容,技术内容等等,无需任何微调。跨语言能力也相当不错,所以我们可以用英语提问,检索法语文档,反之亦然。另外,快速提一下,因为我一开始没这么做,那就是使用 API 模型时,以异步模式使用它要快得多,比如嵌入计算速度提高了大约十倍或一百倍。所以这绝对改变了很多事情。再次,我们在这里使用 Qdrant 主要利用其免费层级,所以他们有一个免费版本。

Noe Acache:你可以一秒钟内启动它,获得免费版本,并且利用可以将向量存储在磁盘而不是内存上的功能,虽然速度会慢一点,但你可以轻松支持几十万个向量,并且响应时间非常好。我们面临的挑战主要针对 Notion,比如 Notion 中有很多页面只是标题,因为它们是空的等等。所以当页面只有标题时,内容非常少,实际上会非常类似于一个问题。所以通常检索到的文档是内容非常少的文档,这有点令人沮丧。适当的分块也很困难。基本上,如果你希望检索过程运行良好,你需要以正确的方式划分文档来创建嵌入。你可以使用基于矩阵的规则,但基本上你需要将文档划分为在语义上有意义的内容,这并不总是显而易见的。另外对于医疗公司的 RAG,有时我们询问关于特定药物的问题,但我们的搜索就是检索不到好的文档,这非常令人沮丧,因为基本的搜索可以做到。

Noe Acache:为了应对这些变化,一个不错的选择是使用对问题和文档进行不同处理的模型,比如 BG 或 Cohere。基本上它们使用同一个模型,但在长文档和问题上进行了不同的训练,这使得它们可以在空间中进行不同的映射。我的猜测是,使用这样的模型,只有标题等的文档将不会像现在这样与问题如此接近,因为它们将被区别对待。所以我希望这能解决这个问题。再次,这只是一个猜测,也许我错了。深入研究(Heap search),对于我提到的关键词问题,Qdrant 在最近的版本中启用了稀疏向量,这实际上使得 TF-IDF 向量成为可能。TF-IDF 向量是基于关键词的向量,基本上每个可能出现在数据集中的词都有一个数字,但有很多零,所以将它们存储为普通向量会使向量搜索非常昂贵。但作为稀疏向量就好得多。

Noe Acache:因此你可以构建一个混合搜索,结合 TF-IDF 搜索进行关键词搜索,以及其他搜索进行语义搜索,以获得两者的最佳效果,克服这个问题。最后,我实际上非常惊讶,尽管在生成式 AI 和 RAG 方面正在进行大量工作,却没有人开始研究一个帮助分块的模型。这是最大的挑战之一,我觉得建立一个模型或某种算法来理解文档结构并理解何时在语义上对文档进行分块有意义是完全可行的。兄弟,太棒了。

Demetrios:我有一些问题要问。别走开。实际上,不只是我。Tom 也有些问题,所以我就把责任推给 Tom,让他来承担。医疗公司的 RAG 听起来像是一个危险的用例。你可以努力消除幻觉和其他安全问题,但你不能确保它们完全消除,对吧?你只能尽量确保它们被消除。那么你如何处理这些问题呢?

Noe Acache:这是一个非常好的问题。这就是为什么我提到这个项目主要关于文档搜索。基本上我们做的是使用 Chainlit,这是一个非常好的聊天工具,然后你可以在它前面放一个 React 前端,使其非常定制化。当用户提问时,我们提供 LLM 的答案更多的是作为第二意见,像是医生可以考虑的次要想法。但最重要的是,我们直接将来源的 HTML 页面放在那里,而不是仅仅引用来源,带来最大价值的是这些 HTML 页面。所以我们知道答案可能存在一些问题。事实是,基于文档,幻觉几乎被消除了。比如,我们没有注意到任何幻觉,但当然它们可能发生。

Noe Acache:所以这更多是产品问题,而不是算法问题,算法问题,是的。检索到的文档比 LLM 的答案更重要。

Demetrios:是的,有道理。我关于这个问题是,在医疗领域,经常使用的数据非常敏感。对吧。你有很多个人身份信息 (PII)。你如何处理?你是不是不碰这些数据?

Noe Acache:所以基本上我们与一家拥有公开文档的提供商合作。它是公开文档,没有 PII。

Demetrios:好的,太好了。所以不是部分。

Noe Acache:是的,它是私有的,但文档中没有 PII。

Demetrios:是的,因为我认为这是另一个非常棘手的问题,就像,哦是的,我们只是把所有这些敏感信息发送给 Ada 模型来创建嵌入。然后我们在返回之前还把它通过 Chat GPT。接着你就会发现,这些数据被用来训练 GPT-5 了。然后你就可以说类似“创建一个无限长的诗歌”之类的话,并得到它。所以这太令人不安了,对吧?

Noe Acache:是的,当然,克服这个问题的一种方法是,例如,对于 Notion 项目,它是我们的私有文档。我们使用 Azure 上的 Ada,这保证了数据安全。所以这是一个很好的解决方法。当你必须处理不同安全级别的数据时,如果你处理 PII,一个好方法是利用元数据。根据提问者的安全级别,你可以利用元数据只输出某些类型的文档。数据库元数据。

Demetrios:太好了。好吧,不要让我打断你。我知道你有一些总结性的想法。

Noe Acache:不,抱歉,我本来就要总结了。所以总结一下,我们有一些无需微调就能获得好结果的模型。对于我们试图克服但仍面临局限性的模型。目前对于图像搜索来说,微调是必需的。除此之外没有真正其他方法可以克服。而对于文本搜索来说,微调并不是必需的,更多的是需要技巧,比如使用混合搜索,使用更好的模型等等。所以是两种不同的方法,Qdrant 确实让很多事情变得容易。例如,我喜欢它可以将数据库用作磁盘文件的功能。

Noe Acache:你甚至也可以将其用在内存中,用于 CI 集成等等。但是对于我所有的实验等等,我不会将其用作磁盘文件,因为它操作起来容易得多。我只是喜欢这个功能。然后它允许在实验和生产环境中使用相同的工具。当我使用 Milvus 时,我必须为实验和生产环境使用不同的工具,这使得技术栈更加复杂。稀疏向量用于 TF-IDF,正如我提到的,它允许基于关键词进行搜索,从而大大改进你的检索。托管部署,再说一次,我们真的在部署方面遇到了困难,我的意思是,DevOps 团队在部署 Milvus 时遇到了很大困难。我觉得在大多数情况下,除非你有安全要求,否则使用托管部署会比支付开发成本便宜得多。

Noe Acache:而且通过免费云和这些向量,你真的可以做很多事情,至少可以启动很多项目。最后,元数据过滤和索引。顺便说一句,我们遇到了一个小陷阱。那就是索引。建议在添加向量之前对元数据进行索引。否则你的性能可能会受到影响。所以你可能无法检索到你需要的正确向量。所以这是一个值得考虑的有趣事情。

Noe Acache:我知道元数据过滤对向量数据库来说是相当困难的,所以我不太清楚它是如何工作的,但我认为肯定有很好的原因。最后,正如我之前提到的,在我看来,需要新型模型来满足行业需求。我们谈论的模型包括文本引导以生成更好的图像嵌入,以及自动分块,比如某种算法和模型,可以自动将你的文档进行适当的分块。非常感谢。如果你还有问题,我很乐意回答。这是我的社交媒体账号。如果你想之后联系我,可以随时联系,我所有的文章和演讲都在这里,如果你感兴趣的话。

Demetrios:哦,我喜欢你这样做。Tom 又问了一个问题,关于你在进行那些 RAG 项目时,是否采取了任何措施来处理文档中的图片和表格。

Noe Acache:没有,我没有为图片做任何处理,也没有为表格做。这取决于它们结构是否良好。如果结构良好,我保留了它们,因为模型可以理解它们。但是,例如,我们为医疗公司做了一个小型概念验证,他们尝试集成一些外部数据源,是一个 PDF 文件,我们想把它转换成 HTML,以便能够直接在答案中显示 HTML,而不是仅仅解释。所以我们将 PDF 转换为 HTML,在这个转换过程中,表格完全无法阅读。即使清理后也是如此。所以这种情况下我们没有包含它们。

Demetrios:太好了。嗯,老兄,非常感谢你来到这里。也谢谢大家加入我们又一次向量空间对话。如果你想来参加向量空间对话,分享你的近况,并向我们其他人分享一些知识宝藏,我们很乐意邀请你。所以请联系我。我想今天就这样了。Noe,这次太棒了。我非常感谢你这样做。

Noe Acache:谢谢 Demetrios。祝你有美好的一天。

Demetrios:下次再见各位。再见。

免费开始使用 Qdrant

开始使用