| 项目背景
贝壳作为一家房产服务互联网平台,如何在海量房源中选出能够快速成交的房源是对平台和经纪人来说都是一件非常重要同时具有挑战的事情,但是针对房型图,户型信息等一系列非结构化数据在平台中应该怎么搜索呢?
我们都知道计算机没有办法处理图片、语音、人类语言等非结构化数据,借助人工智能“万物皆可 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 更多的结合应用!
参考文献
- https://blog.csdn.net/u011748319/article/details/90269818
- https://zilliz.blog.csdn.net/article/details/103740339
- https://zilliz.blog.csdn.net/article/details/105304630
作者介绍:
孙要飞,贝壳找房搜索平台资深工程师
陈室余,Zilliz数据工程师