假设您在数据库中有一个按以下方式构建的表:
请注意,由于向量存储在数据库中,我们只需要存储非零条目。在此示例中,我们仅有两个向量$v_{99} = (4,3,4,0)$和$v_{1234} = (0,5,2,3)$都在$\mathbb{R}^4$中。
create table data (v int, base int, w_td float);
insert into data values (99,1,4);
insert into data values (99,2,3);
insert into data values (99,3,4);
insert into data values (1234,2,5);
insert into data values (1234,3,2);
insert into data values (1234,4,3);
明确一点,select * from data
应该输出:
v |base|w_td
--------------
99 |1 |4.0
99 |2 |3.0
99 |3 |4.0
1234|2 |5.0
1234|3 |2.0
1234|4 |3.0
请注意,由于向量存储在数据库中,我们只需要存储非零条目。在此示例中,我们仅有两个向量$v_{99} = (4,3,4,0)$和$v_{1234} = (0,5,2,3)$都在$\mathbb{R}^4$中。
这些向量的余弦相似度应为$\displaystyle \frac{23}{\sqrt{41 \cdot 38}} = 0.5826987807288609$。
如何使用几乎只有SQL
计算余弦相似度?
我说几乎是因为您将需要sqrt
函数,它并不总是在基本的SQL
实现中提供,例如在sqlite3
中就没有!
sqrt
。详情请参见此处。 - Annarfych