点击上方蓝色字体,关注:九三智能控
关注公众号,回复20180606,获取算法代码
现代搜索引擎的力量非常强大,可以让你瞬间从互联网中获取想要的知识。但是,现有技术也存在着无法忽视的局限性,比如搜索非文字内容或者内容难以用“关键词”描述时,都难以达到预期的搜索效果。更进一步,现有搜索技术难以让用户实现“语义”搜索,即通过文字内容的意义来检索相关内容。
今天,我们分享一个简单易行的算法,可以实现对任意对象的语义搜索。具体来说,该算法创建了一个系统,可以对python代码进行语义搜索,但该方法也可以推广到其他内如(例如图片或视频等)。
搜索内容为“Ping REST api and return results”,引擎返回了合理的检索内容,尽管检索到的代码或注释中并没有包含Ping,REST或api等关键词。
该例子展示了语义搜索的强大:我们可以结合关键词以及关键词代表的意义来最大限度的找到想要的内容。语义搜索的深刻意义在于:即使我们不熟悉代码或者难以找到合适的关键词,依然可以确保用户检索到需要的内容。
创建一个共享向量空间
在深入技术细节之前,从直观上了解语义搜索是如何实现的,是非常有意义的。其中心思想是:将想要搜索的内容(如代码)变换到共享向量空间(shared vector space)中。
算法的目标是将代码映射到自然语言的向量空间中,然后利用余弦相似性(Cosine Similarity)将代表相似意义的代码聚类的一起,而不相关的内容则会分布在较远的坐标上。我们提供的方法可以利用预训练模型提取代码特征,然后再调试(fine-tuning)该模型从而实现将潜在的代码映射到自然语言向量空间。
本文将分为5个具体步骤介绍算法。下面将演示这些步骤,当您在本教程中继续学习时,这些步骤将是一个有用的参考。在完成本教程之后,有必要重新检查这个图,以确认所有步骤是如何结合在一起的。
步骤1 获得和清洗数据
BigQuery是谷歌收集和存储的开源数据集(在GitHub上),可以用于各种有趣的数据科学项目。本项目就是采用的该数据集,当您注册一个谷歌云帐户时,他们会给您300美元,这足以查询此练习的数据。获取这些数据非常方便,因为您可以使用SQL查询来选择要查找的文件类型,以及关于repos的其他元数据