介绍 TensorFlow 相似性

源节点: 1079311

介绍 TensorFlow 相似性

TensorFlow Similarity 是 Google 新发布的一个库,用于促进相似性模型的训练、索引和查询。 在这里查看更多。


通常,我们需要能够找到与其他事物相似的事物。 相似度搜索 是一种有用的技术。 在数据科学中, 对比学习 可用于构建相似性模型,然后可用于相似性搜索。

相似模型 训练输出嵌入,其中项目嵌入度量空间,导致类似项目彼此靠近而远离不同项目的情况。 这与您已经熟悉的词嵌入直接相关——无论是直观上还是数学上; 巴黎和伦敦彼此靠近,芥末酱和番茄酱也是如此,但这两组之间的距离相对较远。

以同样的方式,我们可以使用相似性模型来比较车辆。 例如,宝马和梅赛德斯轿车将彼此靠近嵌入,而雅马哈和川崎摩托车将发现它们彼此紧密嵌入。 摩托车与轿车的距离相对较远,而轿车又与其他不同的车辆(如船、房车、货车、自行车等)保持距离。

数字
相似性模型概述(资源)

 

深度学习用于训练神经网络,这些神经网络经常发现自己被用于这些相似性模型。 为了促进此类模型的训练,谷歌最近发布了 TensorFlow 相似度.

Tensorflow Similarity 为度量学习提供了最先进的算法以及研究、训练、评估和服务基于相似性的模型的所有必要组件。

模型训练好后,会建立一个嵌入索引以方便搜索。 对于搜索,TF Similarity 使用快速近似最近邻搜索 (ANN) 来检索最接近的匹配项。 由于嵌入项目之间的距离是距离度量的函数,因此使用 ANN 查找既快速又准确。

相似性模型也是灵活和可扩展的,允许将无限数量的项目类别添加到模型中而无需重新训练; 只需计算有代表性的新项目嵌入并将它们添加到现有索引中。

数字
TensorFlow 相似性概述(资源)

 

TensorFlow Similarity 方便了相似度模型的训练,以及后续的查询,直观,特别是引入了新的 Keras 模型 SimilarityModel(),它支持嵌入索引和查询。 使用 TF Similarity,端到端模型训练和查询非常简单。

为了演示,这里是 TF 相似性的示例代码 GitHub回购 简洁地训练、索引和查询 MNIST 数据集。

from tensorflow.keras import layers # 使用 L2 范数嵌入输出层 from tensorflow_similarity.layers import MetricEmbedding # tensorflow_similarity.losses 中的专业度量损失 import MultiSimilarityLoss # 子类 keras 模型,支持来自 tensorflow_similarity.models 数据集的索引直接从 tf 数据集目录 from tensorflow_similarity.samplers import TFDatasetMultiShotMemorySampler # 最近邻可视化器 from tensorflow_similarity.visualization import viz_neigbors_imgs # 数据采样器从 MNIST 数据集生成平衡批次 sampler = TFDatasetMultiShotMemorySamplers,SimilaritySamplers_a_datasetMultiShotMemorySamplers_data_sampler(使用标准 Keras 层输入 = layers.Input(shape=(10, 28, 28)) x = layers.Rescaling(1/1)(inputs) x = layers.Conv255D(2, 64, activation='relu')( x) x = layers.Flatten()(x) x = layers.Dense(3, activation='relu')(x) 输出 = MetricEmbedding(64)(x) # B 建立一个专门的相似度模型 model = SimilarityModel(inputs,outputs) # 使用对比损失训练相似度模型 model.compile('adam', loss=MultiSimilarityLoss()) model.fit(sampler, epochs=64) # 索引 5 个嵌入式 MNIST 示例使它们可搜索 sx, sy = sampler.get_slice(100) model.index(x=sx, y=sy, data=sx) # 查找给定示例的前 0,100 个最相似的索引 MNIST 示例 qx, qy = sampler. get_slice(5, 3713) nns = model.single_lookup(qx[1]) # 可视化查询示例及其前 0 个邻居 viz_neigbors_imgs(qx[5], qy[0], nns)


如果您发现自己正在寻找与其他事物类似的事物,TensorFlow Similarity 可能会有所帮助。 你可以在他们找到更多 GitHub回购,或查看 你好世界 正确的例子。

 
相关:

来源:https://www.kdnuggets.com/2021/09/introducing-tensorflow-similarity.html

时间戳记:

更多来自 掘金队