如何使用 Tensorflow 获得数组的所有元素与同一数组中所有其他元素的余弦相似度
How can I get the cosine similarity of all elements of an array with all the other elements in the same array using Tensorflow
给定一个形状为 (1000000, 512) 的句子嵌入数组(512 的数组),我如何计算数组的 100 万个句子嵌入中的每一个与其他句子嵌入的余弦相似度数组,理想情况下使用 tensorflow,所以我可以尝试使用 GPU 加速它?
余弦相似度是一种衡量文档相似程度的指标,无论文档大小如何。在数学上,它测量投影在多维 space 中的两个向量之间夹角的余弦值。所以,数组与自身的余弦相似度总是-1。
import tensorflow as tf
y_true = [[2., 8.], [1., 7.]]
y_pred = [[2., 8.], [1., 7.]]
cosine_loss = tf.keras.losses.CosineSimilarity(axis=1)
print(cosine_loss(y_true, y_pred).numpy())
输出:-1.0000001
这样就可以计算出余弦距离
X = np.random.uniform(0,10, (100,512)).astype('float32')
X = tf.constant(X)
def compute_cosine_distances(a, b):
normalize_a = tf.nn.l2_normalize(a,1)
normalize_b = tf.nn.l2_normalize(b,1)
distance = 1 - tf.matmul(normalize_a, normalize_b, transpose_b=True)
return distance
compute_cosine_distances(X, X)
等于
from sklearn.metrics.pairwise import pairwise_distances
pairwise_distances(X.numpy(), metric='cosine')
给定一个形状为 (1000000, 512) 的句子嵌入数组(512 的数组),我如何计算数组的 100 万个句子嵌入中的每一个与其他句子嵌入的余弦相似度数组,理想情况下使用 tensorflow,所以我可以尝试使用 GPU 加速它?
余弦相似度是一种衡量文档相似程度的指标,无论文档大小如何。在数学上,它测量投影在多维 space 中的两个向量之间夹角的余弦值。所以,数组与自身的余弦相似度总是-1。
import tensorflow as tf
y_true = [[2., 8.], [1., 7.]]
y_pred = [[2., 8.], [1., 7.]]
cosine_loss = tf.keras.losses.CosineSimilarity(axis=1)
print(cosine_loss(y_true, y_pred).numpy())
输出:-1.0000001
这样就可以计算出余弦距离
X = np.random.uniform(0,10, (100,512)).astype('float32')
X = tf.constant(X)
def compute_cosine_distances(a, b):
normalize_a = tf.nn.l2_normalize(a,1)
normalize_b = tf.nn.l2_normalize(b,1)
distance = 1 - tf.matmul(normalize_a, normalize_b, transpose_b=True)
return distance
compute_cosine_distances(X, X)
等于
from sklearn.metrics.pairwise import pairwise_distances
pairwise_distances(X.numpy(), metric='cosine')