原标题:如何理解“向量化”?
向量数据库最近很流行,其实顾名思义,就是以向量形式存储的数据库,其物理形式更加偏向非关系型
数据库。点击阅读《
了解一些非关系型数据库!》。
具体形式,物理上实际上是一组分布式数据库,依据这种数据库的逻辑划分,用户具有使用和调度的权
限。例如,向量数据库的逻辑层次,从母集到子集依次为,实例、库、集合、文档、字段。
其中,具有操作层面实体的是,库、集合、文档。
库
/database/create
/database/drop
集合
/collection/create
/collection/drop
集合这个概念,和 SQL 中的“表”在同一层次。
文档
/document/upsert
/document/query
/document/search
/document/delete
/document/update
这个概念是真对一行进行操作。
向量数据库的索引,包括主键索引、向量索引、过滤器索引。
针对向量索引,需要对 raw data 作向量化的操作。
什么是向量化呢?
ShoelessCai 综合部分公开资料:诸如 Python 开发的一系列函数,使得其计算模式更加符
合数学运算规则,而非计算机的运算规则。
举几个提升速度的例子。
1.矩阵乘法 np.dot()
(1)向量化方法
np.dot(x,m.T)
### time = 0.107 seconds
(2)循环方法
for i in range(0,5000000):
    total = 0
    for j in range(0,5):
        total = total + x[i][j]*m[0][j]
    zer[i] = total
### time = 28.228 seconds
2.for + if-else
循环将每行数据分类,遵守 MECE 法则。
(1)向量化方法
df['e'] = df['b'] + df['c']
df.loc[df['a'] <= 25, 'e'] = df['b'] -df['c']
df.loc[df['a']==0, 'e'] = df['d']
### time = 0.28007707595825195 seconds
(2)循环 for + if-else
for idx, row in df.iterrows():
    if row.a == 0:
        df.at[idx,'e'] = row.d
    elif (row.a <= 25) & (row.a > 0):
        df.at[idx,'e'] = (row.b)-(row.c)
    else:
        df.at[idx,'e'] = row.b + row.c
### time = 177 seconds
具体到非结构化数据,例如,文本、图象、声音,这些变量怎么做向量化呢?
将字段分成可分析、可组合的简单线性数值变量。划分方式打包成函数。 例如,我们定义一张
“汽车”图,那么,拍摄时间、地点,都是向量中的两个维度。其他的衍生维度,例如汽车的长宽高,
甚至是对应车型号、重量等等。如何抽取这些维度,由各种模型去定义,不同模型对应不同的向量。
向量化决定了搜索精确度、查全率,以及效率。
参考文献
[1]
InfiniFlow(2024),向量+稀疏向量+全文搜索+张量 = 最佳 RAG 搭配 ?,知乎,2024
[2] 刘建平Pinard(2017),典型关联分析(CCA)原理总结,cnblogs,2017
[3] 数据
STUDIO(2022),再见,Python 循环!向量化已超神,知乎,2022
[4] 我是管小亮(2020),从零开始深度学习(七):向量化,腾讯云,2020
[5] 一键难忘(2024),【提升计算效率】向量化人工智能算法的策略与实现,腾讯云,
2024
[6]
Oten(2023),神经网络基础篇:向量化(Vectorization),cnblogs,2023
[7] 罗云(2024),从零构建向量数据库[M],2024.8 第一版。