Embeddings 是一种数据表达方式,它能够让我们轻松地找出两个或多个数据点之间的"相关性"。它们之所以强大,是因为它们允许你存储非结构化数据(即那些不能完全适合 JSON 格式的数据),并基于这些数据创建可搜索的系统。
Embedding 的例子:
ID | Data | MetaData | Embedding |
---|---|---|---|
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。
💡以下内容来自 OpenAI Documentation
https://platform.openai.com/docs/guides/embeddings
Embeddings 是 OpenAI 用来衡量内容之间相关性的一类算法。
💡ANN(近似最近邻算法) 和 KNN(最近邻居算法)都可以归到 Embedding 算法这个分类下。
Embeddings 常见的应用场景包括:
搜索(根据查询内容的相关性对结果进行排序)
聚类(将相似的内容分组)
推荐(推荐具有相关内容的项目)
异常检测(识别相关性很低的离群值)
多样性测量(分析相似度分布)
分类(根据最相似的标签对内容进行分类)
Embedding 本质上是一个浮点数列表(向量)。两个向量之间的距离用来衡量它们的相关性:
如果搜索🔍相关文献,会提到 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;
$$;
然而,这两个优点纯粹从计算机科学的视角出发对 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/
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。