向量检索:被低估的检索算法 | 与 AI 结伴自学(陆)
2025-01-05 13:44
Leeduckgo
2025-01-05 13:44
订阅此专栏
收藏此文章

去中心化推荐系统 | 与 AI 结伴自学(伍)

和 Aptos 白皮书对话 | 与 AI 结伴自学(肆)

向量数据库之基本概念 | 与 AI 结伴自学(三)

建立关于一门学科的知识树 | 与 AI 结伴自学(二)

前言 | 与 AI 结伴自学(一)


0x01 什么是 Embedding?

1.1 Embedding 作为数据表达方式

Embeddings 是一种数据表达方式,它能够让我们轻松地找出两个或多个数据点之间的"相关性"。它们之所以强大,是因为它们允许你存储非结构化数据(即那些不能完全适合 JSON 格式的数据),并基于这些数据创建可搜索的系统。

Embedding 的例子:

IDDataMetaDataEmbedding
0来日总是千千阙歌,飘越远方我路上。{"Author": "0x01", "Type": ["cantonese"]}[0.123, -0.144,...]
1雲想衣裳花想容,春風拂檻露華濃。{"Author": "0x02", "Type": ["cn", "porm"] }[0.593, 0.333,...]
............

抽象来看,基于 Embedding 进行数据结构设计,会包含数据(Data),JSON 格式的元数据(MetaData)和向量数据(Embedding)三部分。其中,数据负责内容存储、Embedding 是内容在向量空间中的坐标、MetaData 负责数据标记📌。

其中有两点需要注意的:

1/ 在有需要的情况下,可以把 MetaData 中的数据进行 Flattern,以便检索等数据操作;

2/ ID 可以根据需要选择传统递增 ID,或是 uuid 这种唯一 ID。

1.2 Embedding 作为数据相关算法

💡以下内容来自 OpenAI Documentation

https://platform.openai.com/docs/guides/embeddings

Embeddings 是 OpenAI 用来衡量内容之间相关性的一类算法。

💡ANN(近似最近邻算法) 和 KNN(最近邻居算法)都可以归到 Embedding 算法这个分类下。

Embeddings 常见的应用场景包括:

  1. 搜索(根据查询内容的相关性对结果进行排序)

  2. 聚类(将相似的内容分组)

  3. 推荐(推荐具有相关内容的项目)

  4. 异常检测(识别相关性很低的离群值)

  5. 多样性测量(分析相似度分布)

  6. 分类(根据最相似的标签对内容进行分类)

Embedding 本质上是一个浮点数列表(向量)。两个向量之间的距离用来衡量它们的相关性:

  • 距离小表示相关性高
  • 距离大表示相关性低

Nearest Neighbor Search Algorithms: An Intro to KNN and ANN | Rockset

0x02 为什么选择 Embedding 算法?

2.1 一般优点

如果搜索🔍相关文献,会提到 Embedding 算法的两个优点:

  • 多模态支持: 不同类型的内容都可以 Embedding 化,所以多种类型的搜索都可以用 Embedding 算法作为解决方案。而如果是传统的检索解决方案,则需要针对不同的数据类型选取不同算法。

  • 简明与高效: 简明与高效是 Embedding 算法的特点,最直观的证明是我们使用代码量少于 30 行的 PostgresSQL 🐘函数就能实现检索:

    -- this search algorithm is impled under 30 line!
    create or replace function embedding_search_bodhi_text_assets_k_v_space_145 (
      query_embedding vector(3072),
      match_threshold float,
      match_count int
    )
    returns table (
      id int,
      data text,
      metadata json,
      creator text,
      id_on_chain int,
      similarity float
    )
    language sql stable
    as $$
      select
        bodhi_text_assets_k_v_space_145.id,
        bodhi_text_assets_k_v_space_145.data,
        bodhi_text_assets_k_v_space_145.metadata,
        bodhi_text_assets_k_v_space_145.creator,
        bodhi_text_assets_k_v_space_145.id_on_chain,
        1 - (bodhi_text_assets_k_v_space_145.embedding_3072 <=> query_embedding) as similarity
      from bodhi_text_assets_k_v_space_145
      where bodhi_text_assets_k_v_space_145.embedding_3072 <=> query_embedding < 1 - match_threshold
      order by bodhi_text_assets_k_v_space_145.embedding_3072 <=> query_embedding
      limit match_count;
    $$;

    2.2 被忽视的「成本前置」

    然而,这两个优点纯粹从计算机科学的视角出发对 Embedding 算法的评估。因此,Embedding 算法在很多时候受到质疑 —— 这些优点都只能算是「维他命💊」,而不是「止痛片🩹 」,用上它有好处,但用传统的方案凑合也不是不行🤔。

    我认为,这是因为 Embedding 算法最大的特点被人们所忽视了,那就是:

    Embedding 算法是 「成本前置」 的。


    数据录入成本搜索成本
    传统搜索算法后端服务器成本
    Embedding 算法向量化成本检索内容向量化成本

    Embedding 算法将传统搜索算法需要 的后端服务器成本转移为了内容的向量化成本,包括被检索内容的向量化和检索内容的向量化。

    这个看似微小的变化可以带给我们丰富的想象空间 🏈。

    例如,结合我们新设计的「无后端」 AI SaaS 框架,任何人都可以通过极低的成本建立自己的搜索引擎🔍!

                                     User 
                                      ↓ Request
    +-----------------------------------------------------------------+
    |                               Stack                             |
    +-----------------------------------------------------------------+
    |  User | Task | Solution | Resolver | Fee | Rate | Human/AI/Both |
    +-----------------------------------------------------------------+
                           ↑ Handle                ↑ Handle
                      AI Services            Human Services

    新的架构下,后端服务器的成本转变为一台本地的闲置计算机的成本,Awesome!

    📄 补充资料:

    事实上,这种方式非常古典...在 1999 年,我们就可以通过电脑屏保来提供「寻找外星人👽」的算力了...

    https://setiathome.berkeley.edu/

    2.3 Web3-based & AI-Friendly & Low-Cost Search Engine



【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

Leeduckgo
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开