Google bigquery Bigquery中数组对之间的余弦相似性

Google bigquery Bigquery中数组对之间的余弦相似性,google-bigquery,bigquery-standard-sql,Google Bigquery,Bigquery Standard Sql,我已经创建了一个表,其中有一对ID,并对每个ID进行坐标,以便计算它们之间的成对余弦相似性 这张桌子看起来像这样 coords的维度数目前为128,但可能有所不同。但在同一个表中,一对ID的数字维度总是相同的 coord1和coord2是带有浮点值的重复字段(数组) 有没有办法计算它们之间的余弦相似性 我的预期输出将有三列,id1,id2和cosine\u相似性,下面是BigQuery标准SQL #standardSQL SELECT id1, id2, ( SELECT SUM

我已经创建了一个表,其中有一对ID,并对每个ID进行坐标,以便计算它们之间的成对余弦相似性

这张桌子看起来像这样

coords的维度数目前为128,但可能有所不同。但在同一个表中,一对ID的数字维度总是相同的

coord1
coord2
是带有浮点值的重复字段(数组)

有没有办法计算它们之间的余弦相似性


我的预期输出将有三列,
id1
id2
cosine\u相似性
,下面是BigQuery标准SQL

#standardSQL
SELECT id1, id2, ( 
  SELECT 
    SUM(value1 * value2)/ 
    SQRT(SUM(value1 * value1))/ 
    SQRT(SUM(value2 * value2))
  FROM UNNEST(coord1) value1 WITH OFFSET pos1 
  JOIN UNNEST(coord2) value2 WITH OFFSET pos2 
  ON pos1 = pos2
  ) cosine_similarity
FROM `project.dataset.table`  
下面是一个虚拟示例供您使用

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id1, [1.0, 2.0, 3.0, 4.0] coord1, 2 id2, [1.0, 2.0, 3.0, 4.0] coord2 UNION ALL
  SELECT 3, [2.0, 0.0, 1.0, 1.0, 0, 2.0, 1.0, 1.0], 4, [2.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0]
)
SELECT id1, id2, ( 
  SELECT 
    SUM(value1 * value2)/
    SQRT(SUM(value1 * value1))/ 
    SQRT(SUM(value2 * value2))
  FROM UNNEST(coord1) value1 WITH OFFSET pos1 
  JOIN UNNEST(coord2) value2 WITH OFFSET pos2 
  ON pos1 = pos2
  ) cosine_similarity
FROM `project.dataset.table`  
结果

Row id1 id2 cosine_similarity    
1   1   2   1.0  
2   3   4   0.8215838362577491   

这个额外的假例子真是太好了!!嗨,我知道已经两年了,还想知道你是怎么创建这样的表格的?您是否创建了json文件或bigquery表?谢谢