销售系统如何主动获客?揭秘个性化推荐背后的技术支持

2021年11月22日 阅读数:3
这篇文章主要向大家介绍销售系统如何主动获客?揭秘个性化推荐背后的技术支持,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

✏️ 编者按html

 通常来讲,企业寻找行业客户时,须要先人工搜索企业信息,判断是否符合商务需求,而后开展下一步的商务联系。这套流程繁琐费时,也容易遗漏客户。那么,有没有一套智能销售系统能够「主动获客」python

「励销云」平台能够为企业提供覆盖「获客-筛客-管客-数字化仓储-客服运营」的一体化 SaaS 服务。 本文做者是上海微问家信息技术有限公司大数据研究院的算法工程师杨沅霖、张文峰,他们的研究方向包括天然语言处理、计算机视觉等机器学习领域以及算法工程化。git

让咱们一块儿来揭秘这套个性化推荐背后的技术原理吧!github

技术背景算法

通常的推荐策略彻底基于数据库关键词的检索,检索结果只能作到包含重要关键字,可是没法创建企业和企业之间的关联。为了更好地理解文本语义,「励销云」须要使用一套算法模型,将描述性的信息转化为语义向量,从而更好地利用语义信息并进行推荐召回。数据库

如今,咱们已经进入万物皆可 Embedding 的时代,图片、文本、视频、语音等非结构化数据能够经过 Embedding 技术提取为特征向量,经过对特征向量的计算和类似度检索能够实现智能问答、智能推荐等场景。咱们须要一个向量数据库实现高性能的类似度检索,实现对目标企业召回对应的类似企业。咱们但愿完成「数据库+应用」实现产品的落地,真正服务于客户。api

企业客户智能推荐缓存

技术思路微信

企业数据包括位置、类型、标签等基本信息,以及对应的描述性信息。对于位置、类型等能够被结构化的信息,「励销云」利用数据离散化、One-Hot 编码等各类方式进行处理;而对于文本等描述信息,则利用 Word2Vector、GloVe、Sentence-BERT 等进行处理,实现描述信息转为向量的过程。在这个过程当中,咱们先文本进行分词,再使用腾讯的预训练词向量[1]拼接,而后取平均,生成对应的向量,再拼接以前结构化数据的向量,生成最终的企业向量。在产生对应的企业向量后,便可以使用类似搜索,找到目标企业的类似企业,实现召回的功能。并发

技术选型

Faiss[2]:向量化检索开山鼻祖的应用,Faiss 库是由 Facebook 开发的适用于稠密向量匹配的开源库。 

Vearch[3]:Vearch 是一个分布式向量搜索系统,可用来存储、计算海量的特征向量,基于 Facebook AI 研究院开源的 Faiss 实现。 

Milvus[4]:Milvus 向量数据库提供完整的向量数据更新,索引与查询框架。Milvus 向量数据库利用 GPU(Nvidia)进行索引加速与查询加速,能大幅提升单机性能。除了提供针对向量的近实时搜索能力外,Milvus 向量数据库能够对标量数据进行过滤。 

Faiss 不能开箱即用,在生产环境中使用涉及更多的开发、维护成本;Milvus 向量数据库和 Vearch 向量搜索系统是两款开箱即用的应用。Milvus 数据库在实现基本的类似计算功能的基础上,增强服务总体易用性、稳定性[5],部署更简单。通过一系列测试和对比分析,最终咱们选择了 Milvus 做为咱们的向量数据库。

项目实现

1. 基于 Kubernetes 搭建分布式 Milvus[6]

首先,要为 Milvus 数据库、MySQL 数据库配置数据存储(PersistentVolume)。为了方便快速地实现项目搭建,以 type 的类型为 local 做为示例:

apiVersion: v1 
kind: PersistentVolume 
metadata: 
 name: … 
 labels: 
 type: local 
spec: 
 capacity: 
 storage: 500Gi 
 accessModes: 
 - ReadWriteMany 
 hostPath: 
 path: "…"

而后,从 GitHub 仓库 (https://github.com/milvus-io/milvus-helm.git) 上拉取项目。

进入 milvus-helm/charts/milvus 目录,利用 Helm 安装。在咱们的项目中,咱们将 readonly.replicas 设为 6,readonly.cache.cacheSize 设为 50G (缓存配置和 PV 配置无关)。可根据机器配置和项目需求调大 cacheSize、readonly 等参数,从而加速搜索。

接着,将服务对外暴露,能够在测试集群上简单使用以下命令完成简单的对外暴露。

kubectl --namespace default port-forward --address 0.0.0.0 $POD_NAME 19530 19121 &

2. 相关表的建立:

建立时,能够参考官方文档[7]设置 INDEX_FILE_SIZE 大小以优化搜索速度。可根据业务需求,在表内实现各类分区。

3. 插入数据:

在构造数据时,在此将企业的 ID 映射为 64 位的 int 做为向量的 ID,方便后续搜索时使用。

4. 建立索引:

咱们选择了 IndexType.IVF_SQ8 索引[8] ,由于该索引搜索速度快,占用内存少。

5. 加载数据:

调用 load_collection 的 API 将数据和索引加载到内存中。

6. 基于 Flask 快速完成 RESTFUL 接口开发,配合 Gunicorn [9]实现服务的并发,完成服务上线。 

项目效果

Milvus 数据库中有多个集合,最大的集合下有 3000w+ 企业向量,在 topK=5十二、nprobe=256 的状况下,最大集合单向量搜索耗时为 100ms 左右。随着搜索的向量越多,耗时呈线性增加。但在 topK 为 100W 的极端状况下,Milvus 数据库依然在秒级内完成了类似企业的搜索。

在项目初期,咱们也重试过直接在 Faiss 上进行二次开发,可是因为数据量的逐渐增长与所需功能的增长,开发所需时间和质量没法获得保证。在转向使用 Milvus 数据库后,咱们在一个月内完成了初期相关理论验证与开发上线工做,测试状况良好。而且在这过程当中,当咱们遇到问题,社区和官方的技术支持会在 24 小时内协助解决,很是感谢!

参考文献

1. https://ai.tencent.com/ailab/nlp/en/embedding.html

2. https://github.com/facebookresearch/faiss

3. https://github.com/vearch/vearch

4. https://github.com/milvus-io/milvus/

5. https://zhuanlan.zhihu.com/p/364923722

6. https://github.com/milvus-io/bootcamp/tree/1.1/deployments/kubernetes

7. https://milvus.io/cn/docs/v1.1.1/create_drop_collection_python.md

8. https://milvus.io/cn/docs/v1.1.1/index.md#IVF_SQ8

9. https://gunicorn.org/


Zilliz 以从新定义数据科学为愿景,致力于打造一家全球领先的开源技术创新公司,并经过开源和云原生解决方案为企业解锁非结构化数据的隐藏价值。

Zilliz 构建了 Milvus 向量数据库,以加快下一代数据平台的发展。Milvus 数据库是 LF AI & Data 基金会的毕业项目,可以管理大量非结构化数据集,在新药发现、推荐系统、聊天机器人等方面具备普遍的应 用。

本文分享自微信公众号 - ZILLIZ(Zilliztech)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。