0
私はBigQuery(How can I compute TF/IDF with SQL (BigQuery)を参照)に格納されたベクトルを持っており、それらの間で最も似たものを見つけたいと思います。 BigQueryの標準SQLでコサインの類似性を計算するにはどうすればよいですか?BigQuery SQLとのコサイン類似性
私はBigQuery(How can I compute TF/IDF with SQL (BigQuery)を参照)に格納されたベクトルを持っており、それらの間で最も似たものを見つけたいと思います。 BigQueryの標準SQLでコサインの類似性を計算するにはどうすればよいですか?BigQuery SQLとのコサイン類似性
このクエリは、(ワードで)その大きさを考えると、各ドキュメントのために定義されたベクトルを見て、コサイン距離の式でそれらを乗算:私たちは距離を得ることを証明し、
#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:
2番目の結果:
その他、各種:
警告:このSQLコードは、LEFT JOINはないので、我々は唯一のない権利はなく、反対側の左側文書の言葉にヌルを取得します。