banner
reverie

reverie

Vector Databases & Embeddings

向量数据库和嵌入是当前 AI 中的热门话题。

向量数据库公司 Pinecone 刚刚以约 1b 的估值筹集了 1 亿美元。

Shopify、Brex、Hubspot 和其他公司将它们用于他们的 AI 应用程序

但它们是什么,它们如何工作以及为什么它们在 AI 中如此重要?

image

首先,什么是向量嵌入?
简单的解释是:

嵌入只是数字的 N 维向量。它们可以代表任何东西,文本、音乐、视频等。我们将专注于文本。

image

创建嵌入的过程很简单。它涉及一个嵌入模型(例如:来自 Openai 的 Ada)。

将文本发送到模型,它会为您创建该数据的矢量表示,可以存储并在以后使用。

向量数据库很重要的原因是,它们赋予了我们语义搜索的能力,也就是通过相似性进行搜索。就像通过文本的含义。

在这个例子中,我们可以在向量平面上建模一个男人、国王、女人和皇后,并非常容易地看到他们彼此之间的关系。

image

这是一个更直接的例子: 想象你是一个孩子,手里拿着一大盒玩具。现在您想找到类似的玩具,例如玩具车和玩具巴士。 它们都是车辆,所以它们很相似。

这就是所谓的 “语义相似性”。 - 当事物具有相似的含义 / 想法时。

现在假设有两个相关但不相同的玩具。就像玩具车和玩具路。它们不一样,但确实属于同一类,因为汽车通常在路上行驶。

那么,为什么它们如此重要?嗯,这是因为 LLM 的上下文限制。

在理想情况下,我们可以将无限数量的单词放入 LLM 提示中。但我们做不到。现在它限制在~4096 - 32k Token。

由于 LLM 的 “记忆”,也就是我们可以在其 Token 限制中容纳多少单词,因此我们严格限制了如何与 LLM 进行交互。

这就是为什么不能将 PDF 复制粘贴到 chatGPT 并要求它对其进行总结。 (也许你现在可以使用 gpt4-32k)

现在这一切最终是如何拼凑起来的?我们可以利用向量嵌入来将相关文本注入到 LLM 上下文窗口中。 让我们看一个例子:

假设您有一个巨大的 PDF,也许是国会听证会之一(呵呵) 而且你很懒惰,所以你不想阅读整篇文章,而且你无法粘贴整篇文章,因为它有十亿页长。

你首先获取 PDF,创建矢量嵌入 (vector embedding),并将其存储在数据库中。 现在你问一个问题,“他们对 xyz 说了什么” 。首先:创建一个你问题的 embedding:“他们对 xyz 说了什么”

现在我们有两个向量:你的问题 [1,2,3] 和 pdf [1,2,3,34] 然后我们使用相似性搜索将问题向量与我们的巨型 PDF 向量进行比较。 openai 推荐的是余弦相似度。

image

现在我们有: 3 个最相关的 Embedding 和文本。我们现在可以使用 3 的输出,并通过一些 prompt Engineering 将其喂给 LLM。

最常见的是:根据上下文,如实回答用户问题。如果做不到,那就说 “我无法回答这个问题”,就是这样!LLM 从 PDF 中提取相关文本块并尝试如实回答问题。

这是对 Embedding 和 LLM 如何为任何形式的数据提供类似聊天功能的基本解释。这也是所有那些 “chat with your site/pdf/blah blah” 的工作方式!这并不是微调,只是一个营销术语。

Embedding 是数据的 n 纬向量表示,无论是文本、图片、音频、视频都可以做 Embedding。

chatfile 类产品主要用的是文本 Embedding

做法:

1)把 PDF 切分成小的文本片段,通过 OpenAI 的 Ada 模型创建 Embedding 放到本地或远程向量数据库。

2)把用户的提问也创建成 Embedding,用它和之前创建的 PDF 向量比对,通过语义相似性搜索(余弦算法),找到最相关的文本片段。比关键词搜索好的一点是不要求关键词包含,也能发现文本相关性,比如汽车和公路。

3)把用户提问和相似文本片段发给 OpenAI,写 Prompt 要求 ChatGPT 基于给定的内容生成回答,如果没有相似文本或关联度不高,回答不知道。

为避免 ChatGPT 乱发挥,一般 Temperture 会设置的很低甚至为 0

注意:这种方法实用性仍然比较有限,质量也不好,虽有一定调优空间(文本切片,问答对)

现在这么做也是不得已,因为 ChatGPT 的上下文记忆 token 有限(32k 会好一些),不能直接丢超长文档让它分析。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。