当前位置: 首页 > 面试题库 >

余弦相似度的SQL计算

佴阳辉
2023-03-14
问题内容

假设您在数据库中按以下方式构造了一个表:

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!中并没有提供该功能。


问题答案:
with norms as (
    select v,
        sum(w_td * w_td) as w2
    from data
    group by v
)
select 
    x.v as ego,y.v as v,nx.w2 as x2, ny.w2 as y2,
    sum(x.w_td * y.w_td) as innerproduct,
    sum(x.w_td * y.w_td) / sqrt(nx.w2 * ny.w2) as cosinesimilarity
from data as x
join data as y
    on (x.base=y.base)
join norms as nx
    on (nx.v=x.v)
join norms as ny
    on (ny.v=y.v)
where x.v < y.v
group by 1,2,3,4
order by 6 desc

产量

ego|v   |x2  |y2  |innerproduct|cosinesimilarity
--------------------------------------------------
99 |1234|41.0|38.0|23.0        |0.5826987807288609


 类似资料:
  • 问题内容: 我计算了两个文档的tf / idf值。以下是tf / idf值: 这些文件就像: 如何使用这些值来计算余弦相似度? 我知道我应该计算点积,然后找到距离并除以点积。如何使用我的值来计算? 还有一个问题: 两个文档的字数相同是否重要? 问题答案: a * b是点积 一些细节: 是。在某种程度上,a和b必须具有相同的长度。但是a和b通常具有稀疏表示,您只需要存储非零条目,就可以更快地计算范数

  • 问题内容: 如何找到向量之间的余弦相似度? 我需要找到相似性来衡量两行文本之间的相关性。 例如,我有两个句子: 用户界面系统 用户界面机 …及其在tF-idf之后的向量,然后使用LSI进行标准化,例如 和。 如何测量这些向量之间的相似性? 问题答案: 我最近在大学的信息检索部门做了一些tf-idf的工作。我使用了这种余弦相似度方法,该方法使用Jama:Java Matrix Package 。 有

  • 问题内容: 我一直在遵循一个教程,该教程显示了如何制作word2vec模型。 本教程使用以下代码: (未提供其他信息,但我想这来自) 现在,我已经对该方法进行了一些研究,但对此却知之甚少。据我了解,它已被许多功能取代。 我应该使用什么?有,它有一个参数(似乎正确),但没有参数。 在这种情况下我可以使用什么? 问题答案: Keras文档中有一些尚不清楚的事情,我认为了解这些至关重要: 对于keras

  • 问题内容: 我有两个标准化张量,我需要计算这些张量之间的余弦相似度。如何使用TensorFlow做到这一点? 问题答案: 这将完成工作: 此打印

  • 本文向大家介绍Python 余弦相似度与皮尔逊相关系数 计算实例,包括了Python 余弦相似度与皮尔逊相关系数 计算实例的使用技巧和注意事项,需要的朋友参考一下 夹角余弦(Cosine) 也可以叫余弦相似度。 几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。 (1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式: (2) 两个n维

  • 问题内容: 我正在使用Elasticsearch进行研究。我打算使用余弦相似度,但我注意到它不可用,而我们将BM25作为默认评分功能。 有什么理由吗?余弦相似度是否不适用于查询文档?为什么选择BM25作为默认值?谢谢 问题答案: 长期的Elasticsearch使用TF / IDF算法来查找查询中的相似性。但是以前的数字版本更有效地更改为BM25。您可以阅读文档中的信息。好的文章解释了什么是ela