paint-brush
了解用于人工智能搜索的向量嵌入经过@picocreator
2,429 讀數
2,429 讀數

了解用于人工智能搜索的向量嵌入

经过 picocreator7m2023/01/28
Read on Terminal Reader

太長; 讀書

嵌入可用于搜索或其他任务,例如问答、文本分类和生成文本。嵌入向量表示 AI 模型对文本的概括理解。这可以被认为是用只有 AI 可以理解的语言编写的“N 字摘要”。这是超越经典搜索引擎的简单关键字搜索的重大飞跃。
featured image - 了解用于人工智能搜索的向量嵌入
picocreator HackerNoon profile picture
0-item
1-item

告别基于关键字的搜索


而 GPT 3+ 或 ChatGPT,提示工程更容易直观理解。网络和社交媒体上提供了许多指南和示例。如



嵌入,需要编程,并且由于其工作方式的各种反直觉行为而较少被理解。但是,它是一个非常强大的搜索工具,或者与现有的基于文本的模型一起用于各种其他可能的用例。


在 AI 工具包中,嵌入可以说是一个同样强大的工具,用于指令模型。由于它能够处理跨不同单词和句子甚至整个语言的搜索。专注于搜索相关文档,进行任何查询。


例如,它可用于从基于英语的文档中进行搜索和回答。用英语 ...

用英语询问我们的问答机器人

还是日本...

用日语问同样的问题,请注意我们的文档只有英文

或者 AI 模型支持的任何其他语言。


矢量嵌入可用于搜索或其他任务,例如问答、文本分类和生成文本。


注意,本文侧重于搜索方面,解答过程在后续文章中。


什么是向量嵌入?

要生成向量嵌入,人们将使用嵌入 AI 模型,它将任何文本(大文档、句子甚至单词)转换为“N 维数组”,称为向量。


例如像这样的句子How do I write a UI test script with Uilicious?


可以通过OpenAI text-embedding-ada-002 模型转换为数组(称为向量): [0.010046141, -0.009800113, 0.014761676, -0.022538893, ... an a 1000+ numbers]


该向量表示 AI 模型对文本的概括理解。这可以被认为是用只有 AI 可以理解的语言编写的“N 字摘要”。

根据 AI 对文档(而不仅仅是其文本)的理解,相关文档彼此之间的距离很近。


这是超越经典搜索引擎的简单关键字搜索的重大飞跃,因为它可以处理句子结构和语言的变化(前提是 AI 模型经过训练可以理解所述语言)。


下面举个假设的例子,为了更容易理解,不准确地简化成二维空间:



在二维空间中可以直观地呈现如下。


例如,D1、2、3 都是与如何以各种方式使用 Uilicious 相关的所有文档,并且被组合在一个集群中


D4 和 D5 只是简单的链接,除此之外没有任何内在价值,因此被单独分组在另一个集群中。


此外,D1 和 D2 进一步分组在一起,因为它们是关于 Uilicious 测试命令,使用我们自己的基于 JavaScript 的测试语言。


虽然 D3 是单独分组的,因为它涉及直接在我们的基础设施上使用 Web 驱动程序协议,它适用于不同的用例和受众。


同样,对于Q1和Q2,尽管在句子结构和语言上存在巨大差异,但由于本质上是同一个问题,所以将两个问题放在一起。


此外,虽然这个问题在技术上可以用两种方式解释(使用 Uilicious 测试脚本或 webdriver 协议),因为这个问题暗示了 Uilicious 测试脚本在 webdriver 上的使用,它的位置“更接近”D1 和 D2,并且更远离D3。


因此,尽管关键字有很大的重叠,但分组中的这些细微差别被嵌入内编码的 AI 捕获。突出其与关键字搜索的显着差异


然而,实际上,嵌入可以很容易地成为 1,000 维以上的数组,而不是人类易于理解的过于简化的二维数组。该数组对于所使用的特定 AI 模型是唯一的,不能与其他 AI 模型的嵌入混合。



数学笔记:N维数学与2/3D数学不兼容

虽然过于简化的 2 维示例有助于理解相对于一个问题(或一种观点)进行分组的高级概念,但它并不能准确地表示 N 维。


由于复杂的 N 维数学,您可能会遇到这样的情况,A 可以接近 B,B 可以接近 C,但 A 和 C 可以被认为彼此远离。这是一个非常违反直觉的陷阱。


这样的距离仅在相对于同一点和所使用的公式使用时才有用。可以使用以下方法计算


  • 欧几里德距离也称为勾股定理,它是最常用的距离度量,是 N 球面中两点之间的直线距离。
  • 余弦相似度它是 N 球面中两点之间角距离的度量,可用于测量文档或其他向量的相似度。
  • ManhattanHamming Distance:这两个指标用于衡量两个向量之间的差异,对于衡量两个字符串之间的“编辑距离”很有用。


虽然每个公式的有效性都有其各自的优缺点,适用于不同的用例。对于文本搜索,人们普遍认为欧氏距离在大多数情况下“效果更好”,而在其他方法胜出的情况下“足够好”。


所有这些实际上都用于将 N 维减少到相对于单个点的单个维度(距离)。因此,这意味着分组可以/可能会根据提出的问题发生巨大变化。


距离的这种“相对性”性质使经典数据库搜索索引无效。

如果这没有意义,这就是使用数学 N-Spheres 正确可视化 4 维空间的方式。


现在想象一下 1,000 个维度?是的,这没有意义。


因此,在不通过 PHD 论文偏离这个主题的情况下,我将把这总结为只是相信数学教授。


我们需要了解的是,一般来说,两个向量嵌入点之间的距离越近,它们彼此相关的可能性就越大。

从实际实施的角度来看。首先从使用欧氏距离开始。在考虑使用其他公式之前,这些公式通过针对您的用例的反复试验进行微调以获得更好的结果(不推荐)。



使用矢量数据库搜索嵌入

因此,鉴于我们可以将各种文档转换为嵌入,我们现在可以将其存储在数据库中并使用它执行搜索。


然而,与使用文本搜索的 SQL 数据库不同,搜索和被搜索的数据都是向量嵌入本身。这意味着传统的数据库搜索索引在搜索嵌入时是无效的。


我们可以将您所有的文档嵌入、预先计算并存储到矢量搜索数据库中。然后可以使用它来提供匹配项列表,按最近的距离排序。


这可以使用现有的矢量数据库来完成,例如

  • REDIS :一个流行的开源数据库,可用于存储向量嵌入并有效地搜索它们。
  • Annoy :一个由 Spotify 创建的库,它使用优化的算法来快速搜索嵌入。
  • FAISS :由 Facebook 创建的库,它为大型数据集提供高效的搜索算法。

需要注意的一件重要事情是,矢量搜索“数据库技术”相对较新。大多数矢量搜索数据库都是为 Facebook、Spotify 或谷歌等公司的用例而设计的,记录集的规模为数百万或数十亿。并且可能未针对小型数据集进行优化。


这将是未来几年不断变化的领域,这里有一个github“awesome-list”,可帮助跟踪和查找未来的矢量搜索数据库


因此,一般来说,我们发现对于(<10,000 ~ 100,000 嵌入)的小数据集,将嵌入数据集保存在内存中并且强制欧几里得距离平方对于许多用例来说“足够好”,并且有时会优于正式的数据库解决方案(会有磁盘/网络开销),如下所示。



这种方法的明显缺点是整个数据集必须足够小以在没有开销的情况下装入内存。


无论您使用的是本地内存嵌入搜索,还是正式的矢量搜索数据库。


就是这样!


嵌入搜索只是一种排序和排名算法,可以灵活地与各种语言和场景一起工作。作为读者,您的问题是如何使用它。它可以原样用作 google 搜索的可能替代品,或与其他工具一起使用,从聊天到游戏。可能性是无穷无尽的,可以探索。


~ 直到下一次🖖 长寿繁荣

尤金谢@tech-talk-cto.com


最初发布于: https ://substack.tech-talk-cto.com/p/introducing-ai-embeddings-and-how

Dream Big,有或没有嵌入


使用的所有图像,及其适当的归属