项目背景
贝壳作为一家房产服务互联网平台,如何在海量房源中选出能够快速成交的房源是对平台和经纪人来说都是一件非常重要同时具有挑战的事情,但是针对房型图,户型信息等一系列非结构化数据在平台中应该怎么搜索呢?
我们都知道计算机没有办法处理图片、语音、人类语言等非结构化数据,借助人工智能“万物皆可 embedding",通过 embedding 技术将这些非结构化数据映射成多维向量,再使用向量搜索工具就可以轻松地分析数据。
为了加强房源分析,给用户推荐其关注的相似房源等功能,贝壳搜索平台计划在向量搜索方向迈进,并且调研了目前市面上一些开源的向量工具,包括Faiss、Vearch和Milvus等,最终综合考虑易用性、社区活跃度、项目支持力度等因素性选择了Milvus来搭建向量搜索平台。
引入Milvus
Milvus向量相似度搜索引擎可以对接包括图像处理、机器视觉、自然语言处理、语音识别、推荐系统以及新药发现等AI模型,为向量化后的非结构数据提供搜索分析服务。通过深度学习模型将非结构化数据转化为特征向量导入Milvus库,Milvus对特征向量进行存储并建立索引,然后在Milvus中进行搜索,Milvus将返回与搜索向量相似的结果。
房源搜索的应用场景中,我们首先将房源信息按照不同因素(比如有关房型布局、面积分布、外轮廓等)采用机器学习模型生成不同维度的特征向量,每一套房子都会对应一组特征向量,然后根据不同的特征向量在 Milvus 中进行相似性搜索,这里每一组向量搜索的结果都是从不同角度来分析相似房型,最后综合多个向量搜索的结果最终为用户提供推荐的房源类型。
具体实现流程如上图所示,将房源信息相关的特征向量导入 Milvus ,然后在 Milvus 中建立四个不同维度的 collection,包括房型、面积、外轮廓和朝向这些信息,接下来在 Milvus 中做相似性检索,将会返回的多组检索结果,最后综合多组相似结果按照相应的规则为用户提供个性化的房源推荐。
图中的 A/B 表切换是为了在系统中实现 T+1 天数据更新,即在 A 表中存储 T 天的数据,在第 T+1 天时,在 B 表中导入更新后的 T 天数据, 此时就在 Milvus 中切换到 B 表,这样在更新数据时就不会对系统造成影响。
得益于Milvus先进的算法和强大的算力,贝壳向量搜索平台实现了对海量特征向量的高性能分析,目前在单机环境下,300万数据搜索的平均响应时间只需要113 ms。同时Milvus还支持分布式集群方案,当前系统就使用了Kubernetes方式部署Milvus分布式集群,性能与单机类似,并且可以轻松实现水平拓展和高可用。
房源推荐系统介绍
在房源推荐系统中主要是采用的相似推荐方法,根据”物以类聚,人以群分“定理,当用户对某房源比较感兴趣时,就为用户推荐与之相似的房源信息。基本上所有的推荐算法都是在计算相似度,包括用户相似度或者物品相似度,所以说推荐算法中相似性计算是基础,接下来将简单介绍相似推荐的算法:
- 算法思想
基于用户的收藏找到相似的房源,然后将这些相似性排序较高的房源推荐给用户。
- 计算方法
计算相似性的方法有很多,比如欧氏距离、余弦距离、Tanimoto 系数等,这些计算方式在 Milvus 向量相似度搜索引擎中都支持,而在相似房源推荐中我们采用的是余弦距离。
- 基本步骤
- 收集用户偏好
为方便计算机处理,首先将用户收藏的房源信息转为特征向量。 - 搜索相似的房源
将系统中现有的房源信息都转为特征向量,根据用户收藏的房源,计算收藏房源与它们之间的余弦距离,根据计算结果得到一个排序的相似房源列表作为推荐。
- 具体实现
在上一节我们介绍了房源搜索场景的具体流程,那么房源推荐系统类似,基于 Milvus向量相似度搜索引擎可以快速地得出相似性结果列表,根据用户偏好准确地推荐房源。
更多场景的应用
作为贝壳搜索平台,向量搜索业务肯定不止房源相似性分析,未来还需要对图片、视频、语音、文本等一系列非结构化数据的特征向量做分析,通过将各种各样的数据结合Milvus向量搜索引擎做分析,提供针对房源信息更智能、更全面、更个性化的用户推荐。Milvus的目标是成为AI产业中占绝对主导地位的通用AI数据处理平台,通过将成熟的AI模型结合Milvus向量搜索引擎够快速的将AI技术落地到各种业务场景中,相信我们一定会结合Milvus打造一个快速、全面、智能化的搜索平台。
结语
贝壳搜索平台主要负责公司中的搜索业务,实现房源的搜索和推荐,目前已经有基于 Elasticsearch 的文件搜索平台、基于 Dgraph 的图数据库、以及基于 Milvus 的向量搜索平台。向量搜索是贝壳去年底才开始探索的方向,特征向量是 AI 领域中通用的数据格式,特征向量相似度搜索引擎是处理快速增长的非结构化数据的重要组件。未来关于向量搜索的需求一定会越来越多,向量搜索引擎也是一个潮流,基于 Milvus 的向量搜索平台较好的完善了贝壳的搜索业务,对企业发展有十分重大的现实意义。
Milvus已经加入Linux AI(LF AI)基金会成为其最新的孵化项目,其社区支持非常优秀,版本更新也很快,除了支持核心的向量查询功能,还根据社区用户的需求不断优化,比如删除数据(0.7.0已实现)、以字符串为id、搜索过滤等功能也在后续版本计划中。但分布式方案在“小”数据量(比如百万级)时高QPS(每秒查询率,Queries-per-second)的应用有待优化。当然我们会继续投入到Milvus的探索中,未来期待与Milvus更多的结合应用!
参考文献
- *
作者介绍:
孙要飞,贝壳找房搜索平台资深工程师
陈室余,Zilliz数据工程师
欢迎加入 Milvus 社区
github.com/milvus-io/milvus | 源码
milvus.io | 官网
milvusio.slack.com | Slack 社区
zhihu.com/org/zilliz-11/columns | 知乎
zilliz.blog.csdn.net | CSDN 博客
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。