Chroma 教程

嵌入函数在架构里的位置

🎉摘要:本文通过生活化例子解释嵌套函数(嵌入函数)在Chroma检索流程中的定位与角色,强调必须使用同一个嵌入函数将文本翻译成向量,确保入库和提问时向量一致,才能实现准确的相似度匹配。

前面学习时常提到嵌套函数,通过 embedding_function 设置。你知道嵌套函数在整个过程/流程中定位和角色吗?

下面通过一个简单生活化例子来介绍它:

首先,我们可以将嵌入函数理解为一个翻译员,把文字翻译成一串数字(向量)。Chroma 则是一个会 “按意思找东西” 的记忆笔记本(意思是通过向量距离、相似度来表达,越相似两则越像)。

重点注意:必须使用同一个翻译员,换一个翻译员,翻译出来的东西不一样,也就找不到了。

场景例子

准备工作

我们准备两条小文本,存进 Chroma:

  1. 文本 A:小猫爱吃鱼

  2. 文本 B:小狗爱吃骨头

第一步:入库

把内容放进 Chroma,对应流程如下:

上图中,嵌入函数的职责是将输入的文本翻译成向量。

  1. 拿出翻译员(嵌入函数),把文字 “小猫爱吃鱼” 翻译成一串数字(向量) 比如翻译成:“[0.12, 0.78, -0.31, 0.55]”(真实会有几百上千个数字,这里简化成 4 个)

  2. 同样这个翻译员,翻译 “小狗爱吃骨头” → “[0.81, 0.05, -0.22, 0.40]”

  3. Chroma 把【原文 + 这串数字】存起来,并且建好索引,方便之后快速查找。

现在 Chroma 里面存了两条记录:

  • id:A、文字:小猫爱吃鱼、数字向量:[0.12, 0.78, -0.31, 0.55]

  • id:B、文字:小狗爱吃骨头、数字向量:[0.81, 0.05, -0.22, 0.40]

第二步:提问检索

你来提问,Chroma 从数据库中找出和你提问最相关的数据,对应流程如下:

上图中,嵌入函数的职责是将你的问题翻译成向量,需要保证和第一步使用同一个翻译员(向量模型),翻译出的向量才是一样的。

现在你来提问:什么小动物喜欢吃鱼?

  1. 还是刚才同一个翻译员! 把这句话翻译成向量:[0.10, 0.75, -0.28, 0.52]

  2. Chroma 拿这个新的数字串,和已经存好的两组数字对比,计算“像不像”(余弦距离)

    • 和「小猫爱吃鱼」的数字非常接近

    • 和「小狗爱吃骨头」差别很大

  1. Chroma 返回结果:“最相似的是:小猫爱吃鱼”

为什么必须同一个嵌入函数?举反面例子

如果换了另一个翻译员,同样一句“什么小动物喜欢吃鱼?”,新翻译员翻译出来是:“[0.99, -0.1, 0.2, -0.7]” 这串数字和之前存的两组数字完全不像,Chroma 就会找不到正确答案!

  

说说我的看法
全部评论()
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号