2017-12-04 5 views

答えて

1

このクエリは、(ワードで)その大きさを考えると、各ドキュメントのために定義されたベクトルを見て、コサイン距離の式でそれらを乗算:私たちは距離を得ることを証明し、

#standardSQL 
SELECT ANY_VALUE(title2) orig, ANY_VALUE(tf2id) id_orig, a.id id_similar 
    , ROUND(SAFE_DIVIDE(SUM(b.tf_idf * IFNULL(c.tf_idf,0)),(SQRT(SUM(b.tf_idf*b.tf_idf))*SQRT(SUM(POW(IFNULL(c.tf_idf,0),2))))),4) distance 
    , ANY_VALUE(title1) similar 
    , ARRAY_AGG((ROUND(b.tf_idf,4), ROUND(c.tf_idf,4))) weights 
    , ARRAY_AGG((b.word, c.word)) words 
FROM (
    SELECT id, tfidfs tf1, tf2, tf2id 
    , a.title title1 
    , b.title title2 
    FROM `fh-bigquery.stackoverflow.tf_idf_experiment_3` a 
    CROSS JOIN (
    SELECT tfidfs tf2, id tf2id, title 
    FROM `fh-bigquery.stackoverflow.tf_idf_experiment_3` 
    WHERE id = 11353679 
    LIMIT 1 
) b 
) a 
, UNNEST(tf1) b LEFT JOIN UNNEST(tf2) c ON b.word=c.word 
GROUP BY id 
ORDER BY distance DESC 

まず結果は同じ文書であります自身の1:

enter image description here

2番目の結果:

enter image description here

その他、各種:

enter image description here

警告:このSQLコードは、LEFT JOINはないので、我々は唯一のない権利はなく、反対側の左側文書の言葉にヌルを取得します。

関連する問題