Google推出可简单训练相似性模型的TensorFlow Similarity组件

深度学习函数库TensorFlow提供相似性(Similarity)功能,这是一个Python组件,让TensorFlow开发者可以简单地训练相似性模型,开发推荐相似衣服,或是识别当前播放歌曲等系统。官方提到,TensorFlow Similarity用起来相当简单,在MNIST资料上训练、索引和搜索的小范例,只要不用20行程序代码就可以完成,而且即便使用次优模型,搜索和配对结果仍然相当好。

寻找相似物品的能力,在现实世界中有各种应用,像是多媒体搜索、推荐系统或是分类工作管线等,能够快速检索相关项目,是这类信息系统的重要核心功能,TensorFlow Similarity如同其他这类系统,同样使用对比学习(Contrastive Learning)技术,官方解释,对比学习教模型学会一个嵌入空间,在这空间中相似的样本很近,不同的样本则很远,属于同一类的会被拉进在一起,不同的则被分离开来。

对比学习应用在整个人信息料集的时候,对比损失让模型可以学习,将对象投影到嵌入空间中的方法,方便以嵌入之间的距离,来代表输入样本的相似程度。在训练结束后,开发者就能够获得一个分类空间,相似的对象距离很近,不同则距离很远。

接着对所有想要搜索的项目嵌入构建一个索引,在查询时,TensorFlow Similarity就能够利用快速最相似邻近搜索(Fast Approximate Nearest Neighbor),在次线性时间内,从索引中检索最接近的相符项目。由于TensorFlow Similarity能够借由计算嵌入点的距离,就可以比对相似度,而距离度量满足三角不等式,使得空间适合使用快速最相似邻近搜索,进行高准确度检索。

官方解释,其他像是使用模型特征截取的方法,需要使用精确的最邻近搜索(Nearest Neighbor Search,NNS),寻找相关的项目,但是又可能不如相似模型一样精确,而且因为执行精确搜索,需要花费搜索索引平方次的时间,因此不适合大规模应用。TensorFlow Similarity内置最相似邻近搜索索引系统依赖NMSLIB,能够搜索数百万个索引项目,并在数分之一秒内检索前K项相似项目。

除了准确性和检索速度的优势之外,相似性模型的另一个主要优势,是可以让开发者在索引添加无限数量的新类别,而不需要重新训练,只需要计算新类别中代表性项目的嵌入,并加到索引中就可以了,官方提到,这种动态添加新类别的能力,在解决未知且不断变化的问题时特别有用,像是音乐应用能够协助用户,不断发现喜欢的新歌曲。

TensorFlow Similarity提供所有必要的组件,让开发者能够主动地进行相似性训练评估和查询,在本机支持上,TensorFlow Similarity添加了一种新的Keras模型SimilarityModel,支持本机嵌入索引和查询,供开发者快速地执行端到端训练和评估。

TensorFlow Similarity支持Keras API,并且可使用现有Keras架构,官方表示,他们还会继续发展TensorFlow Similarity,在现有基础上,支持BYOL、SWAV和SimCLR等半监督式和自我监督方法。